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 000000000..8bfa3de17 --- /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 df7cb1190..5cb9dac85 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 52e70583d..52d55b96d 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 0962916f3..8d8dcea6c 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 fcc394de5..79e2b4927 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 8c0dcdfba..ab38bb7f3 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 e169fa023..e8df469d3 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,