From d8ca38cb26bde932f0e294644900f2a8a32c0d66 Mon Sep 17 00:00:00 2001 From: Sergey 'dreik' Kolesnik Date: Mon, 9 Dec 2024 03:17:48 +0300 Subject: [PATCH 1/2] client_max_body_size setting --- .../20241209025008_client_max_body_size.js | 34 +++++++++++++++++++ .../schema/components/proxy-host-object.json | 9 +++++ .../schema/paths/nginx/proxy-hosts/get.json | 1 + .../paths/nginx/proxy-hosts/hostID/get.json | 1 + .../paths/nginx/proxy-hosts/hostID/put.json | 4 +++ .../schema/paths/nginx/proxy-hosts/post.json | 4 +++ backend/templates/proxy_host.conf | 2 ++ frontend/js/app/nginx/proxy/form.ejs | 7 +++- frontend/js/app/nginx/proxy/form.js | 1 + frontend/js/i18n/messages.json | 1 + frontend/js/models/proxy-host.js | 1 + test/cypress/e2e/api/ProxyHosts.cy.js | 1 + 12 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 backend/migrations/20241209025008_client_max_body_size.js diff --git a/backend/migrations/20241209025008_client_max_body_size.js b/backend/migrations/20241209025008_client_max_body_size.js new file mode 100644 index 00000000..2801e915 --- /dev/null +++ b/backend/migrations/20241209025008_client_max_body_size.js @@ -0,0 +1,34 @@ +const migrate_name = 'client_max_body_size'; +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.integer('client_max_body_size').notNull().unsigned().defaultTo('1'); + }) + .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/backend/schema/components/proxy-host-object.json b/backend/schema/components/proxy-host-object.json index 5098802b..fb1667e1 100644 --- a/backend/schema/components/proxy-host-object.json +++ b/backend/schema/components/proxy-host-object.json @@ -9,6 +9,7 @@ "domain_names", "forward_host", "forward_port", + "client_max_body_size", "access_list_id", "certificate_id", "ssl_forced", @@ -52,6 +53,11 @@ "minimum": 1, "maximum": 65535 }, + "client_max_body_size": { + "type": "integer", + "minimum": 1, + "maximum": 4096 + }, "access_list_id": { "$ref": "../common.json#/properties/access_list_id" }, @@ -112,6 +118,9 @@ "forward_port": { "$ref": "#/properties/forward_port" }, + "client_max_body_size": { + "$ref": "#/properties/client_max_body_size" + }, "forward_path": { "type": "string" }, diff --git a/backend/schema/paths/nginx/proxy-hosts/get.json b/backend/schema/paths/nginx/proxy-hosts/get.json index 1d9f6335..222d08e5 100644 --- a/backend/schema/paths/nginx/proxy-hosts/get.json +++ b/backend/schema/paths/nginx/proxy-hosts/get.json @@ -34,6 +34,7 @@ "domain_names": ["test.example.com"], "forward_host": "127.0.0.1", "forward_port": 8989, + "client_max_body_size": 1, "access_list_id": 0, "certificate_id": 0, "ssl_forced": false, diff --git a/backend/schema/paths/nginx/proxy-hosts/hostID/get.json b/backend/schema/paths/nginx/proxy-hosts/hostID/get.json index 5e10a9cf..e0fb7e4d 100644 --- a/backend/schema/paths/nginx/proxy-hosts/hostID/get.json +++ b/backend/schema/paths/nginx/proxy-hosts/hostID/get.json @@ -34,6 +34,7 @@ "domain_names": ["test.example.com"], "forward_host": "192.168.0.10", "forward_port": 8989, + "client_max_body_size": 1, "access_list_id": 0, "certificate_id": 0, "ssl_forced": false, diff --git a/backend/schema/paths/nginx/proxy-hosts/hostID/put.json b/backend/schema/paths/nginx/proxy-hosts/hostID/put.json index 5cab6e75..836b46f9 100644 --- a/backend/schema/paths/nginx/proxy-hosts/hostID/put.json +++ b/backend/schema/paths/nginx/proxy-hosts/hostID/put.json @@ -41,6 +41,9 @@ "forward_port": { "$ref": "../../../../components/proxy-host-object.json#/properties/forward_port" }, + "client_max_body_size": { + "$ref": "../../../../components/proxy-host-object.json#/properties/client_max_body_size" + }, "certificate_id": { "$ref": "../../../../components/proxy-host-object.json#/properties/certificate_id" }, @@ -100,6 +103,7 @@ "domain_names": ["test.example.com"], "forward_host": "192.168.0.10", "forward_port": 8989, + "client_max_body_size": 1, "access_list_id": 0, "certificate_id": 0, "ssl_forced": false, diff --git a/backend/schema/paths/nginx/proxy-hosts/post.json b/backend/schema/paths/nginx/proxy-hosts/post.json index 85455fb6..6edb9fd1 100644 --- a/backend/schema/paths/nginx/proxy-hosts/post.json +++ b/backend/schema/paths/nginx/proxy-hosts/post.json @@ -29,6 +29,9 @@ "forward_port": { "$ref": "../../../components/proxy-host-object.json#/properties/forward_port" }, + "client_max_body_size": { + "$ref": "../../../components/proxy-host-object.json#/properties/client_max_body_size" + }, "certificate_id": { "$ref": "../../../components/proxy-host-object.json#/properties/certificate_id" }, @@ -88,6 +91,7 @@ "domain_names": ["test.example.com"], "forward_host": "127.0.0.1", "forward_port": 8989, + "client_max_body_size": 1, "access_list_id": 0, "certificate_id": 0, "ssl_forced": false, diff --git a/backend/templates/proxy_host.conf b/backend/templates/proxy_host.conf index d23ca46f..35684160 100644 --- a/backend/templates/proxy_host.conf +++ b/backend/templates/proxy_host.conf @@ -47,6 +47,8 @@ proxy_http_version 1.1; } {% endif %} + client_max_body_size {{ client_max_body_size }}m; + # Custom include /data/nginx/custom/server_proxy[.]conf; } diff --git a/frontend/js/app/nginx/proxy/form.ejs b/frontend/js/app/nginx/proxy/form.ejs index 8e7a2a2d..6285aa1e 100644 --- a/frontend/js/app/nginx/proxy/form.ejs +++ b/frontend/js/app/nginx/proxy/form.ejs @@ -81,7 +81,12 @@ - +
+
+ + +
+
diff --git a/frontend/js/app/nginx/proxy/form.js b/frontend/js/app/nginx/proxy/form.js index 4437a6dd..7eb8152c 100644 --- a/frontend/js/app/nginx/proxy/form.js +++ b/frontend/js/app/nginx/proxy/form.js @@ -160,6 +160,7 @@ module.exports = Mn.View.extend({ // Manipulate data.forward_port = parseInt(data.forward_port, 10); + data.client_max_body_size = parseInt(data.client_max_body_size, 10); data.block_exploits = !!data.block_exploits; data.caching_enabled = !!data.caching_enabled; data.allow_websocket_upgrade = !!data.allow_websocket_upgrade; diff --git a/frontend/js/i18n/messages.json b/frontend/js/i18n/messages.json index 0bbde454..3a665d33 100644 --- a/frontend/js/i18n/messages.json +++ b/frontend/js/i18n/messages.json @@ -125,6 +125,7 @@ "forward-scheme": "Scheme", "forward-host": "Forward Hostname / IP", "forward-port": "Forward Port", + "client-max-body-size": "Max proxied upload size (Mb)", "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.js b/frontend/js/models/proxy-host.js index b82d09fe..ed3eb9bc 100644 --- a/frontend/js/models/proxy-host.js +++ b/frontend/js/models/proxy-host.js @@ -12,6 +12,7 @@ const model = Backbone.Model.extend({ forward_scheme: 'http', forward_host: '', forward_port: null, + client_max_body_size: 1, access_list_id: 0, certificate_id: 0, ssl_forced: false, diff --git a/test/cypress/e2e/api/ProxyHosts.cy.js b/test/cypress/e2e/api/ProxyHosts.cy.js index 5bc64580..ac048a83 100644 --- a/test/cypress/e2e/api/ProxyHosts.cy.js +++ b/test/cypress/e2e/api/ProxyHosts.cy.js @@ -18,6 +18,7 @@ describe('Proxy Hosts endpoints', () => { forward_scheme: 'http', forward_host: '1.1.1.1', forward_port: 80, + client_max_body_size: 1, access_list_id: '0', certificate_id: 0, meta: { From f6abe27a8acd1280313ebf99d467615f26bc5e72 Mon Sep 17 00:00:00 2001 From: Sergey 'dreik' Kolesnik Date: Mon, 9 Dec 2024 03:49:03 +0300 Subject: [PATCH 2/2] eslint --- backend/migrations/20241209025008_client_max_body_size.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/migrations/20241209025008_client_max_body_size.js b/backend/migrations/20241209025008_client_max_body_size.js index 2801e915..600732f2 100644 --- a/backend/migrations/20241209025008_client_max_body_size.js +++ b/backend/migrations/20241209025008_client_max_body_size.js @@ -1,5 +1,5 @@ const migrate_name = 'client_max_body_size'; -const logger = require('../logger').migrate; +const logger = require('../logger').migrate; /** * Migrate @@ -31,4 +31,4 @@ exports.up = function (knex/*, Promise*/) { exports.down = function (knex, Promise) { logger.warn('[' + migrate_name + '] You can\'t migrate down this one.'); return Promise.resolve(true); -}; +}; \ No newline at end of file