From a0f5dd7bdc0ed1202ed624d27c85af8041a6a727 Mon Sep 17 00:00:00 2001 From: kolbii Date: Tue, 19 Feb 2019 23:10:59 +0100 Subject: [PATCH] #65 custom config of location / on proxy host pane --- .../migrations/20190219223711_root_config.js | 37 +++++++++++++++++++ src/backend/schema/endpoints/proxy-hosts.json | 24 ++++++++++++ src/backend/templates/proxy_host.conf | 2 + src/frontend/js/app/nginx/proxy/form.ejs | 18 ++++++++- src/frontend/js/app/nginx/proxy/form.js | 11 ++++++ src/frontend/js/i18n/messages.json | 3 +- src/frontend/js/models/proxy-host.js | 2 + 7 files changed, 94 insertions(+), 3 deletions(-) create mode 100644 src/backend/migrations/20190219223711_root_config.js diff --git a/src/backend/migrations/20190219223711_root_config.js b/src/backend/migrations/20190219223711_root_config.js new file mode 100644 index 00000000..8bfa3de1 --- /dev/null +++ b/src/backend/migrations/20190219223711_root_config.js @@ -0,0 +1,37 @@ +'use strict'; + +const migrate_name = 'rootpath_config'; +const logger = require('../logger').migrate; + +/** + * Migrate + * + * @see http://knexjs.org/#Schema + * + * @param {Object} knex + * @param {Promise} Promise + * @returns {Promise} + */ +exports.up = function (knex/*, Promise*/) { + logger.info('[' + migrate_name + '] Migrating Up...'); + + return knex.schema.table('proxy_host', function (proxy_host) { + proxy_host.text('advanced_rootconfig').notNull().defaultTo(''); + proxy_host.integer('enabled_rootconfig').notNull().unsigned().defaultTo(0); + }) + .then(() => { + logger.info('[' + migrate_name + '] proxy_host Table altered'); + }); +}; + +/** + * Undo Migrate + * + * @param {Object} knex + * @param {Promise} Promise + * @returns {Promise} + */ +exports.down = function (knex, Promise) { + logger.warn('[' + migrate_name + '] You can\'t migrate down this one.'); + return Promise.resolve(true); +}; diff --git a/src/backend/schema/endpoints/proxy-hosts.json b/src/backend/schema/endpoints/proxy-hosts.json index df7cb119..5cb9dac8 100644 --- a/src/backend/schema/endpoints/proxy-hosts.json +++ b/src/backend/schema/endpoints/proxy-hosts.json @@ -69,6 +69,12 @@ }, "meta": { "type": "object" + }, + "advanced_rootconfig": { + "type": "string" + }, + "enabled_rootconfig": { + "type": "boolean" } }, "properties": { @@ -128,6 +134,12 @@ }, "meta": { "$ref": "#/definitions/meta" + }, + "advanced_rootconfig": { + "$ref": "#/definitions/advanced_rootconfig" + }, + "enabled_rootconfig": { + "$ref": "#/definitions/enabled_rootconfig" } }, "links": [ @@ -215,6 +227,12 @@ }, "meta": { "$ref": "#/definitions/meta" + }, + "advanced_rootconfig": { + "$ref": "#/definitions/advanced_rootconfig" + }, + "enabled_rootconfig": { + "$ref": "#/definitions/enabled_rootconfig" } } }, @@ -285,6 +303,12 @@ }, "meta": { "$ref": "#/definitions/meta" + }, + "advanced_rootconfig": { + "$ref": "#/definitions/advanced_rootconfig" + }, + "enabled_rootconfig": { + "$ref": "#/definitions/enabled_rootconfig" } } }, diff --git a/src/backend/templates/proxy_host.conf b/src/backend/templates/proxy_host.conf index 52e70583..52d55b96 100644 --- a/src/backend/templates/proxy_host.conf +++ b/src/backend/templates/proxy_host.conf @@ -34,6 +34,8 @@ server { # Proxy! include conf.d/include/proxy.conf; + + {{advanced_rootconfig}} } } {% endif %} diff --git a/src/frontend/js/app/nginx/proxy/form.ejs b/src/frontend/js/app/nginx/proxy/form.ejs index 0962916f..8d8dcea6 100644 --- a/src/frontend/js/app/nginx/proxy/form.ejs +++ b/src/frontend/js/app/nginx/proxy/form.ejs @@ -59,7 +59,7 @@ -
+
- +
+
+ +
+
+
+
+ + +
+
diff --git a/src/frontend/js/app/nginx/proxy/form.js b/src/frontend/js/app/nginx/proxy/form.js index fcc394de..79e2b492 100644 --- a/src/frontend/js/app/nginx/proxy/form.js +++ b/src/frontend/js/app/nginx/proxy/form.js @@ -27,12 +27,21 @@ module.exports = Mn.View.extend({ ssl_forced: 'input[name="ssl_forced"]', hsts_enabled: 'input[name="hsts_enabled"]', hsts_subdomains: 'input[name="hsts_subdomains"]', + enable_rootpath: 'input[name="enabled_rootconfig"]', + config_rootpath: 'textarea[name="advanced_rootconfig"]', http2_support: 'input[name="http2_support"]', forward_scheme: 'select[name="forward_scheme"]', letsencrypt: '.letsencrypt' }, events: { + 'change @ui.enable_rootpath': function(e) { + if (e.target.checked) { + this.ui.config_rootpath.parent().show(); + } else { + this.ui.config_rootpath.parent().hide(); + } + }, 'change @ui.certificate_select': function () { let id = this.ui.certificate_select.val(); if (id === 'new') { @@ -102,6 +111,7 @@ module.exports = Mn.View.extend({ data.hsts_enabled = !!data.hsts_enabled; data.hsts_subdomains = !!data.hsts_subdomains; data.ssl_forced = !!data.ssl_forced; + data.enabled_rootconfig = !!data.enabled_rootconfig; if (typeof data.domain_names === 'string' && data.domain_names) { data.domain_names = data.domain_names.split(','); @@ -162,6 +172,7 @@ module.exports = Mn.View.extend({ onRender: function () { let view = this; + this.ui.enable_rootpath.trigger('change'); this.ui.ssl_forced.trigger('change'); this.ui.hsts_enabled.trigger('change'); diff --git a/src/frontend/js/i18n/messages.json b/src/frontend/js/i18n/messages.json index 8c0dcdfb..ab38bb7f 100644 --- a/src/frontend/js/i18n/messages.json +++ b/src/frontend/js/i18n/messages.json @@ -106,7 +106,8 @@ "help-content": "A Proxy Host is the incoming endpoint for a web service that you want to forward.\nIt provides optional SSL termination for your service that might not have SSL support built in.\nProxy Hosts are the most common use for the Nginx Proxy Manager.", "access-list": "Access List", "allow-websocket-upgrade": "Websockets Support", - "ignore-invalid-upstream-ssl": "Ignore Invalid SSL" + "ignore-invalid-upstream-ssl": "Ignore Invalid SSL", + "advanced-config-root": "Custom config of /" }, "redirection-hosts": { "title": "Redirection Hosts", diff --git a/src/frontend/js/models/proxy-host.js b/src/frontend/js/models/proxy-host.js index e169fa02..e8df469d 100644 --- a/src/frontend/js/models/proxy-host.js +++ b/src/frontend/js/models/proxy-host.js @@ -26,6 +26,8 @@ const model = Backbone.Model.extend({ advanced_config: '', enabled: true, meta: {}, + enabled_rootconfig: false, + advanced_rootconfig: null, // The following are expansions: owner: null, access_list: null,