From f61ab55b52b259ee8b740bd84d3cb3e2961b0d91 Mon Sep 17 00:00:00 2001 From: Nikolaj Frey Date: Thu, 13 Aug 2020 17:06:44 +1000 Subject: [PATCH 1/3] Added a restart dev script which destroys then starts dev --- scripts/restart-dev | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 scripts/restart-dev diff --git a/scripts/restart-dev b/scripts/restart-dev new file mode 100644 index 000000000..b8e5ec842 --- /dev/null +++ b/scripts/restart-dev @@ -0,0 +1,7 @@ +DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +. "$DIR/.common.sh" + +cd "${DIR}/.." + +. scripts/destroy-dev +. scripts/start-dev \ No newline at end of file From 8de118d875e8d7484e2b2a8f312e5f1797584f69 Mon Sep 17 00:00:00 2001 From: Nikolaj Frey Date: Fri, 14 Aug 2020 15:00:22 +1000 Subject: [PATCH 2/3] Backend schema and migration modifications for allowing static hosts and locations --- backend/migrations/20180618015850_initial.js | 3 + backend/schema/definitions.json | 5 ++ backend/schema/endpoints/proxy-hosts.json | 60 +++++++++++++++++--- backend/templates/_listen.conf | 5 ++ backend/templates/_location.conf | 17 ++++-- backend/templates/default.conf | 1 + backend/templates/proxy_host.conf | 10 +++- 7 files changed, 85 insertions(+), 16 deletions(-) diff --git a/backend/migrations/20180618015850_initial.js b/backend/migrations/20180618015850_initial.js index a112e8261..b07908700 100644 --- a/backend/migrations/20180618015850_initial.js +++ b/backend/migrations/20180618015850_initial.js @@ -69,6 +69,9 @@ exports.up = function (knex/*, Promise*/) { table.json('domain_names').notNull(); table.string('forward_ip').notNull(); table.integer('forward_port').notNull().unsigned(); + table.string('root_dir').notNull(); + table.string('index_file').notNull(); + table.integer('static').notNull().unsigned().defaultTo(0); table.integer('access_list_id').notNull().unsigned().defaultTo(0); table.integer('certificate_id').notNull().unsigned().defaultTo(0); table.integer('ssl_forced').notNull().unsigned().defaultTo(0); diff --git a/backend/schema/definitions.json b/backend/schema/definitions.json index 2aa538b23..164dd6fc6 100644 --- a/backend/schema/definitions.json +++ b/backend/schema/definitions.json @@ -222,6 +222,11 @@ "description": "Should we cache assets", "example": true, "type": "boolean" + }, + "static": { + "description": "Should the proxy point to static files", + "example": true, + "type": "boolean" } } } diff --git a/backend/schema/endpoints/proxy-hosts.json b/backend/schema/endpoints/proxy-hosts.json index 9a3fff2fc..94c0ba7ad 100644 --- a/backend/schema/endpoints/proxy-hosts.json +++ b/backend/schema/endpoints/proxy-hosts.json @@ -24,14 +24,22 @@ }, "forward_host": { "type": "string", - "minLength": 1, + "minLength": 0, "maxLength": 255 }, "forward_port": { "type": "integer", - "minimum": 1, + "minimum": 0, "maximum": 65535 }, + "root_dir": { + "type": "string", + "minLength": 0, + }, + "index_file": { + "type": "string", + "minLength": 0, + }, "certificate_id": { "$ref": "../definitions.json#/definitions/certificate_id" }, @@ -53,6 +61,9 @@ "caching_enabled": { "$ref": "../definitions.json#/definitions/caching_enabled" }, + "static": { + "$ref": "../definitions.json#/definitions/static" + }, "allow_websocket_upgrade": { "description": "Allow Websocket Upgrade for all paths", "example": true, @@ -76,10 +87,7 @@ "items": { "type": "object", "required": [ - "forward_scheme", - "forward_host", - "forward_port", - "path" + "forward_scheme" ], "additionalProperties": false, "properties": { @@ -99,6 +107,15 @@ "forward_port": { "$ref": "#/definitions/forward_port" }, + "root_dir": { + "$ref": "#/definitions/root_dir" + }, + "index_file": { + "$ref": "#/definitions/index_file" + }, + "static": { + "$ref": "#/definitions/static" + }, "forward_path": { "type": "string" }, @@ -131,6 +148,12 @@ "forward_port": { "$ref": "#/definitions/forward_port" }, + "root_dir": { + "$ref": "#/definitions/root_dir" + }, + "index_file": { + "$ref": "#/definitions/index_file" + }, "certificate_id": { "$ref": "#/definitions/certificate_id" }, @@ -152,6 +175,9 @@ "caching_enabled": { "$ref": "#/definitions/caching_enabled" }, + "static": { + "$ref": "#/definitions/static" + }, "allow_websocket_upgrade": { "$ref": "#/definitions/allow_websocket_upgrade" }, @@ -204,9 +230,7 @@ "additionalProperties": false, "required": [ "domain_names", - "forward_scheme", - "forward_host", - "forward_port" + "forward_scheme" ], "properties": { "domain_names": { @@ -221,6 +245,12 @@ "forward_port": { "$ref": "#/definitions/forward_port" }, + "root_dir": { + "$ref": "#/definitions/root_dir" + }, + "index_file": { + "$ref": "#/definitions/index_file" + }, "certificate_id": { "$ref": "#/definitions/certificate_id" }, @@ -242,6 +272,9 @@ "caching_enabled": { "$ref": "#/definitions/caching_enabled" }, + "static": { + "$ref": "#/definitions/static" + }, "allow_websocket_upgrade": { "$ref": "#/definitions/allow_websocket_upgrade" }, @@ -294,6 +327,12 @@ "forward_port": { "$ref": "#/definitions/forward_port" }, + "root_dir": { + "$ref": "#/definitions/root_dir" + }, + "index_file": { + "$ref": "#/definitions/index_file" + }, "certificate_id": { "$ref": "#/definitions/certificate_id" }, @@ -315,6 +354,9 @@ "caching_enabled": { "$ref": "#/definitions/caching_enabled" }, + "static": { + "$ref": "#/definitions/static" + }, "allow_websocket_upgrade": { "$ref": "#/definitions/allow_websocket_upgrade" }, diff --git a/backend/templates/_listen.conf b/backend/templates/_listen.conf index 8f40bea2e..08ec53692 100644 --- a/backend/templates/_listen.conf +++ b/backend/templates/_listen.conf @@ -13,3 +13,8 @@ {% endif %} {% endif %} server_name {{ domain_names | join: " " }}; +{% if static == 1 or static == true %} + root {{ root_dir }}; + index {{ index_file }}; +{% endif %} + diff --git a/backend/templates/_location.conf b/backend/templates/_location.conf index 0b8894d11..72f3ea50b 100644 --- a/backend/templates/_location.conf +++ b/backend/templates/_location.conf @@ -1,9 +1,16 @@ location {{ path }} { - proxy_set_header Host $host; - proxy_set_header X-Forwarded-Scheme $scheme; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_set_header X-Forwarded-For $remote_addr; - proxy_pass {{ forward_scheme }}://{{ forward_host }}:{{ forward_port }}{{ forward_path }}; + + {% if static == 0 or static == false %} + proxy_set_header Host $host; + proxy_set_header X-Forwarded-Scheme $scheme; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_pass {{ forward_scheme }}://{{ forward_host }}:{{ forward_port }}{{ forward_path }}; + {% else %} + alias {{ root_dir }}/$1; + try_files $uri /{{ index_file }} =200; + {% endif %} + {{ advanced_config }} } diff --git a/backend/templates/default.conf b/backend/templates/default.conf index 56b67090e..dfb0b1b8a 100644 --- a/backend/templates/default.conf +++ b/backend/templates/default.conf @@ -29,6 +29,7 @@ server { {%- if value == "html" %} root /data/nginx/default_www; + # root /var/www/test2; location / { try_files $uri /index.html; } diff --git a/backend/templates/proxy_host.conf b/backend/templates/proxy_host.conf index 17a521078..6f8ddd02a 100644 --- a/backend/templates/proxy_host.conf +++ b/backend/templates/proxy_host.conf @@ -52,8 +52,14 @@ server { proxy_http_version 1.1; {% endif %} - # Proxy! - include conf.d/include/proxy.conf; + {% if static == 1 or static == true %} + alias {{ root_dir }}/$1; + try_files $uri /{{index_file}} =200; + {% else %} + # Proxy! + include conf.d/include/proxy.conf; + + {% endif %} } {% endif %} From 5a3d32db7bbfaccea13ccd0e239b71afbbfc33da Mon Sep 17 00:00:00 2001 From: Nikolaj Frey Date: Fri, 14 Aug 2020 15:01:09 +1000 Subject: [PATCH 3/3] Frontend form and marionette modifications to allow static hosts and locations --- frontend/js/app/nginx/proxy/form.ejs | 31 ++++++++++++++--- frontend/js/app/nginx/proxy/form.js | 29 +++++++++++----- frontend/js/app/nginx/proxy/list/item.ejs | 8 ++++- frontend/js/app/nginx/proxy/location-item.ejs | 33 +++++++++++++++---- frontend/js/app/nginx/proxy/location.js | 17 ++++++++-- frontend/js/i18n/messages.json | 3 ++ frontend/js/models/proxy-host-location.js | 7 ++-- frontend/js/models/proxy-host.js | 5 ++- 8 files changed, 107 insertions(+), 26 deletions(-) diff --git a/frontend/js/app/nginx/proxy/form.ejs b/frontend/js/app/nginx/proxy/form.ejs index 1a4983013..5ca45a464 100644 --- a/frontend/js/app/nginx/proxy/form.ejs +++ b/frontend/js/app/nginx/proxy/form.ejs @@ -35,7 +35,7 @@
- + + + autocomplete="off" maxlength="255">
- - + + > +
+
+
+
+ + autocomplete="off" maxlength="255"> +
+
+
+
+ + autocomplete="off" maxlength="255">
@@ -81,6 +93,15 @@
+
+
+ +
+
diff --git a/frontend/js/app/nginx/proxy/form.js b/frontend/js/app/nginx/proxy/form.js index 8802b9582..63be89653 100644 --- a/frontend/js/app/nginx/proxy/form.js +++ b/frontend/js/app/nginx/proxy/form.js @@ -43,7 +43,10 @@ module.exports = Mn.View.extend({ dns_provider_credentials: 'textarea[name="meta[dns_provider_credentials]"]', propagation_seconds: 'input[name="meta[propagation_seconds]"]', forward_scheme: 'select[name="forward_scheme"]', - letsencrypt: '.letsencrypt' + letsencrypt: '.letsencrypt', + root_dir: 'input[name="root_dir"]', + index_file: 'input[name="index_file"]', + static: 'input[type="checkbox"].static-checkbox', }, regions: { @@ -113,7 +116,7 @@ module.exports = Mn.View.extend({ } else { this.ui.dns_provider.prop('required', false); this.ui.dns_provider_credentials.prop('required', false); - this.ui.dns_challenge_content.hide(); + this.ui.dns_challenge_content.hide(); } }, @@ -125,17 +128,26 @@ module.exports = Mn.View.extend({ this.ui.credentials_file_content.show(); } else { this.ui.dns_provider_credentials.prop('required', false); - this.ui.credentials_file_content.hide(); + this.ui.credentials_file_content.hide(); } }, 'click @ui.add_location_btn': function (e) { e.preventDefault(); - + const model = new ProxyLocationModel.Model(); this.locationsCollection.add(model); }, + 'click @ui.static': function(e){ + const map = {}; + let value = e.target.value + if(e.target.type == 'checkbox') value = e.target.checked; + map[e.target.name] = value; + this.model.set(map); + setTimeout(this.render.bind(this), 300) + }, + 'click @ui.save': function (e) { e.preventDefault(); this.ui.le_error_info.hide(); @@ -167,17 +179,18 @@ module.exports = Mn.View.extend({ data.hsts_enabled = !!data.hsts_enabled; data.hsts_subdomains = !!data.hsts_subdomains; data.ssl_forced = !!data.ssl_forced; - + data.static = !!data.static; + if (typeof data.meta === 'undefined') data.meta = {}; data.meta.letsencrypt_agree = data.meta.letsencrypt_agree == 1; data.meta.dns_challenge = data.meta.dns_challenge == 1; - + if(!data.meta.dns_challenge){ data.meta.dns_provider = undefined; data.meta.dns_provider_credentials = undefined; data.meta.propagation_seconds = undefined; } else { - if(data.meta.propagation_seconds === '') data.meta.propagation_seconds = undefined; + if(data.meta.propagation_seconds === '') data.meta.propagation_seconds = undefined; } if (typeof data.domain_names === 'string' && data.domain_names) { @@ -185,7 +198,7 @@ module.exports = Mn.View.extend({ } // Check for any domain names containing wildcards, which are not allowed with letsencrypt - if (data.certificate_id === 'new') { + if (data.certificate_id === 'new') { let domain_err = false; if (!data.meta.dns_challenge) { data.domain_names.map(function (name) { diff --git a/frontend/js/app/nginx/proxy/list/item.ejs b/frontend/js/app/nginx/proxy/list/item.ejs index d90ace4c0..88aa265e3 100644 --- a/frontend/js/app/nginx/proxy/list/item.ejs +++ b/frontend/js/app/nginx/proxy/list/item.ejs @@ -23,7 +23,13 @@
-
<%- forward_scheme %>://<%- forward_host %>:<%- forward_port %>
+ + <% if (!static) { %> +
<%- forward_scheme %>://<%- forward_host %>:<%- forward_port %>
+ <% } else { %> +
<%- root_dir %>
+
<%- index_file %>
+ <% } %>
<%- certificate && certificate_id ? i18n('ssl', certificate.provider) : i18n('ssl', 'none') %>
diff --git a/frontend/js/app/nginx/proxy/location-item.ejs b/frontend/js/app/nginx/proxy/location-item.ejs index 39445f7be..4673a0f01 100644 --- a/frontend/js/app/nginx/proxy/location-item.ejs +++ b/frontend/js/app/nginx/proxy/location-item.ejs @@ -16,7 +16,7 @@
- + + + autocomplete="off" maxlength="200"> <%- i18n('proxy-hosts', 'custom-forward-host-help') %>
- - + + >
+
+
+ + autocomplete="off" maxlength="200"> +
+
+
+
+ + autocomplete="off" maxlength="200"> +
+
+
+
+ +
+
diff --git a/frontend/js/app/nginx/proxy/location.js b/frontend/js/app/nginx/proxy/location.js index e9513a480..b12b621a0 100644 --- a/frontend/js/app/nginx/proxy/location.js +++ b/frontend/js/app/nginx/proxy/location.js @@ -7,13 +7,15 @@ const LocationView = Mn.View.extend({ className: 'location_block', ui: { - toggle: 'input[type="checkbox"]', + settings: 'input[type="checkbox"].settings-checkbox', + static: 'input[type="checkbox"].location-static-checkbox', config: '.config', delete: '.location-delete' }, events: { - 'change @ui.toggle': function(el) { + + 'change @ui.settings': function(el) { if (el.target.checked) { this.ui.config.show(); } else { @@ -22,11 +24,20 @@ const LocationView = Mn.View.extend({ }, 'change .model': function (e) { + const map = {}; - map[e.target.name] = e.target.value; + + let value = e.target.value + if(e.target.type == 'checkbox') value = e.target.checked ? 1 : 0 + map[e.target.name] = value this.model.set(map); + + setTimeout(this.render.bind(this), 300) + }, + // 'click @ui.static': 'render', + 'click @ui.delete': function () { this.model.destroy(); } diff --git a/frontend/js/i18n/messages.json b/frontend/js/i18n/messages.json index 202e94ac7..b23386a3f 100644 --- a/frontend/js/i18n/messages.json +++ b/frontend/js/i18n/messages.json @@ -123,6 +123,9 @@ "forward-scheme": "Scheme", "forward-host": "Forward Hostname / IP", "forward-port": "Forward Port", + "root-dir": "Root Directory", + "static": "Static File Proxy", + "index-file": "Index File", "delete": "Delete Proxy Host", "delete-confirm": "Are you sure you want to delete the Proxy host for: {domains}?", "help-title": "What is a Proxy Host?", diff --git a/frontend/js/models/proxy-host-location.js b/frontend/js/models/proxy-host-location.js index 2a35059f8..9ce641d2f 100644 --- a/frontend/js/models/proxy-host-location.js +++ b/frontend/js/models/proxy-host-location.js @@ -9,8 +9,11 @@ const model = Backbone.Model.extend({ path: '', advanced_config: '', forward_scheme: 'http', - forward_host: '', - forward_port: '80' + forward_host: null, + forward_port: '80', + root_dir: null, + static: false, + index_file: 'index.html', } }, diff --git a/frontend/js/models/proxy-host.js b/frontend/js/models/proxy-host.js index b82d09fef..fca51b2c0 100644 --- a/frontend/js/models/proxy-host.js +++ b/frontend/js/models/proxy-host.js @@ -10,8 +10,11 @@ const model = Backbone.Model.extend({ modified_on: null, domain_names: [], forward_scheme: 'http', - forward_host: '', + forward_host: null, forward_port: null, + root_dir: null, + static: false, + index_file: 'index.html', access_list_id: 0, certificate_id: 0, ssl_forced: false, pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy