feat: add remark in proxy hosts list

This commit is contained in:
GodD6366 2024-09-17 17:05:17 +08:00
parent 63d06da8a8
commit ee7fd13bdf
9 changed files with 76 additions and 10 deletions

View file

@ -0,0 +1,36 @@
const migrate_name = 'identifier_for_migrate';
const logger = require('../logger').migrate;
/**
* Migrate
*
* @see http://knexjs.org/#Schema
*
* @param {Object} knex
* @param {Promise} Promise
* @returns {Promise}
*/
exports.up = function (knex) {
logger.info('[' + migrate_name + '] Migrating Up...');
return knex.schema.table('proxy_host', function (table) {
table.string('remark', 100).nullable().defaultTo('');
logger.info('[' + migrate_name + '] Migrating Up Complete');
});
};
/**
* Undo Migrate
*
* @param {Object} knex
* @param {Promise} Promise
* @returns {Promise}
*/
exports.down = function (knex) {
logger.info('[' + migrate_name + '] Migrating Down...');
return knex.schema.table('proxy_host', function (table) {
table.dropColumn('remark');
logger.info('[' + migrate_name + '] Migrating Down Complete');
});
};

View file

@ -46,7 +46,7 @@ class ProxyHost extends Model {
}
static get jsonAttributes () {
return ['domain_names', 'meta', 'locations'];
return ['domain_names', 'meta', 'locations', 'remark'];
}
static get relationMappings () {

View file

@ -107,6 +107,11 @@
}
}
}
},
"remark": {
"type": "string",
"description": "Remark",
"maxLength": 100
}
},
"properties": {
@ -169,6 +174,9 @@
},
"locations": {
"$ref": "#/definitions/locations"
},
"remark": {
"$ref": "#/definitions/remark"
}
},
"links": [
@ -259,6 +267,9 @@
},
"locations": {
"$ref": "#/definitions/locations"
},
"remark": {
"$ref": "#/definitions/remark"
}
}
},
@ -332,6 +343,9 @@
},
"locations": {
"$ref": "#/definitions/locations"
},
"remark": {
"$ref": "#/definitions/remark"
}
}
},

View file

@ -90,6 +90,14 @@
</select>
</div>
</div>
<!-- remark -->
<div class="col-sm-12 col-md-12">
<div class="form-group">
<label class="form-label"><%- i18n('proxy-hosts', 'remark') %></label>
<input type="text" name="remark" class="form-control text-monospace" placeholder="" value="<%- remark %>" autocomplete="off" maxlength="255" required>
</div>
</div>
</div>
</div>

View file

@ -24,6 +24,7 @@ module.exports = Mn.View.extend({
form: 'form',
domain_names: 'input[name="domain_names"]',
forward_host: 'input[name="forward_host"]',
remark: 'input[name="remark"]',
buttons: '.modal-footer button',
cancel: 'button.cancel',
save: 'button.save',
@ -113,7 +114,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,13 +126,13 @@ 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);
},
@ -167,17 +168,17 @@ module.exports = Mn.View.extend({
data.hsts_enabled = !!data.hsts_enabled;
data.hsts_subdomains = !!data.hsts_subdomains;
data.ssl_forced = !!data.ssl_forced;
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 +186,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) {

View file

@ -25,6 +25,9 @@
<td>
<div class="text-monospace"><%- forward_scheme %>://<%- forward_host %>:<%- forward_port %></div>
</td>
<td>
<div class="text-monospace"><%- remark %></div>
</td>
<td>
<div><%- certificate && certificate_id ? i18n('ssl', certificate.provider) : i18n('ssl', 'none') %></div>
</td>
@ -57,4 +60,4 @@
</div>
</div>
</td>
<% } %>
<% } %>

View file

@ -2,6 +2,7 @@
<th width="30">&nbsp;</th>
<th><%- i18n('str', 'source') %></th>
<th><%- i18n('str', 'destination') %></th>
<th><%- i18n('str', 'remark') %></th>
<th><%- i18n('str', 'ssl') %></th>
<th><%- i18n('str', 'access') %></th>
<th><%- i18n('str', 'status') %></th>

View file

@ -21,6 +21,7 @@
"choose-file": "Choose file",
"source": "Source",
"destination": "Destination",
"remark": "Remark",
"ssl": "SSL",
"access": "Access",
"public": "Public",
@ -133,7 +134,8 @@
"allow-websocket-upgrade": "Websockets Support",
"ignore-invalid-upstream-ssl": "Ignore Invalid SSL",
"custom-forward-host-help": "Add a path for sub-folder forwarding.\nExample: 203.0.113.25/path/",
"search": "Search Host…"
"search": "Search Host…",
"remark": "Remark"
},
"redirection-hosts": {
"title": "Redirection Hosts",

View file

@ -9,6 +9,7 @@ const model = Backbone.Model.extend({
created_on: null,
modified_on: null,
domain_names: [],
remark: '',
forward_scheme: 'http',
forward_host: '',
forward_port: null,