mirror of
https://github.com/NginxProxyManager/nginx-proxy-manager.git
synced 2025-10-05 12:20:10 +00:00
Compare commits
30 Commits
v2.12.4
...
0a2baa6513
Author | SHA1 | Date | |
---|---|---|---|
|
0a2baa6513 | ||
|
3856b6b03d | ||
|
f34cb59711 | ||
|
c135880625 | ||
|
408eab842d | ||
|
101afa0013 | ||
|
2cab405190 | ||
|
d3a5fac51b | ||
|
a121cb124e | ||
|
65f971fd36 | ||
|
ad36fb5c2d | ||
|
c6d884dab6 | ||
|
5dc78df0bb | ||
|
04636b71a9 | ||
|
1353937c36 | ||
|
f68c1b7c29 | ||
|
32e0784865 | ||
|
f386f6b640 | ||
|
5ba7363c9e | ||
|
2e45444328 | ||
|
eb5c51a657 | ||
|
cb795565ea | ||
|
04b3608b4e | ||
|
111fc287eb | ||
|
95a94a4f8c | ||
|
5e7b69c396 | ||
|
2723de24fd | ||
|
891877afb6 | ||
|
8e9e033a72 | ||
|
e6ec74c2f7 |
@@ -1,7 +1,7 @@
|
|||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="https://nginxproxymanager.com/github.png">
|
<img src="https://nginxproxymanager.com/github.png">
|
||||||
<br><br>
|
<br><br>
|
||||||
<img src="https://img.shields.io/badge/version-2.12.4-green.svg?style=for-the-badge">
|
<img src="https://img.shields.io/badge/version-2.12.3-green.svg?style=for-the-badge">
|
||||||
<a href="https://hub.docker.com/repository/docker/jc21/nginx-proxy-manager">
|
<a href="https://hub.docker.com/repository/docker/jc21/nginx-proxy-manager">
|
||||||
<img src="https://img.shields.io/docker/stars/jc21/nginx-proxy-manager.svg?style=for-the-badge">
|
<img src="https://img.shields.io/docker/stars/jc21/nginx-proxy-manager.svg?style=for-the-badge">
|
||||||
</a>
|
</a>
|
||||||
|
@@ -3,8 +3,6 @@
|
|||||||
const schema = require('./schema');
|
const schema = require('./schema');
|
||||||
const logger = require('./logger').global;
|
const logger = require('./logger').global;
|
||||||
|
|
||||||
const IP_RANGES_FETCH_ENABLED = process.env.IP_RANGES_FETCH_ENABLED !== 'false';
|
|
||||||
|
|
||||||
async function appStart () {
|
async function appStart () {
|
||||||
const migrate = require('./migrate');
|
const migrate = require('./migrate');
|
||||||
const setup = require('./setup');
|
const setup = require('./setup');
|
||||||
@@ -15,16 +13,7 @@ async function appStart () {
|
|||||||
return migrate.latest()
|
return migrate.latest()
|
||||||
.then(setup)
|
.then(setup)
|
||||||
.then(schema.getCompiledSchema)
|
.then(schema.getCompiledSchema)
|
||||||
.then(() => {
|
.then(internalIpRanges.fetch)
|
||||||
if (IP_RANGES_FETCH_ENABLED) {
|
|
||||||
logger.info('IP Ranges fetch is enabled');
|
|
||||||
return internalIpRanges.fetch().catch((err) => {
|
|
||||||
logger.error('IP Ranges fetch failed, continuing anyway:', err.message);
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
logger.info('IP Ranges fetch is disabled by environment variable');
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.then(() => {
|
.then(() => {
|
||||||
internalCertificate.initTimer();
|
internalCertificate.initTimer();
|
||||||
internalIpRanges.initTimer();
|
internalIpRanges.initTimer();
|
||||||
|
@@ -576,6 +576,7 @@ const internalCertificate = {
|
|||||||
return internalCertificate.create(access, {
|
return internalCertificate.create(access, {
|
||||||
provider: 'letsencrypt',
|
provider: 'letsencrypt',
|
||||||
domain_names: data.domain_names,
|
domain_names: data.domain_names,
|
||||||
|
ssl_key_type: data.ssl_key_type,
|
||||||
meta: data.meta
|
meta: data.meta
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
@@ -838,6 +839,7 @@ const internalCertificate = {
|
|||||||
|
|
||||||
const cmd = `${certbotCommand} certonly ` +
|
const cmd = `${certbotCommand} certonly ` +
|
||||||
`--config '${letsencryptConfig}' ` +
|
`--config '${letsencryptConfig}' ` +
|
||||||
|
`--key-type '${certificate.ssl_key_type}' ` +
|
||||||
'--work-dir "/tmp/letsencrypt-lib" ' +
|
'--work-dir "/tmp/letsencrypt-lib" ' +
|
||||||
'--logs-dir "/tmp/letsencrypt-log" ' +
|
'--logs-dir "/tmp/letsencrypt-log" ' +
|
||||||
`--cert-name "npm-${certificate.id}" ` +
|
`--cert-name "npm-${certificate.id}" ` +
|
||||||
@@ -879,6 +881,7 @@ const internalCertificate = {
|
|||||||
|
|
||||||
let mainCmd = certbotCommand + ' certonly ' +
|
let mainCmd = certbotCommand + ' certonly ' +
|
||||||
`--config '${letsencryptConfig}' ` +
|
`--config '${letsencryptConfig}' ` +
|
||||||
|
`--key-type '${certificate.ssl_key_type}' ` +
|
||||||
'--work-dir "/tmp/letsencrypt-lib" ' +
|
'--work-dir "/tmp/letsencrypt-lib" ' +
|
||||||
'--logs-dir "/tmp/letsencrypt-log" ' +
|
'--logs-dir "/tmp/letsencrypt-log" ' +
|
||||||
`--cert-name 'npm-${certificate.id}' ` +
|
`--cert-name 'npm-${certificate.id}' ` +
|
||||||
@@ -975,6 +978,7 @@ const internalCertificate = {
|
|||||||
|
|
||||||
const cmd = certbotCommand + ' renew --force-renewal ' +
|
const cmd = certbotCommand + ' renew --force-renewal ' +
|
||||||
`--config '${letsencryptConfig}' ` +
|
`--config '${letsencryptConfig}' ` +
|
||||||
|
`--key-type '${certificate.ssl_key_type}' ` +
|
||||||
'--work-dir "/tmp/letsencrypt-lib" ' +
|
'--work-dir "/tmp/letsencrypt-lib" ' +
|
||||||
'--logs-dir "/tmp/letsencrypt-log" ' +
|
'--logs-dir "/tmp/letsencrypt-log" ' +
|
||||||
`--cert-name 'npm-${certificate.id}' ` +
|
`--cert-name 'npm-${certificate.id}' ` +
|
||||||
@@ -1008,6 +1012,7 @@ const internalCertificate = {
|
|||||||
|
|
||||||
let mainCmd = certbotCommand + ' renew --force-renewal ' +
|
let mainCmd = certbotCommand + ' renew --force-renewal ' +
|
||||||
`--config "${letsencryptConfig}" ` +
|
`--config "${letsencryptConfig}" ` +
|
||||||
|
`--key-type '${certificate.ssl_key_type}' ` +
|
||||||
'--work-dir "/tmp/letsencrypt-lib" ' +
|
'--work-dir "/tmp/letsencrypt-lib" ' +
|
||||||
'--logs-dir "/tmp/letsencrypt-log" ' +
|
'--logs-dir "/tmp/letsencrypt-log" ' +
|
||||||
`--cert-name 'npm-${certificate.id}' ` +
|
`--cert-name 'npm-${certificate.id}' ` +
|
||||||
@@ -1038,9 +1043,10 @@ const internalCertificate = {
|
|||||||
*/
|
*/
|
||||||
revokeLetsEncryptSsl: (certificate, throw_errors) => {
|
revokeLetsEncryptSsl: (certificate, throw_errors) => {
|
||||||
logger.info('Revoking Let\'sEncrypt certificates for Cert #' + certificate.id + ': ' + certificate.domain_names.join(', '));
|
logger.info('Revoking Let\'sEncrypt certificates for Cert #' + certificate.id + ': ' + certificate.domain_names.join(', '));
|
||||||
|
|
||||||
const mainCmd = certbotCommand + ' revoke ' +
|
const mainCmd = certbotCommand + ' revoke ' +
|
||||||
`--config '${letsencryptConfig}' ` +
|
`--config '${letsencryptConfig}' ` +
|
||||||
|
`--key-type '${certificate.ssl_key_type}' ` +
|
||||||
'--work-dir "/tmp/letsencrypt-lib" ' +
|
'--work-dir "/tmp/letsencrypt-lib" ' +
|
||||||
'--logs-dir "/tmp/letsencrypt-log" ' +
|
'--logs-dir "/tmp/letsencrypt-log" ' +
|
||||||
`--cert-path '/etc/letsencrypt/live/npm-${certificate.id}/fullchain.pem' ` +
|
`--cert-path '/etc/letsencrypt/live/npm-${certificate.id}/fullchain.pem' ` +
|
||||||
|
@@ -229,8 +229,32 @@ const internalHost = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return response;
|
return response;
|
||||||
}
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Internal use only, checks to see if the there is another default server record
|
||||||
|
*
|
||||||
|
* @param {String} hostname
|
||||||
|
* @param {String} [ignore_type] 'proxy', 'redirection', 'dead'
|
||||||
|
* @param {Integer} [ignore_id] Must be supplied if type was also supplied
|
||||||
|
* @returns {Promise}
|
||||||
|
*/
|
||||||
|
checkDefaultServerNotExist: function (hostname) {
|
||||||
|
let promises = proxyHostModel
|
||||||
|
.query()
|
||||||
|
.where('default_server', true)
|
||||||
|
.andWhere('domain_names', 'not like', '%' + hostname + '%');
|
||||||
|
|
||||||
|
|
||||||
|
return Promise.resolve(promises)
|
||||||
|
.then((promises_results) => {
|
||||||
|
if (promises_results.length > 0){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = internalHost;
|
module.exports = internalHost;
|
||||||
|
@@ -44,6 +44,22 @@ const internalProxyHost = {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
|
.then(() => {
|
||||||
|
// Get a list of the domain names and check each of them against default records
|
||||||
|
if (data.default_server){
|
||||||
|
if (data.domain_names.length > 1) {
|
||||||
|
throw new error.ValidationError('Default server cant be set for multiple domain!');
|
||||||
|
}
|
||||||
|
|
||||||
|
return internalHost
|
||||||
|
.checkDefaultServerNotExist(data.domain_names[0])
|
||||||
|
.then((result) => {
|
||||||
|
if (!result){
|
||||||
|
throw new error.ValidationError('One default server already exists');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
// At this point the domains should have been checked
|
// At this point the domains should have been checked
|
||||||
data.owner_user_id = access.token.getUserId(1);
|
data.owner_user_id = access.token.getUserId(1);
|
||||||
@@ -141,6 +157,22 @@ const internalProxyHost = {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
.then(() => {
|
||||||
|
// Get a list of the domain names and check each of them against default records
|
||||||
|
if (data.default_server){
|
||||||
|
if (data.domain_names.length > 1) {
|
||||||
|
throw new error.ValidationError('Default server cant be set for multiple domain!');
|
||||||
|
}
|
||||||
|
|
||||||
|
return internalHost
|
||||||
|
.checkDefaultServerNotExist(data.domain_names[0])
|
||||||
|
.then((result) => {
|
||||||
|
if (!result){
|
||||||
|
throw new error.ValidationError('One default server already exists');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
return internalProxyHost.get(access, {id: data.id});
|
return internalProxyHost.get(access, {id: data.id});
|
||||||
})
|
})
|
||||||
@@ -153,6 +185,7 @@ const internalProxyHost = {
|
|||||||
if (create_certificate) {
|
if (create_certificate) {
|
||||||
return internalCertificate.createQuickCertificate(access, {
|
return internalCertificate.createQuickCertificate(access, {
|
||||||
domain_names: data.domain_names || row.domain_names,
|
domain_names: data.domain_names || row.domain_names,
|
||||||
|
ssl_key_type: data.ssl_key_type || row.ssl_key_type,
|
||||||
meta: _.assign({}, row.meta, data.meta)
|
meta: _.assign({}, row.meta, data.meta)
|
||||||
})
|
})
|
||||||
.then((cert) => {
|
.then((cert) => {
|
||||||
|
@@ -369,7 +369,7 @@ const internalStream = {
|
|||||||
.where('is_deleted', 0)
|
.where('is_deleted', 0)
|
||||||
.groupBy('id')
|
.groupBy('id')
|
||||||
.allowGraph('[owner,certificate]')
|
.allowGraph('[owner,certificate]')
|
||||||
.orderBy('incoming_port', 'ASC');
|
.orderByRaw('CAST(incoming_port AS INTEGER) ASC');
|
||||||
|
|
||||||
if (access_data.permission_visibility !== 'all') {
|
if (access_data.permission_visibility !== 'all') {
|
||||||
query.andWhere('owner_user_id', access.token.getUserId(1));
|
query.andWhere('owner_user_id', access.token.getUserId(1));
|
||||||
|
51
backend/migrations/20241209062244_ssl_key_type.js
Normal file
51
backend/migrations/20241209062244_ssl_key_type.js
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
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.alterTable('proxy_host', (table) => {
|
||||||
|
table.enum('ssl_key_type', ['ecdsa', 'rsa']).defaultTo('ecdsa').notNullable();
|
||||||
|
}).then(() => {
|
||||||
|
logger.info(`[${migrate_name}] Column 'ssl_key_type' added to table 'proxy_host'`);
|
||||||
|
|
||||||
|
return knex.schema.alterTable('certificate', (table) => {
|
||||||
|
table.enum('ssl_key_type', ['ecdsa', 'rsa']).defaultTo('ecdsa').notNullable();
|
||||||
|
});
|
||||||
|
}).then(() => {
|
||||||
|
logger.info(`[${migrate_name}] Column 'ssl_key_type' added to table 'proxy_host'`);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Undo Migrate
|
||||||
|
*
|
||||||
|
* @param {Object} knex
|
||||||
|
* @param {Promise} Promise
|
||||||
|
* @returns {Promise}
|
||||||
|
*/
|
||||||
|
exports.down = function (knex) {
|
||||||
|
logger.info(`[${migrate_name}] Migrating Down...`);
|
||||||
|
|
||||||
|
return knex.schema.alterTable('proxy_host', (table) => {
|
||||||
|
table.dropColumn('ssl_key_type');
|
||||||
|
}).then(() => {
|
||||||
|
logger.info(`[${migrate_name}] Column 'ssl_key_type' removed from table 'proxy_host'`);
|
||||||
|
|
||||||
|
return knex.schema.alterTable('certificate', (table) => {
|
||||||
|
table.dropColumn('ssl_key_type');
|
||||||
|
});
|
||||||
|
}).then(() => {
|
||||||
|
logger.info(`[${migrate_name}] Column 'ssl_key_type' removed from table 'proxy_host'`);
|
||||||
|
});
|
||||||
|
};
|
40
backend/migrations/20241221201400_default_server.js
Normal file
40
backend/migrations/20241221201400_default_server.js
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
const migrate_name = 'default_server';
|
||||||
|
const logger = require('../logger').migrate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Migrate Up
|
||||||
|
*
|
||||||
|
* @param {Object} knex
|
||||||
|
* @param {Promise} Promise
|
||||||
|
* @returns {Promise}
|
||||||
|
*/
|
||||||
|
exports.up = function (knex) {
|
||||||
|
logger.info(`[${migrate_name}] Migrating Up...`);
|
||||||
|
|
||||||
|
// Add default_server column to proxy_host table
|
||||||
|
return knex.schema.table('proxy_host', (table) => {
|
||||||
|
table.boolean('default_server').notNullable().defaultTo(false);
|
||||||
|
})
|
||||||
|
.then(() => {
|
||||||
|
logger.info(`[${migrate_name}] Column 'default_server' added to 'proxy_host' table`);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Migrate Down
|
||||||
|
*
|
||||||
|
* @param {Object} knex
|
||||||
|
* @param {Promise} Promise
|
||||||
|
* @returns {Promise}
|
||||||
|
*/
|
||||||
|
exports.down = function (knex) {
|
||||||
|
logger.info(`[${migrate_name}] Migrating Down...`);
|
||||||
|
|
||||||
|
// Remove default_server column from proxy_host table
|
||||||
|
return knex.schema.table('proxy_host', (table) => {
|
||||||
|
table.dropColumn('default_server');
|
||||||
|
})
|
||||||
|
.then(() => {
|
||||||
|
logger.info(`[${migrate_name}] Column 'default_server' removed from 'proxy_host' table`);
|
||||||
|
});
|
||||||
|
};
|
@@ -12,11 +12,7 @@ Model.knex(db);
|
|||||||
|
|
||||||
const boolFields = [
|
const boolFields = [
|
||||||
'is_deleted',
|
'is_deleted',
|
||||||
'ssl_forced',
|
|
||||||
'http2_support',
|
|
||||||
'enabled',
|
'enabled',
|
||||||
'hsts_enabled',
|
|
||||||
'hsts_subdomains',
|
|
||||||
];
|
];
|
||||||
|
|
||||||
class DeadHost extends Model {
|
class DeadHost extends Model {
|
||||||
|
@@ -21,6 +21,7 @@ const boolFields = [
|
|||||||
'enabled',
|
'enabled',
|
||||||
'hsts_enabled',
|
'hsts_enabled',
|
||||||
'hsts_subdomains',
|
'hsts_subdomains',
|
||||||
|
'default_server',
|
||||||
];
|
];
|
||||||
|
|
||||||
class ProxyHost extends Model {
|
class ProxyHost extends Model {
|
||||||
|
@@ -8,8 +8,8 @@ const now = require('./now_helper');
|
|||||||
Model.knex(db);
|
Model.knex(db);
|
||||||
|
|
||||||
const boolFields = [
|
const boolFields = [
|
||||||
'is_deleted',
|
|
||||||
'enabled',
|
'enabled',
|
||||||
|
'is_deleted',
|
||||||
'tcp_forwarding',
|
'tcp_forwarding',
|
||||||
'udp_forwarding',
|
'udp_forwarding',
|
||||||
];
|
];
|
||||||
|
@@ -181,7 +181,7 @@ router
|
|||||||
return internalUser.setPassword(res.locals.access, payload);
|
return internalUser.setPassword(res.locals.access, payload);
|
||||||
})
|
})
|
||||||
.then((result) => {
|
.then((result) => {
|
||||||
res.status(200)
|
res.status(201)
|
||||||
.send(result);
|
.send(result);
|
||||||
})
|
})
|
||||||
.catch(next);
|
.catch(next);
|
||||||
@@ -212,7 +212,7 @@ router
|
|||||||
return internalUser.setPermissions(res.locals.access, payload);
|
return internalUser.setPermissions(res.locals.access, payload);
|
||||||
})
|
})
|
||||||
.then((result) => {
|
.then((result) => {
|
||||||
res.status(200)
|
res.status(201)
|
||||||
.send(result);
|
.send(result);
|
||||||
})
|
})
|
||||||
.catch(next);
|
.catch(next);
|
||||||
@@ -238,7 +238,7 @@ router
|
|||||||
.post((req, res, next) => {
|
.post((req, res, next) => {
|
||||||
internalUser.loginAs(res.locals.access, {id: parseInt(req.params.user_id, 10)})
|
internalUser.loginAs(res.locals.access, {id: parseInt(req.params.user_id, 10)})
|
||||||
.then((result) => {
|
.then((result) => {
|
||||||
res.status(200)
|
res.status(201)
|
||||||
.send(result);
|
.send(result);
|
||||||
})
|
})
|
||||||
.catch(next);
|
.catch(next);
|
||||||
|
@@ -41,6 +41,11 @@
|
|||||||
"owner": {
|
"owner": {
|
||||||
"$ref": "./user-object.json"
|
"$ref": "./user-object.json"
|
||||||
},
|
},
|
||||||
|
"ssl_key_type": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["ecdsa", "rsa"],
|
||||||
|
"description": "Type of SSL key (either ecdsa or rsa)"
|
||||||
|
},
|
||||||
"meta": {
|
"meta": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"additionalProperties": false,
|
"additionalProperties": false,
|
||||||
|
@@ -22,7 +22,9 @@
|
|||||||
"enabled",
|
"enabled",
|
||||||
"locations",
|
"locations",
|
||||||
"hsts_enabled",
|
"hsts_enabled",
|
||||||
"hsts_subdomains"
|
"hsts_subdomains",
|
||||||
|
"default_server",
|
||||||
|
"certificate"
|
||||||
],
|
],
|
||||||
"additionalProperties": false,
|
"additionalProperties": false,
|
||||||
"properties": {
|
"properties": {
|
||||||
@@ -148,6 +150,15 @@
|
|||||||
"$ref": "./access-list-object.json"
|
"$ref": "./access-list-object.json"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
"ssl_key_type": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["ecdsa", "rsa"],
|
||||||
|
"description": "Type of SSL key (either ecdsa or rsa)"
|
||||||
|
},
|
||||||
|
"default_server": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "Defines if the server is the default for unmatched requests"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"type": "array",
|
"type": "array",
|
||||||
"description": "Streams list",
|
"description": "Proxy Hosts list",
|
||||||
"items": {
|
"items": {
|
||||||
"$ref": "./stream-object.json"
|
"$ref": "./proxy-host-object.json"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -79,6 +79,12 @@
|
|||||||
},
|
},
|
||||||
"locations": {
|
"locations": {
|
||||||
"$ref": "../../../../components/proxy-host-object.json#/properties/locations"
|
"$ref": "../../../../components/proxy-host-object.json#/properties/locations"
|
||||||
|
},
|
||||||
|
"ssl_key_type": {
|
||||||
|
"$ref": "../../../../components/proxy-host-object.json#/properties/ssl_key_type"
|
||||||
|
},
|
||||||
|
"default_server": {
|
||||||
|
"$ref": "../../../../components/proxy-host-object.json#/properties/default_server"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -67,6 +67,12 @@
|
|||||||
},
|
},
|
||||||
"locations": {
|
"locations": {
|
||||||
"$ref": "../../../components/proxy-host-object.json#/properties/locations"
|
"$ref": "../../../components/proxy-host-object.json#/properties/locations"
|
||||||
|
},
|
||||||
|
"ssl_key_type": {
|
||||||
|
"$ref": "../../../components/proxy-host-object.json#/properties/ssl_key_type"
|
||||||
|
},
|
||||||
|
"default_server": {
|
||||||
|
"$ref": "../../../components/proxy-host-object.json#/properties/default_server"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -9,15 +9,6 @@
|
|||||||
"url": "http://127.0.0.1:81/api"
|
"url": "http://127.0.0.1:81/api"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"components": {
|
|
||||||
"securitySchemes": {
|
|
||||||
"bearerAuth": {
|
|
||||||
"type": "http",
|
|
||||||
"scheme": "bearer",
|
|
||||||
"bearerFormat": "JWT"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"paths": {
|
"paths": {
|
||||||
"/": {
|
"/": {
|
||||||
"get": {
|
"get": {
|
||||||
|
@@ -1,13 +1,13 @@
|
|||||||
listen 80;
|
listen 80{% if default_server == true %} default_server{% endif %};
|
||||||
{% if ipv6 -%}
|
{% if ipv6 -%}
|
||||||
listen [::]:80;
|
listen [::]:80{% if default_server == true %} default_server{% endif %};
|
||||||
{% else -%}
|
{% else -%}
|
||||||
#listen [::]:80;
|
#listen [::]:80;
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if certificate -%}
|
{% if certificate -%}
|
||||||
listen 443 ssl;
|
listen 443 ssl{% if default_server == true %} default_server{% endif %};
|
||||||
{% if ipv6 -%}
|
{% if ipv6 -%}
|
||||||
listen [::]:443 ssl;
|
listen [::]:443 ssl{% if default_server == true %} default_server{% endif %};
|
||||||
{% else -%}
|
{% else -%}
|
||||||
#listen [::]:443;
|
#listen [::]:443;
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
@@ -492,9 +492,9 @@ boxen@^4.2.0:
|
|||||||
widest-line "^3.1.0"
|
widest-line "^3.1.0"
|
||||||
|
|
||||||
brace-expansion@^1.1.7:
|
brace-expansion@^1.1.7:
|
||||||
version "1.1.12"
|
version "1.1.11"
|
||||||
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843"
|
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
|
||||||
integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==
|
integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
|
||||||
dependencies:
|
dependencies:
|
||||||
balanced-match "^1.0.0"
|
balanced-match "^1.0.0"
|
||||||
concat-map "0.0.1"
|
concat-map "0.0.1"
|
||||||
|
@@ -53,9 +53,11 @@ COPY --from=testca /home/step/certs/root_ca.crt /etc/ssl/certs/NginxProxyManager
|
|||||||
# Remove frontend service not required for prod, dev nginx config as well
|
# Remove frontend service not required for prod, dev nginx config as well
|
||||||
RUN rm -rf /etc/s6-overlay/s6-rc.d/user/contents.d/frontend /etc/nginx/conf.d/dev.conf \
|
RUN rm -rf /etc/s6-overlay/s6-rc.d/user/contents.d/frontend /etc/nginx/conf.d/dev.conf \
|
||||||
&& chmod 644 /etc/logrotate.d/nginx-proxy-manager
|
&& chmod 644 /etc/logrotate.d/nginx-proxy-manager
|
||||||
|
COPY docker/start-container /usr/local/bin/start-container
|
||||||
|
RUN chmod +x /usr/local/bin/start-container
|
||||||
|
|
||||||
VOLUME [ "/data" ]
|
VOLUME [ "/data" ]
|
||||||
ENTRYPOINT [ "/init" ]
|
ENTRYPOINT [ "start-container" ]
|
||||||
|
|
||||||
LABEL org.label-schema.schema-version="1.0" \
|
LABEL org.label-schema.schema-version="1.0" \
|
||||||
org.label-schema.license="MIT" \
|
org.label-schema.license="MIT" \
|
||||||
|
@@ -36,5 +36,8 @@ RUN rm -f /etc/nginx/conf.d/production.conf \
|
|||||||
COPY --from=pebbleca /test/certs/pebble.minica.pem /etc/ssl/certs/pebble.minica.pem
|
COPY --from=pebbleca /test/certs/pebble.minica.pem /etc/ssl/certs/pebble.minica.pem
|
||||||
COPY --from=testca /home/step/certs/root_ca.crt /etc/ssl/certs/NginxProxyManager.crt
|
COPY --from=testca /home/step/certs/root_ca.crt /etc/ssl/certs/NginxProxyManager.crt
|
||||||
|
|
||||||
|
COPY start-container /usr/local/bin/start-container
|
||||||
|
RUN chmod +x /usr/local/bin/start-container
|
||||||
|
|
||||||
EXPOSE 80 81 443
|
EXPOSE 80 81 443
|
||||||
ENTRYPOINT [ "/init" ]
|
ENTRYPOINT [ "start-container" ]
|
||||||
|
@@ -1,7 +1,5 @@
|
|||||||
text = True
|
text = True
|
||||||
non-interactive = True
|
non-interactive = True
|
||||||
webroot-path = /data/letsencrypt-acme-challenge
|
webroot-path = /data/letsencrypt-acme-challenge
|
||||||
key-type = ecdsa
|
|
||||||
elliptic-curve = secp384r1
|
|
||||||
preferred-chain = ISRG Root X1
|
preferred-chain = ISRG Root X1
|
||||||
server =
|
server =
|
||||||
|
@@ -18,7 +18,6 @@ services:
|
|||||||
MYSQL_DATABASE: 'npm'
|
MYSQL_DATABASE: 'npm'
|
||||||
MYSQL_USER: 'npm'
|
MYSQL_USER: 'npm'
|
||||||
MYSQL_PASSWORD: 'npmpass'
|
MYSQL_PASSWORD: 'npmpass'
|
||||||
MARIADB_AUTO_UPGRADE: '1'
|
|
||||||
volumes:
|
volumes:
|
||||||
- mysql_vol:/var/lib/mysql
|
- mysql_vol:/var/lib/mysql
|
||||||
networks:
|
networks:
|
||||||
|
@@ -1,6 +1,4 @@
|
|||||||
text = True
|
text = True
|
||||||
non-interactive = True
|
non-interactive = True
|
||||||
webroot-path = /data/letsencrypt-acme-challenge
|
webroot-path = /data/letsencrypt-acme-challenge
|
||||||
key-type = ecdsa
|
|
||||||
elliptic-curve = secp384r1
|
|
||||||
preferred-chain = ISRG Root X1
|
preferred-chain = ISRG Root X1
|
||||||
|
@@ -1,4 +1,6 @@
|
|||||||
# intermediate configuration. tweak to your needs.
|
# intermediate configuration. tweak to your needs.
|
||||||
ssl_protocols TLSv1.2 TLSv1.3;
|
ssl_protocols TLSv1.2 TLSv1.3;
|
||||||
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
|
ssl_ciphers "ALL:RC4-SHA:AES128-SHA:AES256-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:AES256-GCM-SHA384:AES128-GCM-SHA256:RSA-AES256-CBC-SHA:RC4-MD5:DES-CBC3-SHA:AES256-SHA:RC4-SHA:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";
|
||||||
ssl_prefer_server_ciphers off;
|
ssl_prefer_server_ciphers off;
|
||||||
|
ssl_ecdh_curve X25519:prime256v1:secp384r1;
|
||||||
|
ssl_dhparam /etc/ssl/certs/dhparam.pem;
|
@@ -23,19 +23,6 @@ chown -R "$PUID:$PGID" /etc/nginx/nginx
|
|||||||
chown -R "$PUID:$PGID" /etc/nginx/nginx.conf
|
chown -R "$PUID:$PGID" /etc/nginx/nginx.conf
|
||||||
chown -R "$PUID:$PGID" /etc/nginx/conf.d
|
chown -R "$PUID:$PGID" /etc/nginx/conf.d
|
||||||
|
|
||||||
# Certbot directories - optimized approach
|
# Prevents errors when installing python certbot plugins when non-root
|
||||||
CERT_INIT_FLAG="/opt/certbot/.ownership_initialized"
|
chown "$PUID:$PGID" /opt/certbot /opt/certbot/bin
|
||||||
|
find /opt/certbot/lib/python*/site-packages -not -user "$PUID" -execdir chown "$PUID:$PGID" {} \+
|
||||||
if [ ! -f "$CERT_INIT_FLAG" ]; then
|
|
||||||
# Prevents errors when installing python certbot plugins when non-root
|
|
||||||
chown "$PUID:$PGID" /opt/certbot /opt/certbot/bin
|
|
||||||
|
|
||||||
# Handle all site-packages directories efficiently
|
|
||||||
find /opt/certbot/lib -type d -name "site-packages" | while read -r SITE_PACKAGES_DIR; do
|
|
||||||
chown -R "$PUID:$PGID" "$SITE_PACKAGES_DIR"
|
|
||||||
done
|
|
||||||
|
|
||||||
# Create a flag file to skip this step on subsequent runs
|
|
||||||
touch "$CERT_INIT_FLAG"
|
|
||||||
chown "$PUID:$PGID" "$CERT_INIT_FLAG"
|
|
||||||
fi
|
|
||||||
|
13
docker/start-container
Normal file
13
docker/start-container
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
FILE="/etc/ssl/certs/dhparam.pem"
|
||||||
|
|
||||||
|
if [ ! -f "$FILE" ]; then
|
||||||
|
echo "the $FILE does not exist, creating..."
|
||||||
|
openssl dhparam -out "$FILE" 2048
|
||||||
|
else
|
||||||
|
echo "the $FILE already exists, skipping..."
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "run default script"
|
||||||
|
exec /init
|
@@ -161,14 +161,6 @@ The easy fix is to add a Docker environment variable to the Nginx Proxy Manager
|
|||||||
DISABLE_IPV6: 'true'
|
DISABLE_IPV6: 'true'
|
||||||
```
|
```
|
||||||
|
|
||||||
## Disabling IP Ranges Fetch
|
|
||||||
|
|
||||||
By default, NPM fetches IP ranges from CloudFront and Cloudflare during application startup. In environments with limited internet access or to speed up container startup, this fetch can be disabled:
|
|
||||||
|
|
||||||
```yml
|
|
||||||
environment:
|
|
||||||
IP_RANGES_FETCH_ENABLED: 'false'
|
|
||||||
```
|
|
||||||
|
|
||||||
## Custom Nginx Configurations
|
## Custom Nginx Configurations
|
||||||
|
|
||||||
|
@@ -21,7 +21,7 @@ services:
|
|||||||
# Add any other Stream port you want to expose
|
# Add any other Stream port you want to expose
|
||||||
# - '21:21' # FTP
|
# - '21:21' # FTP
|
||||||
|
|
||||||
#environment:
|
environment:
|
||||||
# Uncomment this if you want to change the location of
|
# Uncomment this if you want to change the location of
|
||||||
# the SQLite DB file within the container
|
# the SQLite DB file within the container
|
||||||
# DB_SQLITE_FILE: "/data/database.sqlite"
|
# DB_SQLITE_FILE: "/data/database.sqlite"
|
||||||
|
@@ -1065,9 +1065,9 @@ vfile@^6.0.0:
|
|||||||
vfile-message "^4.0.0"
|
vfile-message "^4.0.0"
|
||||||
|
|
||||||
vite@^5.4.8:
|
vite@^5.4.8:
|
||||||
version "5.4.19"
|
version "5.4.14"
|
||||||
resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.19.tgz#20efd060410044b3ed555049418a5e7d1998f959"
|
resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.14.tgz#ff8255edb02134df180dcfca1916c37a6abe8408"
|
||||||
integrity sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==
|
integrity sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==
|
||||||
dependencies:
|
dependencies:
|
||||||
esbuild "^0.21.3"
|
esbuild "^0.21.3"
|
||||||
postcss "^8.4.43"
|
postcss "^8.4.43"
|
||||||
|
@@ -4,438 +4,444 @@ const Tokens = require('./tokens');
|
|||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {String} route
|
* @param {String} route
|
||||||
* @param {Object} [options]
|
* @param {Object} [options]
|
||||||
* @returns {Boolean}
|
* @returns {Boolean}
|
||||||
*/
|
*/
|
||||||
navigate: function (route, options) {
|
navigate: function (route, options) {
|
||||||
options = options || {};
|
options = options || {};
|
||||||
Backbone.history.navigate(route.toString(), options);
|
Backbone.history.navigate(route.toString(), options);
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Login
|
* Login
|
||||||
*/
|
*/
|
||||||
showLogin: function () {
|
showLogin: function () {
|
||||||
window.location = '/login';
|
window.location = '/login';
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Users
|
* Users
|
||||||
*/
|
*/
|
||||||
showUsers: function () {
|
showUsers: function () {
|
||||||
const controller = this;
|
let controller = this;
|
||||||
if (Cache.User.isAdmin()) {
|
if (Cache.User.isAdmin()) {
|
||||||
require(['./main', './users/main'], (App, View) => {
|
require(['./main', './users/main'], (App, View) => {
|
||||||
controller.navigate('/users');
|
controller.navigate('/users');
|
||||||
App.UI.showAppContent(new View());
|
App.UI.showAppContent(new View());
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
this.showDashboard();
|
this.showDashboard();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* User Form
|
* User Form
|
||||||
*
|
*
|
||||||
* @param [model]
|
* @param [model]
|
||||||
*/
|
*/
|
||||||
showUserForm: function (model) {
|
showUserForm: function (model) {
|
||||||
if (Cache.User.isAdmin()) {
|
if (Cache.User.isAdmin()) {
|
||||||
require(['./main', './user/form'], function (App, View) {
|
require(['./main', './user/form'], function (App, View) {
|
||||||
App.UI.showModalDialog(new View({model: model}));
|
App.UI.showModalDialog(new View({model: model}));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* User Permissions Form
|
* User Permissions Form
|
||||||
*
|
*
|
||||||
* @param model
|
* @param model
|
||||||
*/
|
*/
|
||||||
showUserPermissions: function (model) {
|
showUserPermissions: function (model) {
|
||||||
if (Cache.User.isAdmin()) {
|
if (Cache.User.isAdmin()) {
|
||||||
require(['./main', './user/permissions'], function (App, View) {
|
require(['./main', './user/permissions'], function (App, View) {
|
||||||
App.UI.showModalDialog(new View({model: model}));
|
App.UI.showModalDialog(new View({model: model}));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* User Password Form
|
* User Password Form
|
||||||
*
|
*
|
||||||
* @param model
|
* @param model
|
||||||
*/
|
*/
|
||||||
showUserPasswordForm: function (model) {
|
showUserPasswordForm: function (model) {
|
||||||
if (Cache.User.isAdmin() || model.get('id') === Cache.User.get('id')) {
|
if (Cache.User.isAdmin() || model.get('id') === Cache.User.get('id')) {
|
||||||
require(['./main', './user/password'], function (App, View) {
|
require(['./main', './user/password'], function (App, View) {
|
||||||
App.UI.showModalDialog(new View({model: model}));
|
App.UI.showModalDialog(new View({model: model}));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* User Delete Confirm
|
* User Delete Confirm
|
||||||
*
|
*
|
||||||
* @param model
|
* @param model
|
||||||
*/
|
*/
|
||||||
showUserDeleteConfirm: function (model) {
|
showUserDeleteConfirm: function (model) {
|
||||||
if (Cache.User.isAdmin() && model.get('id') !== Cache.User.get('id')) {
|
if (Cache.User.isAdmin() && model.get('id') !== Cache.User.get('id')) {
|
||||||
require(['./main', './user/delete'], function (App, View) {
|
require(['./main', './user/delete'], function (App, View) {
|
||||||
App.UI.showModalDialog(new View({model: model}));
|
App.UI.showModalDialog(new View({model: model}));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dashboard
|
* Dashboard
|
||||||
*/
|
*/
|
||||||
showDashboard: function () {
|
showDashboard: function () {
|
||||||
const controller = this;
|
let controller = this;
|
||||||
require(['./main', './dashboard/main'], (App, View) => {
|
|
||||||
controller.navigate('/');
|
|
||||||
App.UI.showAppContent(new View());
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
require(['./main', './dashboard/main'], (App, View) => {
|
||||||
* Nginx Proxy Hosts
|
controller.navigate('/');
|
||||||
*/
|
App.UI.showAppContent(new View());
|
||||||
showNginxProxy: function () {
|
});
|
||||||
if (Cache.User.isAdmin() || Cache.User.canView('proxy_hosts')) {
|
},
|
||||||
const controller = this;
|
|
||||||
|
|
||||||
require(['./main', './nginx/proxy/main'], (App, View) => {
|
/**
|
||||||
controller.navigate('/nginx/proxy');
|
* Nginx Proxy Hosts
|
||||||
App.UI.showAppContent(new View());
|
*/
|
||||||
});
|
showNginxProxy: function () {
|
||||||
}
|
if (Cache.User.isAdmin() || Cache.User.canView('proxy_hosts')) {
|
||||||
},
|
let controller = this;
|
||||||
|
|
||||||
/**
|
require(['./main', './nginx/proxy/main'], (App, View) => {
|
||||||
* Nginx Proxy Host Form
|
controller.navigate('/nginx/proxy');
|
||||||
*
|
App.UI.showAppContent(new View());
|
||||||
* @param [model]
|
});
|
||||||
*/
|
}
|
||||||
showNginxProxyForm: function (model) {
|
},
|
||||||
if (Cache.User.isAdmin() || Cache.User.canManage('proxy_hosts')) {
|
|
||||||
require(['./main', './nginx/proxy/form'], function (App, View) {
|
|
||||||
App.UI.showModalDialog(new View({model: model}));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Proxy Host Delete Confirm
|
* Nginx Proxy Host Form
|
||||||
*
|
*
|
||||||
* @param model
|
* @param [model]
|
||||||
*/
|
*/
|
||||||
showNginxProxyDeleteConfirm: function (model) {
|
showNginxProxyForm: function (model) {
|
||||||
if (Cache.User.isAdmin() || Cache.User.canManage('proxy_hosts')) {
|
if (Cache.User.isAdmin() || Cache.User.canManage('proxy_hosts')) {
|
||||||
require(['./main', './nginx/proxy/delete'], function (App, View) {
|
require(['./main', './nginx/proxy/form'], function (App, View) {
|
||||||
App.UI.showModalDialog(new View({model: model}));
|
App.UI.showModalDialog(new View({model: model}));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Nginx Redirection Hosts
|
* Proxy Host Delete Confirm
|
||||||
*/
|
*
|
||||||
showNginxRedirection: function () {
|
* @param model
|
||||||
if (Cache.User.isAdmin() || Cache.User.canView('redirection_hosts')) {
|
*/
|
||||||
const controller = this;
|
showNginxProxyDeleteConfirm: function (model) {
|
||||||
require(['./main', './nginx/redirection/main'], (App, View) => {
|
if (Cache.User.isAdmin() || Cache.User.canManage('proxy_hosts')) {
|
||||||
controller.navigate('/nginx/redirection');
|
require(['./main', './nginx/proxy/delete'], function (App, View) {
|
||||||
App.UI.showAppContent(new View());
|
App.UI.showModalDialog(new View({model: model}));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Nginx Redirection Host Form
|
* Nginx Redirection Hosts
|
||||||
*
|
*/
|
||||||
* @param [model]
|
showNginxRedirection: function () {
|
||||||
*/
|
if (Cache.User.isAdmin() || Cache.User.canView('redirection_hosts')) {
|
||||||
showNginxRedirectionForm: function (model) {
|
let controller = this;
|
||||||
if (Cache.User.isAdmin() || Cache.User.canManage('redirection_hosts')) {
|
|
||||||
require(['./main', './nginx/redirection/form'], function (App, View) {
|
|
||||||
App.UI.showModalDialog(new View({model: model}));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
require(['./main', './nginx/redirection/main'], (App, View) => {
|
||||||
* Proxy Redirection Delete Confirm
|
controller.navigate('/nginx/redirection');
|
||||||
*
|
App.UI.showAppContent(new View());
|
||||||
* @param model
|
});
|
||||||
*/
|
}
|
||||||
showNginxRedirectionDeleteConfirm: function (model) {
|
},
|
||||||
if (Cache.User.isAdmin() || Cache.User.canManage('redirection_hosts')) {
|
|
||||||
require(['./main', './nginx/redirection/delete'], function (App, View) {
|
|
||||||
App.UI.showModalDialog(new View({model: model}));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Nginx Stream Hosts
|
* Nginx Redirection Host Form
|
||||||
*/
|
*
|
||||||
showNginxStream: function () {
|
* @param [model]
|
||||||
if (Cache.User.isAdmin() || Cache.User.canView('streams')) {
|
*/
|
||||||
const controller = this;
|
showNginxRedirectionForm: function (model) {
|
||||||
require(['./main', './nginx/stream/main'], (App, View) => {
|
if (Cache.User.isAdmin() || Cache.User.canManage('redirection_hosts')) {
|
||||||
controller.navigate('/nginx/stream');
|
require(['./main', './nginx/redirection/form'], function (App, View) {
|
||||||
App.UI.showAppContent(new View());
|
App.UI.showModalDialog(new View({model: model}));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Stream Form
|
* Proxy Redirection Delete Confirm
|
||||||
*
|
*
|
||||||
* @param [model]
|
* @param model
|
||||||
*/
|
*/
|
||||||
showNginxStreamForm: function (model) {
|
showNginxRedirectionDeleteConfirm: function (model) {
|
||||||
if (Cache.User.isAdmin() || Cache.User.canManage('streams')) {
|
if (Cache.User.isAdmin() || Cache.User.canManage('redirection_hosts')) {
|
||||||
require(['./main', './nginx/stream/form'], function (App, View) {
|
require(['./main', './nginx/redirection/delete'], function (App, View) {
|
||||||
App.UI.showModalDialog(new View({model: model}));
|
App.UI.showModalDialog(new View({model: model}));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Stream Delete Confirm
|
* Nginx Stream Hosts
|
||||||
*
|
*/
|
||||||
* @param model
|
showNginxStream: function () {
|
||||||
*/
|
if (Cache.User.isAdmin() || Cache.User.canView('streams')) {
|
||||||
showNginxStreamDeleteConfirm: function (model) {
|
let controller = this;
|
||||||
if (Cache.User.isAdmin() || Cache.User.canManage('streams')) {
|
|
||||||
require(['./main', './nginx/stream/delete'], function (App, View) {
|
|
||||||
App.UI.showModalDialog(new View({model: model}));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
require(['./main', './nginx/stream/main'], (App, View) => {
|
||||||
* Nginx Dead Hosts
|
controller.navigate('/nginx/stream');
|
||||||
*/
|
App.UI.showAppContent(new View());
|
||||||
showNginxDead: function () {
|
});
|
||||||
if (Cache.User.isAdmin() || Cache.User.canView('dead_hosts')) {
|
}
|
||||||
const controller = this;
|
},
|
||||||
require(['./main', './nginx/dead/main'], (App, View) => {
|
|
||||||
controller.navigate('/nginx/404');
|
|
||||||
App.UI.showAppContent(new View());
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dead Host Form
|
* Stream Form
|
||||||
*
|
*
|
||||||
* @param [model]
|
* @param [model]
|
||||||
*/
|
*/
|
||||||
showNginxDeadForm: function (model) {
|
showNginxStreamForm: function (model) {
|
||||||
if (Cache.User.isAdmin() || Cache.User.canManage('dead_hosts')) {
|
if (Cache.User.isAdmin() || Cache.User.canManage('streams')) {
|
||||||
require(['./main', './nginx/dead/form'], function (App, View) {
|
require(['./main', './nginx/stream/form'], function (App, View) {
|
||||||
App.UI.showModalDialog(new View({model: model}));
|
App.UI.showModalDialog(new View({model: model}));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dead Host Delete Confirm
|
* Stream Delete Confirm
|
||||||
*
|
*
|
||||||
* @param model
|
* @param model
|
||||||
*/
|
*/
|
||||||
showNginxDeadDeleteConfirm: function (model) {
|
showNginxStreamDeleteConfirm: function (model) {
|
||||||
if (Cache.User.isAdmin() || Cache.User.canManage('dead_hosts')) {
|
if (Cache.User.isAdmin() || Cache.User.canManage('streams')) {
|
||||||
require(['./main', './nginx/dead/delete'], function (App, View) {
|
require(['./main', './nginx/stream/delete'], function (App, View) {
|
||||||
App.UI.showModalDialog(new View({model: model}));
|
App.UI.showModalDialog(new View({model: model}));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Help Dialog
|
* Nginx Dead Hosts
|
||||||
*
|
*/
|
||||||
* @param {String} title
|
showNginxDead: function () {
|
||||||
* @param {String} content
|
if (Cache.User.isAdmin() || Cache.User.canView('dead_hosts')) {
|
||||||
*/
|
let controller = this;
|
||||||
showHelp: function (title, content) {
|
|
||||||
require(['./main', './help/main'], function (App, View) {
|
|
||||||
App.UI.showModalDialog(new View({title: title, content: content}));
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
require(['./main', './nginx/dead/main'], (App, View) => {
|
||||||
* Nginx Access
|
controller.navigate('/nginx/404');
|
||||||
*/
|
App.UI.showAppContent(new View());
|
||||||
showNginxAccess: function () {
|
});
|
||||||
if (Cache.User.isAdmin() || Cache.User.canView('access_lists')) {
|
}
|
||||||
const controller = this;
|
},
|
||||||
require(['./main', './nginx/access/main'], (App, View) => {
|
|
||||||
controller.navigate('/nginx/access');
|
|
||||||
App.UI.showAppContent(new View());
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Nginx Access List Form
|
* Dead Host Form
|
||||||
*
|
*
|
||||||
* @param [model]
|
* @param [model]
|
||||||
*/
|
*/
|
||||||
showNginxAccessListForm: function (model) {
|
showNginxDeadForm: function (model) {
|
||||||
if (Cache.User.isAdmin() || Cache.User.canManage('access_lists')) {
|
if (Cache.User.isAdmin() || Cache.User.canManage('dead_hosts')) {
|
||||||
require(['./main', './nginx/access/form'], function (App, View) {
|
require(['./main', './nginx/dead/form'], function (App, View) {
|
||||||
App.UI.showModalDialog(new View({model: model}));
|
App.UI.showModalDialog(new View({model: model}));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Access List Delete Confirm
|
* Dead Host Delete Confirm
|
||||||
*
|
*
|
||||||
* @param model
|
* @param model
|
||||||
*/
|
*/
|
||||||
showNginxAccessListDeleteConfirm: function (model) {
|
showNginxDeadDeleteConfirm: function (model) {
|
||||||
if (Cache.User.isAdmin() || Cache.User.canManage('access_lists')) {
|
if (Cache.User.isAdmin() || Cache.User.canManage('dead_hosts')) {
|
||||||
require(['./main', './nginx/access/delete'], function (App, View) {
|
require(['./main', './nginx/dead/delete'], function (App, View) {
|
||||||
App.UI.showModalDialog(new View({model: model}));
|
App.UI.showModalDialog(new View({model: model}));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Nginx Certificates
|
* Help Dialog
|
||||||
*/
|
*
|
||||||
showNginxCertificates: function () {
|
* @param {String} title
|
||||||
if (Cache.User.isAdmin() || Cache.User.canView('certificates')) {
|
* @param {String} content
|
||||||
const controller = this;
|
*/
|
||||||
require(['./main', './nginx/certificates/main'], (App, View) => {
|
showHelp: function (title, content) {
|
||||||
controller.navigate('/nginx/certificates');
|
require(['./main', './help/main'], function (App, View) {
|
||||||
App.UI.showAppContent(new View());
|
App.UI.showModalDialog(new View({title: title, content: content}));
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Nginx Certificate Form
|
* Nginx Access
|
||||||
*
|
*/
|
||||||
* @param [model]
|
showNginxAccess: function () {
|
||||||
*/
|
if (Cache.User.isAdmin() || Cache.User.canView('access_lists')) {
|
||||||
showNginxCertificateForm: function (model) {
|
let controller = this;
|
||||||
if (Cache.User.isAdmin() || Cache.User.canManage('certificates')) {
|
|
||||||
require(['./main', './nginx/certificates/form'], function (App, View) {
|
|
||||||
App.UI.showModalDialog(new View({model: model}));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
require(['./main', './nginx/access/main'], (App, View) => {
|
||||||
* Certificate Renew
|
controller.navigate('/nginx/access');
|
||||||
*
|
App.UI.showAppContent(new View());
|
||||||
* @param model
|
});
|
||||||
*/
|
}
|
||||||
showNginxCertificateRenew: function (model) {
|
},
|
||||||
if (Cache.User.isAdmin() || Cache.User.canManage('certificates')) {
|
|
||||||
require(['./main', './nginx/certificates/renew'], function (App, View) {
|
|
||||||
App.UI.showModalDialog(new View({model: model}));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Certificate Delete Confirm
|
* Nginx Access List Form
|
||||||
*
|
*
|
||||||
* @param model
|
* @param [model]
|
||||||
*/
|
*/
|
||||||
showNginxCertificateDeleteConfirm: function (model) {
|
showNginxAccessListForm: function (model) {
|
||||||
if (Cache.User.isAdmin() || Cache.User.canManage('certificates')) {
|
if (Cache.User.isAdmin() || Cache.User.canManage('access_lists')) {
|
||||||
require(['./main', './nginx/certificates/delete'], function (App, View) {
|
require(['./main', './nginx/access/form'], function (App, View) {
|
||||||
App.UI.showModalDialog(new View({model: model}));
|
App.UI.showModalDialog(new View({model: model}));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Certificate Test Reachability
|
* Access List Delete Confirm
|
||||||
*
|
*
|
||||||
* @param model
|
* @param model
|
||||||
*/
|
*/
|
||||||
showNginxCertificateTestReachability: function (model) {
|
showNginxAccessListDeleteConfirm: function (model) {
|
||||||
if (Cache.User.isAdmin() || Cache.User.canManage('certificates')) {
|
if (Cache.User.isAdmin() || Cache.User.canManage('access_lists')) {
|
||||||
require(['./main', './nginx/certificates/test'], function (App, View) {
|
require(['./main', './nginx/access/delete'], function (App, View) {
|
||||||
App.UI.showModalDialog(new View({model: model}));
|
App.UI.showModalDialog(new View({model: model}));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Audit Log
|
* Nginx Certificates
|
||||||
*/
|
*/
|
||||||
showAuditLog: function () {
|
showNginxCertificates: function () {
|
||||||
const controller = this;
|
if (Cache.User.isAdmin() || Cache.User.canView('certificates')) {
|
||||||
if (Cache.User.isAdmin()) {
|
let controller = this;
|
||||||
require(['./main', './audit-log/main'], (App, View) => {
|
|
||||||
controller.navigate('/audit-log');
|
|
||||||
App.UI.showAppContent(new View());
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
this.showDashboard();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
require(['./main', './nginx/certificates/main'], (App, View) => {
|
||||||
* Audit Log Metadata
|
controller.navigate('/nginx/certificates');
|
||||||
*
|
App.UI.showAppContent(new View());
|
||||||
* @param model
|
});
|
||||||
*/
|
}
|
||||||
showAuditMeta: function (model) {
|
},
|
||||||
if (Cache.User.isAdmin()) {
|
|
||||||
require(['./main', './audit-log/meta'], function (App, View) {
|
|
||||||
App.UI.showModalDialog(new View({model: model}));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Settings
|
* Nginx Certificate Form
|
||||||
*/
|
*
|
||||||
showSettings: function () {
|
* @param [model]
|
||||||
const controller = this;
|
*/
|
||||||
if (Cache.User.isAdmin()) {
|
showNginxCertificateForm: function (model) {
|
||||||
require(['./main', './settings/main'], (App, View) => {
|
if (Cache.User.isAdmin() || Cache.User.canManage('certificates')) {
|
||||||
controller.navigate('/settings');
|
require(['./main', './nginx/certificates/form'], function (App, View) {
|
||||||
App.UI.showAppContent(new View());
|
App.UI.showModalDialog(new View({model: model}));
|
||||||
});
|
});
|
||||||
} else {
|
}
|
||||||
this.showDashboard();
|
},
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Settings Item Form
|
* Certificate Renew
|
||||||
*
|
*
|
||||||
* @param model
|
* @param model
|
||||||
*/
|
*/
|
||||||
showSettingForm: function (model) {
|
showNginxCertificateRenew: function (model) {
|
||||||
if (Cache.User.isAdmin()) {
|
if (Cache.User.isAdmin() || Cache.User.canManage('certificates')) {
|
||||||
if (model.get('id') === 'default-site') {
|
require(['./main', './nginx/certificates/renew'], function (App, View) {
|
||||||
require(['./main', './settings/default-site/main'], function (App, View) {
|
App.UI.showModalDialog(new View({model: model}));
|
||||||
App.UI.showModalDialog(new View({model: model}));
|
});
|
||||||
});
|
}
|
||||||
}
|
},
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Logout
|
* Certificate Delete Confirm
|
||||||
*/
|
*
|
||||||
logout: function () {
|
* @param model
|
||||||
Tokens.dropTopToken();
|
*/
|
||||||
this.showLogin();
|
showNginxCertificateDeleteConfirm: function (model) {
|
||||||
}
|
if (Cache.User.isAdmin() || Cache.User.canManage('certificates')) {
|
||||||
|
require(['./main', './nginx/certificates/delete'], function (App, View) {
|
||||||
|
App.UI.showModalDialog(new View({model: model}));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Certificate Test Reachability
|
||||||
|
*
|
||||||
|
* @param model
|
||||||
|
*/
|
||||||
|
showNginxCertificateTestReachability: function (model) {
|
||||||
|
if (Cache.User.isAdmin() || Cache.User.canManage('certificates')) {
|
||||||
|
require(['./main', './nginx/certificates/test'], function (App, View) {
|
||||||
|
App.UI.showModalDialog(new View({model: model}));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Audit Log
|
||||||
|
*/
|
||||||
|
showAuditLog: function () {
|
||||||
|
let controller = this;
|
||||||
|
if (Cache.User.isAdmin()) {
|
||||||
|
require(['./main', './audit-log/main'], (App, View) => {
|
||||||
|
controller.navigate('/audit-log');
|
||||||
|
App.UI.showAppContent(new View());
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
this.showDashboard();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Audit Log Metadata
|
||||||
|
*
|
||||||
|
* @param model
|
||||||
|
*/
|
||||||
|
showAuditMeta: function (model) {
|
||||||
|
if (Cache.User.isAdmin()) {
|
||||||
|
require(['./main', './audit-log/meta'], function (App, View) {
|
||||||
|
App.UI.showModalDialog(new View({model: model}));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Settings
|
||||||
|
*/
|
||||||
|
showSettings: function () {
|
||||||
|
let controller = this;
|
||||||
|
if (Cache.User.isAdmin()) {
|
||||||
|
require(['./main', './settings/main'], (App, View) => {
|
||||||
|
controller.navigate('/settings');
|
||||||
|
App.UI.showAppContent(new View());
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
this.showDashboard();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Settings Item Form
|
||||||
|
*
|
||||||
|
* @param model
|
||||||
|
*/
|
||||||
|
showSettingForm: function (model) {
|
||||||
|
if (Cache.User.isAdmin()) {
|
||||||
|
if (model.get('id') === 'default-site') {
|
||||||
|
require(['./main', './settings/default-site/main'], function (App, View) {
|
||||||
|
App.UI.showModalDialog(new View({model: model}));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Logout
|
||||||
|
*/
|
||||||
|
logout: function () {
|
||||||
|
Tokens.dropTopToken();
|
||||||
|
this.showLogin();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
@@ -6,85 +6,85 @@ const Helpers = require('../../lib/helpers');
|
|||||||
const template = require('./main.ejs');
|
const template = require('./main.ejs');
|
||||||
|
|
||||||
module.exports = Mn.View.extend({
|
module.exports = Mn.View.extend({
|
||||||
template: template,
|
template: template,
|
||||||
id: 'dashboard',
|
id: 'dashboard',
|
||||||
columns: 0,
|
columns: 0,
|
||||||
|
|
||||||
stats: {},
|
stats: {},
|
||||||
|
|
||||||
ui: {
|
ui: {
|
||||||
links: 'a'
|
links: 'a'
|
||||||
},
|
},
|
||||||
|
|
||||||
events: {
|
events: {
|
||||||
'click @ui.links': function (e) {
|
'click @ui.links': function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
Controller.navigate($(e.currentTarget).attr('href'), true);
|
Controller.navigate($(e.currentTarget).attr('href'), true);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
templateContext: function () {
|
templateContext: function () {
|
||||||
const view = this;
|
let view = this;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
getUserName: function () {
|
getUserName: function () {
|
||||||
return Cache.User.get('nickname') || Cache.User.get('name');
|
return Cache.User.get('nickname') || Cache.User.get('name');
|
||||||
},
|
},
|
||||||
|
|
||||||
getHostStat: function (type) {
|
getHostStat: function (type) {
|
||||||
if (view.stats && typeof view.stats.hosts !== 'undefined' && typeof view.stats.hosts[type] !== 'undefined') {
|
if (view.stats && typeof view.stats.hosts !== 'undefined' && typeof view.stats.hosts[type] !== 'undefined') {
|
||||||
return Helpers.niceNumber(view.stats.hosts[type]);
|
return Helpers.niceNumber(view.stats.hosts[type]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return '-';
|
return '-';
|
||||||
},
|
},
|
||||||
|
|
||||||
canShow: function (perm) {
|
canShow: function (perm) {
|
||||||
return Cache.User.isAdmin() || Cache.User.canView(perm);
|
return Cache.User.isAdmin() || Cache.User.canView(perm);
|
||||||
},
|
},
|
||||||
|
|
||||||
columns: view.columns
|
columns: view.columns
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
onRender: function () {
|
onRender: function () {
|
||||||
const view = this;
|
let view = this;
|
||||||
if (typeof view.stats.hosts === 'undefined') {
|
|
||||||
Api.Reports.getHostStats()
|
|
||||||
.then(response => {
|
|
||||||
if (!view.isDestroyed()) {
|
|
||||||
view.stats.hosts = response;
|
|
||||||
view.render();
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(err => {
|
|
||||||
console.log(err);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
Api.Reports.getHostStats()
|
||||||
* @param {Object} [model]
|
.then(response => {
|
||||||
*/
|
if (!view.isDestroyed()) {
|
||||||
preRender: function (model) {
|
view.stats.hosts = response;
|
||||||
this.columns = 0;
|
view.render();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
console.log(err);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
// calculate the available columns based on permissions for the objects
|
/**
|
||||||
// and store as a variable
|
* @param {Object} [model]
|
||||||
const perms = ['proxy_hosts', 'redirection_hosts', 'streams', 'dead_hosts'];
|
*/
|
||||||
|
preRender: function (model) {
|
||||||
|
this.columns = 0;
|
||||||
|
|
||||||
perms.map(perm => {
|
// calculate the available columns based on permissions for the objects
|
||||||
this.columns += Cache.User.isAdmin() || Cache.User.canView(perm) ? 1 : 0;
|
// and store as a variable
|
||||||
});
|
//let view = this;
|
||||||
|
let perms = ['proxy_hosts', 'redirection_hosts', 'streams', 'dead_hosts'];
|
||||||
|
|
||||||
// Prevent double rendering on initial calls
|
perms.map(perm => {
|
||||||
if (typeof model !== 'undefined') {
|
this.columns += Cache.User.isAdmin() || Cache.User.canView(perm) ? 1 : 0;
|
||||||
this.render();
|
});
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
initialize: function () {
|
// Prevent double rendering on initial calls
|
||||||
this.preRender();
|
if (typeof model !== 'undefined') {
|
||||||
this.listenTo(Cache.User, 'change', this.preRender);
|
this.render();
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
initialize: function () {
|
||||||
|
this.preRender();
|
||||||
|
this.listenTo(Cache.User, 'change', this.preRender);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
@@ -72,7 +72,7 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-12 col-md-12">
|
<div class="col-sm-6 col-md-6">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="custom-switch">
|
<label class="custom-switch">
|
||||||
<input type="checkbox" class="custom-switch-input" name="allow_websocket_upgrade" value="1"<%- allow_websocket_upgrade ? ' checked' : '' %>>
|
<input type="checkbox" class="custom-switch-input" name="allow_websocket_upgrade" value="1"<%- allow_websocket_upgrade ? ' checked' : '' %>>
|
||||||
@@ -81,6 +81,15 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-sm-6 col-md-6">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="custom-switch">
|
||||||
|
<input type="checkbox" class="custom-switch-input" name="default_server" value="1"<%- default_server ? ' checked' : '' %>>
|
||||||
|
<span class="custom-switch-indicator"></span>
|
||||||
|
<span class="custom-switch-description"><%- i18n('proxy-hosts', 'default-server') %></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="col-sm-12 col-md-12">
|
<div class="col-sm-12 col-md-12">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
@@ -105,6 +114,15 @@
|
|||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-sm-12 col-md-12 letsencrypt">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="form-label"><%- i18n('all-hosts', 'ssl-key-type') %></label>
|
||||||
|
<select name="ssl_key_type" class="form-control custom-select">
|
||||||
|
<option value="ecdsa" data-data="{"id":"ecdsa"}" <%- ssl_key_type == 'ecdsa' ? 'selected' : '' %>>ECDSA</option>
|
||||||
|
<option value="rsa" data-data="{"id":"rsa"}" <%- ssl_key_type == 'rsa' ? 'selected' : '' %>>RSA</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="col-sm-6 col-md-6">
|
<div class="col-sm-6 col-md-6">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="custom-switch">
|
<label class="custom-switch">
|
||||||
|
@@ -167,6 +167,7 @@ module.exports = Mn.View.extend({
|
|||||||
data.hsts_enabled = !!data.hsts_enabled;
|
data.hsts_enabled = !!data.hsts_enabled;
|
||||||
data.hsts_subdomains = !!data.hsts_subdomains;
|
data.hsts_subdomains = !!data.hsts_subdomains;
|
||||||
data.ssl_forced = !!data.ssl_forced;
|
data.ssl_forced = !!data.ssl_forced;
|
||||||
|
data.default_server = !!data.default_server;
|
||||||
|
|
||||||
if (typeof data.meta === 'undefined') data.meta = {};
|
if (typeof data.meta === 'undefined') data.meta = {};
|
||||||
data.meta.letsencrypt_agree = data.meta.letsencrypt_agree == 1;
|
data.meta.letsencrypt_agree = data.meta.letsencrypt_agree == 1;
|
||||||
|
@@ -60,7 +60,7 @@
|
|||||||
},
|
},
|
||||||
"footer": {
|
"footer": {
|
||||||
"fork-me": "Fork me on Github",
|
"fork-me": "Fork me on Github",
|
||||||
"copy": "© 2025 <a href=\"{url}\" target=\"_blank\">jc21.com</a>.",
|
"copy": "© 2024 <a href=\"{url}\" target=\"_blank\">jc21.com</a>.",
|
||||||
"theme": "Theme by <a href=\"{url}\" target=\"_blank\">Tabler</a>"
|
"theme": "Theme by <a href=\"{url}\" target=\"_blank\">Tabler</a>"
|
||||||
},
|
},
|
||||||
"dashboard": {
|
"dashboard": {
|
||||||
@@ -77,6 +77,7 @@
|
|||||||
"block-exploits": "Block Common Exploits",
|
"block-exploits": "Block Common Exploits",
|
||||||
"caching-enabled": "Cache Assets",
|
"caching-enabled": "Cache Assets",
|
||||||
"ssl-certificate": "SSL Certificate",
|
"ssl-certificate": "SSL Certificate",
|
||||||
|
"ssl-key-type": "SSL Key Type",
|
||||||
"none": "None",
|
"none": "None",
|
||||||
"new-cert": "Request a new SSL Certificate",
|
"new-cert": "Request a new SSL Certificate",
|
||||||
"with-le": "with Let's Encrypt",
|
"with-le": "with Let's Encrypt",
|
||||||
@@ -131,6 +132,7 @@
|
|||||||
"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.",
|
"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",
|
"access-list": "Access List",
|
||||||
"allow-websocket-upgrade": "Websockets Support",
|
"allow-websocket-upgrade": "Websockets Support",
|
||||||
|
"default-server": "Default Server",
|
||||||
"ignore-invalid-upstream-ssl": "Ignore Invalid SSL",
|
"ignore-invalid-upstream-ssl": "Ignore Invalid SSL",
|
||||||
"custom-forward-host-help": "Add a path for sub-folder forwarding.\nExample: 203.0.113.25/path/",
|
"custom-forward-host-help": "Add a path for sub-folder forwarding.\nExample: 203.0.113.25/path/",
|
||||||
"search": "Search Host…"
|
"search": "Search Host…"
|
||||||
|
@@ -10,6 +10,8 @@ const model = Backbone.Model.extend({
|
|||||||
modified_on: null,
|
modified_on: null,
|
||||||
domain_names: [],
|
domain_names: [],
|
||||||
certificate_id: 0,
|
certificate_id: 0,
|
||||||
|
ssl_key_type: 'ecdsa',
|
||||||
|
default_server: false,
|
||||||
ssl_forced: false,
|
ssl_forced: false,
|
||||||
http2_support: false,
|
http2_support: false,
|
||||||
hsts_enabled: false,
|
hsts_enabled: false,
|
||||||
|
@@ -14,6 +14,8 @@ const model = Backbone.Model.extend({
|
|||||||
forward_port: null,
|
forward_port: null,
|
||||||
access_list_id: 0,
|
access_list_id: 0,
|
||||||
certificate_id: 0,
|
certificate_id: 0,
|
||||||
|
ssl_key_type: 'ecdsa',
|
||||||
|
default_server: false,
|
||||||
ssl_forced: false,
|
ssl_forced: false,
|
||||||
hsts_enabled: false,
|
hsts_enabled: false,
|
||||||
hsts_subdomains: false,
|
hsts_subdomains: false,
|
||||||
|
@@ -14,6 +14,8 @@ const model = Backbone.Model.extend({
|
|||||||
forward_domain_name: '',
|
forward_domain_name: '',
|
||||||
preserve_path: true,
|
preserve_path: true,
|
||||||
certificate_id: 0,
|
certificate_id: 0,
|
||||||
|
ssl_key_type: 'ecdsa',
|
||||||
|
default_server: false,
|
||||||
ssl_forced: false,
|
ssl_forced: false,
|
||||||
hsts_enabled: false,
|
hsts_enabled: false,
|
||||||
hsts_subdomains: false,
|
hsts_subdomains: false,
|
||||||
|
@@ -167,5 +167,4 @@ $pink: #f66d9b;
|
|||||||
|
|
||||||
textarea.form-control.text-monospace {
|
textarea.form-control.text-monospace {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
font-family: monospace;
|
|
||||||
}
|
}
|
||||||
|
@@ -907,13 +907,6 @@ atob@^2.1.2:
|
|||||||
resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
|
resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
|
||||||
integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
|
integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
|
||||||
|
|
||||||
available-typed-arrays@^1.0.7:
|
|
||||||
version "1.0.7"
|
|
||||||
resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846"
|
|
||||||
integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==
|
|
||||||
dependencies:
|
|
||||||
possible-typed-array-names "^1.0.0"
|
|
||||||
|
|
||||||
babel-code-frame@^6.26.0:
|
babel-code-frame@^6.26.0:
|
||||||
version "6.26.0"
|
version "6.26.0"
|
||||||
resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
|
resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
|
||||||
@@ -1797,32 +1790,6 @@ cacheable-request@^6.0.0:
|
|||||||
normalize-url "^4.1.0"
|
normalize-url "^4.1.0"
|
||||||
responselike "^1.0.2"
|
responselike "^1.0.2"
|
||||||
|
|
||||||
call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2:
|
|
||||||
version "1.0.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6"
|
|
||||||
integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==
|
|
||||||
dependencies:
|
|
||||||
es-errors "^1.3.0"
|
|
||||||
function-bind "^1.1.2"
|
|
||||||
|
|
||||||
call-bind@^1.0.8:
|
|
||||||
version "1.0.8"
|
|
||||||
resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c"
|
|
||||||
integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==
|
|
||||||
dependencies:
|
|
||||||
call-bind-apply-helpers "^1.0.0"
|
|
||||||
es-define-property "^1.0.0"
|
|
||||||
get-intrinsic "^1.2.4"
|
|
||||||
set-function-length "^1.2.2"
|
|
||||||
|
|
||||||
call-bound@^1.0.3, call-bound@^1.0.4:
|
|
||||||
version "1.0.4"
|
|
||||||
resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a"
|
|
||||||
integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==
|
|
||||||
dependencies:
|
|
||||||
call-bind-apply-helpers "^1.0.2"
|
|
||||||
get-intrinsic "^1.3.0"
|
|
||||||
|
|
||||||
callsites@^3.0.0:
|
callsites@^3.0.0:
|
||||||
version "3.1.0"
|
version "3.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
|
resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
|
||||||
@@ -2265,7 +2232,7 @@ create-ecdh@^4.0.0:
|
|||||||
bn.js "^4.1.0"
|
bn.js "^4.1.0"
|
||||||
elliptic "^6.5.3"
|
elliptic "^6.5.3"
|
||||||
|
|
||||||
create-hash@^1.1.0, create-hash@^1.2.0:
|
create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0:
|
||||||
version "1.2.0"
|
version "1.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
|
resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
|
||||||
integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
|
integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
|
||||||
@@ -2276,17 +2243,7 @@ create-hash@^1.1.0, create-hash@^1.2.0:
|
|||||||
ripemd160 "^2.0.1"
|
ripemd160 "^2.0.1"
|
||||||
sha.js "^2.4.0"
|
sha.js "^2.4.0"
|
||||||
|
|
||||||
create-hash@~1.1.3:
|
create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7:
|
||||||
version "1.1.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd"
|
|
||||||
integrity sha512-snRpch/kwQhcdlnZKYanNF1m0RDlrCdSKQaH87w1FCFPVPNCQ/Il9QJKAX2jVBZddRdaHBMC+zXa9Gw9tmkNUA==
|
|
||||||
dependencies:
|
|
||||||
cipher-base "^1.0.1"
|
|
||||||
inherits "^2.0.1"
|
|
||||||
ripemd160 "^2.0.0"
|
|
||||||
sha.js "^2.4.0"
|
|
||||||
|
|
||||||
create-hmac@^1.1.0, create-hmac@^1.1.7:
|
|
||||||
version "1.1.7"
|
version "1.1.7"
|
||||||
resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
|
resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
|
||||||
integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
|
integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
|
||||||
@@ -2457,15 +2414,6 @@ defer-to-connect@^1.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591"
|
resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591"
|
||||||
integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==
|
integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==
|
||||||
|
|
||||||
define-data-property@^1.1.4:
|
|
||||||
version "1.1.4"
|
|
||||||
resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e"
|
|
||||||
integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==
|
|
||||||
dependencies:
|
|
||||||
es-define-property "^1.0.0"
|
|
||||||
es-errors "^1.3.0"
|
|
||||||
gopd "^1.0.1"
|
|
||||||
|
|
||||||
define-properties@^1.1.2, define-properties@^1.1.3:
|
define-properties@^1.1.2, define-properties@^1.1.3:
|
||||||
version "1.1.3"
|
version "1.1.3"
|
||||||
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
|
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
|
||||||
@@ -2631,15 +2579,6 @@ dot-prop@^5.2.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
is-obj "^2.0.0"
|
is-obj "^2.0.0"
|
||||||
|
|
||||||
dunder-proto@^1.0.1:
|
|
||||||
version "1.0.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a"
|
|
||||||
integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==
|
|
||||||
dependencies:
|
|
||||||
call-bind-apply-helpers "^1.0.1"
|
|
||||||
es-errors "^1.3.0"
|
|
||||||
gopd "^1.2.0"
|
|
||||||
|
|
||||||
duplexer3@^0.1.4:
|
duplexer3@^0.1.4:
|
||||||
version "0.1.4"
|
version "0.1.4"
|
||||||
resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
|
resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
|
||||||
@@ -2709,9 +2648,9 @@ electron-to-chromium@^1.3.47:
|
|||||||
integrity sha512-67V62Z4CFOiAtox+o+tosGfVk0QX4DJgH609tjT8QymbJZVAI/jWnAthnr8c5hnRNziIRwkc9EMQYejiVz3/9Q==
|
integrity sha512-67V62Z4CFOiAtox+o+tosGfVk0QX4DJgH609tjT8QymbJZVAI/jWnAthnr8c5hnRNziIRwkc9EMQYejiVz3/9Q==
|
||||||
|
|
||||||
elliptic@^6.5.3, elliptic@^6.5.4:
|
elliptic@^6.5.3, elliptic@^6.5.4:
|
||||||
version "6.6.1"
|
version "6.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.6.1.tgz#3b8ffb02670bf69e382c7f65bf524c97c5405c06"
|
resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.6.0.tgz#5919ec723286c1edf28685aa89261d4761afa210"
|
||||||
integrity sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==
|
integrity sha512-dpwoQcLc/2WLQvJvLRHKZ+f9FgOdjnq11rurqwekGQygGPsYSK29OMMD2WalatiqQ+XGFDglTNixpPfI+lpaAA==
|
||||||
dependencies:
|
dependencies:
|
||||||
bn.js "^4.11.9"
|
bn.js "^4.11.9"
|
||||||
brorand "^1.1.0"
|
brorand "^1.1.0"
|
||||||
@@ -2823,23 +2762,6 @@ es-abstract@^1.17.0-next.1, es-abstract@^1.17.5:
|
|||||||
string.prototype.trimend "^1.0.1"
|
string.prototype.trimend "^1.0.1"
|
||||||
string.prototype.trimstart "^1.0.1"
|
string.prototype.trimstart "^1.0.1"
|
||||||
|
|
||||||
es-define-property@^1.0.0, es-define-property@^1.0.1:
|
|
||||||
version "1.0.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa"
|
|
||||||
integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==
|
|
||||||
|
|
||||||
es-errors@^1.3.0:
|
|
||||||
version "1.3.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
|
|
||||||
integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
|
|
||||||
|
|
||||||
es-object-atoms@^1.0.0, es-object-atoms@^1.1.1:
|
|
||||||
version "1.1.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1"
|
|
||||||
integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==
|
|
||||||
dependencies:
|
|
||||||
es-errors "^1.3.0"
|
|
||||||
|
|
||||||
es-to-primitive@^1.2.1:
|
es-to-primitive@^1.2.1:
|
||||||
version "1.2.1"
|
version "1.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
|
resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
|
||||||
@@ -3209,13 +3131,6 @@ flush-write-stream@^1.0.0:
|
|||||||
inherits "^2.0.3"
|
inherits "^2.0.3"
|
||||||
readable-stream "^2.3.6"
|
readable-stream "^2.3.6"
|
||||||
|
|
||||||
for-each@^0.3.5:
|
|
||||||
version "0.3.5"
|
|
||||||
resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47"
|
|
||||||
integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==
|
|
||||||
dependencies:
|
|
||||||
is-callable "^1.2.7"
|
|
||||||
|
|
||||||
for-in@^1.0.2:
|
for-in@^1.0.2:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
|
resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
|
||||||
@@ -3276,11 +3191,6 @@ function-bind@^1.1.1:
|
|||||||
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
|
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
|
||||||
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
|
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
|
||||||
|
|
||||||
function-bind@^1.1.2:
|
|
||||||
version "1.1.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
|
|
||||||
integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
|
|
||||||
|
|
||||||
functional-red-black-tree@^1.0.1:
|
functional-red-black-tree@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
|
resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
|
||||||
@@ -3317,30 +3227,6 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5:
|
|||||||
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
|
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
|
||||||
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
|
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
|
||||||
|
|
||||||
get-intrinsic@^1.2.4, get-intrinsic@^1.3.0:
|
|
||||||
version "1.3.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01"
|
|
||||||
integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==
|
|
||||||
dependencies:
|
|
||||||
call-bind-apply-helpers "^1.0.2"
|
|
||||||
es-define-property "^1.0.1"
|
|
||||||
es-errors "^1.3.0"
|
|
||||||
es-object-atoms "^1.1.1"
|
|
||||||
function-bind "^1.1.2"
|
|
||||||
get-proto "^1.0.1"
|
|
||||||
gopd "^1.2.0"
|
|
||||||
has-symbols "^1.1.0"
|
|
||||||
hasown "^2.0.2"
|
|
||||||
math-intrinsics "^1.1.0"
|
|
||||||
|
|
||||||
get-proto@^1.0.1:
|
|
||||||
version "1.0.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1"
|
|
||||||
integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==
|
|
||||||
dependencies:
|
|
||||||
dunder-proto "^1.0.1"
|
|
||||||
es-object-atoms "^1.0.0"
|
|
||||||
|
|
||||||
get-stdin@^4.0.1:
|
get-stdin@^4.0.1:
|
||||||
version "4.0.1"
|
version "4.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
|
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
|
||||||
@@ -3507,11 +3393,6 @@ globule@^1.0.0:
|
|||||||
lodash "~4.17.10"
|
lodash "~4.17.10"
|
||||||
minimatch "~3.0.2"
|
minimatch "~3.0.2"
|
||||||
|
|
||||||
gopd@^1.0.1, gopd@^1.2.0:
|
|
||||||
version "1.2.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1"
|
|
||||||
integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==
|
|
||||||
|
|
||||||
got@^9.6.0:
|
got@^9.6.0:
|
||||||
version "9.6.0"
|
version "9.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85"
|
resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85"
|
||||||
@@ -3561,30 +3442,11 @@ has-flag@^4.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
|
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
|
||||||
integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
|
integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
|
||||||
|
|
||||||
has-property-descriptors@^1.0.2:
|
|
||||||
version "1.0.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854"
|
|
||||||
integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==
|
|
||||||
dependencies:
|
|
||||||
es-define-property "^1.0.0"
|
|
||||||
|
|
||||||
has-symbols@^1.0.0, has-symbols@^1.0.1:
|
has-symbols@^1.0.0, has-symbols@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"
|
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"
|
||||||
integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==
|
integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==
|
||||||
|
|
||||||
has-symbols@^1.0.3, has-symbols@^1.1.0:
|
|
||||||
version "1.1.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338"
|
|
||||||
integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==
|
|
||||||
|
|
||||||
has-tostringtag@^1.0.2:
|
|
||||||
version "1.0.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc"
|
|
||||||
integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==
|
|
||||||
dependencies:
|
|
||||||
has-symbols "^1.0.3"
|
|
||||||
|
|
||||||
has-unicode@^2.0.1:
|
has-unicode@^2.0.1:
|
||||||
version "2.0.1"
|
version "2.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
|
resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
|
||||||
@@ -3633,13 +3495,6 @@ has@^1.0.3:
|
|||||||
dependencies:
|
dependencies:
|
||||||
function-bind "^1.1.1"
|
function-bind "^1.1.1"
|
||||||
|
|
||||||
hash-base@^2.0.0:
|
|
||||||
version "2.0.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1"
|
|
||||||
integrity sha512-0TROgQ1/SxE6KmxWSvXHvRj90/Xo1JvZShofnYF+f6ZsGtR4eES7WfrQzPalmyagfKZCXpVnitiRebZulWsbiw==
|
|
||||||
dependencies:
|
|
||||||
inherits "^2.0.1"
|
|
||||||
|
|
||||||
hash-base@^3.0.0:
|
hash-base@^3.0.0:
|
||||||
version "3.1.0"
|
version "3.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33"
|
resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33"
|
||||||
@@ -3657,13 +3512,6 @@ hash.js@^1.0.0, hash.js@^1.0.3:
|
|||||||
inherits "^2.0.3"
|
inherits "^2.0.3"
|
||||||
minimalistic-assert "^1.0.1"
|
minimalistic-assert "^1.0.1"
|
||||||
|
|
||||||
hasown@^2.0.2:
|
|
||||||
version "2.0.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
|
|
||||||
integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
|
|
||||||
dependencies:
|
|
||||||
function-bind "^1.1.2"
|
|
||||||
|
|
||||||
he@1.2.x, he@^1.2.0:
|
he@1.2.x, he@^1.2.0:
|
||||||
version "1.2.0"
|
version "1.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
|
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
|
||||||
@@ -4008,11 +3856,6 @@ is-callable@^1.1.4, is-callable@^1.2.0:
|
|||||||
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb"
|
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb"
|
||||||
integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==
|
integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==
|
||||||
|
|
||||||
is-callable@^1.2.7:
|
|
||||||
version "1.2.7"
|
|
||||||
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
|
|
||||||
integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==
|
|
||||||
|
|
||||||
is-ci@^2.0.0:
|
is-ci@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
|
resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
|
||||||
@@ -4176,13 +4019,6 @@ is-symbol@^1.0.2:
|
|||||||
dependencies:
|
dependencies:
|
||||||
has-symbols "^1.0.1"
|
has-symbols "^1.0.1"
|
||||||
|
|
||||||
is-typed-array@^1.1.14:
|
|
||||||
version "1.1.15"
|
|
||||||
resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b"
|
|
||||||
integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==
|
|
||||||
dependencies:
|
|
||||||
which-typed-array "^1.1.16"
|
|
||||||
|
|
||||||
is-typedarray@^1.0.0:
|
is-typedarray@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
|
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
|
||||||
@@ -4208,11 +4044,6 @@ isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
|
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
|
||||||
integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
|
integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
|
||||||
|
|
||||||
isarray@^2.0.5:
|
|
||||||
version "2.0.5"
|
|
||||||
resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723"
|
|
||||||
integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==
|
|
||||||
|
|
||||||
isexe@^2.0.0:
|
isexe@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
|
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
|
||||||
@@ -4605,11 +4436,6 @@ marionette.templatecache@^1.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
backbone.marionette "^4.0.0, 4.0.0-beta.1"
|
backbone.marionette "^4.0.0, 4.0.0-beta.1"
|
||||||
|
|
||||||
math-intrinsics@^1.1.0:
|
|
||||||
version "1.1.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9"
|
|
||||||
integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==
|
|
||||||
|
|
||||||
md5.js@^1.3.4:
|
md5.js@^1.3.4:
|
||||||
version "1.3.5"
|
version "1.3.5"
|
||||||
resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
|
resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
|
||||||
@@ -5463,16 +5289,15 @@ path-type@^4.0.0:
|
|||||||
integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
|
integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
|
||||||
|
|
||||||
pbkdf2@^3.0.3:
|
pbkdf2@^3.0.3:
|
||||||
version "3.1.3"
|
version "3.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.3.tgz#8be674d591d65658113424592a95d1517318dd4b"
|
resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94"
|
||||||
integrity sha512-wfRLBZ0feWRhCIkoMB6ete7czJcnNnqRpcoWQBLqatqXXmelSRqfdDK4F3u9T2s2cXas/hQJcryI/4lAL+XTlA==
|
integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==
|
||||||
dependencies:
|
dependencies:
|
||||||
create-hash "~1.1.3"
|
create-hash "^1.1.2"
|
||||||
create-hmac "^1.1.7"
|
create-hmac "^1.1.4"
|
||||||
ripemd160 "=2.0.1"
|
ripemd160 "^2.0.1"
|
||||||
safe-buffer "^5.2.1"
|
safe-buffer "^5.0.1"
|
||||||
sha.js "^2.4.11"
|
sha.js "^2.4.8"
|
||||||
to-buffer "^1.2.0"
|
|
||||||
|
|
||||||
picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1:
|
picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1:
|
||||||
version "2.2.2"
|
version "2.2.2"
|
||||||
@@ -5501,11 +5326,6 @@ posix-character-classes@^0.1.0:
|
|||||||
resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
|
resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
|
||||||
integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
|
integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
|
||||||
|
|
||||||
possible-typed-array-names@^1.0.0:
|
|
||||||
version "1.1.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae"
|
|
||||||
integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==
|
|
||||||
|
|
||||||
postcss-modules-extract-imports@^2.0.0:
|
postcss-modules-extract-imports@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e"
|
resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e"
|
||||||
@@ -6066,14 +5886,6 @@ rimraf@^3.0.2:
|
|||||||
dependencies:
|
dependencies:
|
||||||
glob "^7.1.3"
|
glob "^7.1.3"
|
||||||
|
|
||||||
ripemd160@=2.0.1:
|
|
||||||
version "2.0.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7"
|
|
||||||
integrity sha512-J7f4wutN8mdbV08MJnXibYpCOPHR+yzy+iQ/AsjMv2j8cLavQ8VGagDFUwwTAdF8FmRKVeNpbTTEwNHCW1g94w==
|
|
||||||
dependencies:
|
|
||||||
hash-base "^2.0.0"
|
|
||||||
inherits "^2.0.1"
|
|
||||||
|
|
||||||
ripemd160@^2.0.0, ripemd160@^2.0.1:
|
ripemd160@^2.0.0, ripemd160@^2.0.1:
|
||||||
version "2.0.2"
|
version "2.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
|
resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
|
||||||
@@ -6225,18 +6037,6 @@ set-blocking@^2.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
|
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
|
||||||
integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
|
integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
|
||||||
|
|
||||||
set-function-length@^1.2.2:
|
|
||||||
version "1.2.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449"
|
|
||||||
integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==
|
|
||||||
dependencies:
|
|
||||||
define-data-property "^1.1.4"
|
|
||||||
es-errors "^1.3.0"
|
|
||||||
function-bind "^1.1.2"
|
|
||||||
get-intrinsic "^1.2.4"
|
|
||||||
gopd "^1.0.1"
|
|
||||||
has-property-descriptors "^1.0.2"
|
|
||||||
|
|
||||||
set-value@^2.0.0, set-value@^2.0.1:
|
set-value@^2.0.0, set-value@^2.0.1:
|
||||||
version "2.0.1"
|
version "2.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
|
resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
|
||||||
@@ -6252,7 +6052,7 @@ setimmediate@^1.0.4:
|
|||||||
resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
|
resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
|
||||||
integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
|
integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
|
||||||
|
|
||||||
sha.js@^2.4.0, sha.js@^2.4.11, sha.js@^2.4.8:
|
sha.js@^2.4.0, sha.js@^2.4.8:
|
||||||
version "2.4.11"
|
version "2.4.11"
|
||||||
resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
|
resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
|
||||||
integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
|
integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
|
||||||
@@ -6792,15 +6592,6 @@ to-arraybuffer@^1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
|
resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
|
||||||
integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
|
integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
|
||||||
|
|
||||||
to-buffer@^1.2.0:
|
|
||||||
version "1.2.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.2.1.tgz#2ce650cdb262e9112a18e65dc29dcb513c8155e0"
|
|
||||||
integrity sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==
|
|
||||||
dependencies:
|
|
||||||
isarray "^2.0.5"
|
|
||||||
safe-buffer "^5.2.1"
|
|
||||||
typed-array-buffer "^1.0.3"
|
|
||||||
|
|
||||||
to-fast-properties@^1.0.3:
|
to-fast-properties@^1.0.3:
|
||||||
version "1.0.3"
|
version "1.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
|
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
|
||||||
@@ -6907,15 +6698,6 @@ type-fest@^0.8.1:
|
|||||||
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
|
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
|
||||||
integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
|
integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
|
||||||
|
|
||||||
typed-array-buffer@^1.0.3:
|
|
||||||
version "1.0.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536"
|
|
||||||
integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==
|
|
||||||
dependencies:
|
|
||||||
call-bound "^1.0.3"
|
|
||||||
es-errors "^1.3.0"
|
|
||||||
is-typed-array "^1.1.14"
|
|
||||||
|
|
||||||
typedarray-to-buffer@^3.1.5:
|
typedarray-to-buffer@^3.1.5:
|
||||||
version "3.1.5"
|
version "3.1.5"
|
||||||
resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
|
resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
|
||||||
@@ -7242,19 +7024,6 @@ which-module@^2.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
|
resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
|
||||||
integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
|
integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
|
||||||
|
|
||||||
which-typed-array@^1.1.16:
|
|
||||||
version "1.1.19"
|
|
||||||
resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.19.tgz#df03842e870b6b88e117524a4b364b6fc689f956"
|
|
||||||
integrity sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==
|
|
||||||
dependencies:
|
|
||||||
available-typed-arrays "^1.0.7"
|
|
||||||
call-bind "^1.0.8"
|
|
||||||
call-bound "^1.0.4"
|
|
||||||
for-each "^0.3.5"
|
|
||||||
get-proto "^1.0.1"
|
|
||||||
gopd "^1.2.0"
|
|
||||||
has-tostringtag "^1.0.2"
|
|
||||||
|
|
||||||
which@^1.2.14, which@^1.2.9, which@^1.3.1:
|
which@^1.2.14, which@^1.2.9, which@^1.3.1:
|
||||||
version "1.3.1"
|
version "1.3.1"
|
||||||
resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
|
resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
|
||||||
|
@@ -10,9 +10,9 @@
|
|||||||
"active24": {
|
"active24": {
|
||||||
"name": "Active24",
|
"name": "Active24",
|
||||||
"package_name": "certbot-dns-active24",
|
"package_name": "certbot-dns-active24",
|
||||||
"version": "~=2.0.0",
|
"version": "~=1.5.1",
|
||||||
"dependencies": "",
|
"dependencies": "",
|
||||||
"credentials": "dns_active24_api_key = <identifier>\ndns_active24_secret = <secret>",
|
"credentials": "dns_active24_token=\"TOKEN\"",
|
||||||
"full_plugin_name": "dns-active24"
|
"full_plugin_name": "dns-active24"
|
||||||
},
|
},
|
||||||
"aliyun": {
|
"aliyun": {
|
||||||
@@ -31,14 +31,6 @@
|
|||||||
"credentials": "# This plugin supported API authentication using either Service Principals or utilizing a Managed Identity assigned to the virtual machine.\n# Regardless which authentication method used, the identity will need the “DNS Zone Contributor” role assigned to it.\n# As multiple Azure DNS Zones in multiple resource groups can exist, the config file needs a mapping of zone to resource group ID. Multiple zones -> ID mappings can be listed by using the key dns_azure_zoneX where X is a unique number. At least 1 zone mapping is required.\n\n# Using a service principal (option 1)\ndns_azure_sp_client_id = 912ce44a-0156-4669-ae22-c16a17d34ca5\ndns_azure_sp_client_secret = E-xqXU83Y-jzTI6xe9fs2YC~mck3ZzUih9\ndns_azure_tenant_id = ed1090f3-ab18-4b12-816c-599af8a88cf7\n\n# Using used assigned MSI (option 2)\n# dns_azure_msi_client_id = 912ce44a-0156-4669-ae22-c16a17d34ca5\n\n# Using system assigned MSI (option 3)\n# dns_azure_msi_system_assigned = true\n\n# Zones (at least one always required)\ndns_azure_zone1 = example.com:/subscriptions/c135abce-d87d-48df-936c-15596c6968a5/resourceGroups/dns1\ndns_azure_zone2 = example.org:/subscriptions/99800903-fb14-4992-9aff-12eaf2744622/resourceGroups/dns2",
|
"credentials": "# This plugin supported API authentication using either Service Principals or utilizing a Managed Identity assigned to the virtual machine.\n# Regardless which authentication method used, the identity will need the “DNS Zone Contributor” role assigned to it.\n# As multiple Azure DNS Zones in multiple resource groups can exist, the config file needs a mapping of zone to resource group ID. Multiple zones -> ID mappings can be listed by using the key dns_azure_zoneX where X is a unique number. At least 1 zone mapping is required.\n\n# Using a service principal (option 1)\ndns_azure_sp_client_id = 912ce44a-0156-4669-ae22-c16a17d34ca5\ndns_azure_sp_client_secret = E-xqXU83Y-jzTI6xe9fs2YC~mck3ZzUih9\ndns_azure_tenant_id = ed1090f3-ab18-4b12-816c-599af8a88cf7\n\n# Using used assigned MSI (option 2)\n# dns_azure_msi_client_id = 912ce44a-0156-4669-ae22-c16a17d34ca5\n\n# Using system assigned MSI (option 3)\n# dns_azure_msi_system_assigned = true\n\n# Zones (at least one always required)\ndns_azure_zone1 = example.com:/subscriptions/c135abce-d87d-48df-936c-15596c6968a5/resourceGroups/dns1\ndns_azure_zone2 = example.org:/subscriptions/99800903-fb14-4992-9aff-12eaf2744622/resourceGroups/dns2",
|
||||||
"full_plugin_name": "dns-azure"
|
"full_plugin_name": "dns-azure"
|
||||||
},
|
},
|
||||||
"baidu": {
|
|
||||||
"name": "baidu",
|
|
||||||
"package_name": "certbot-dns-baidu",
|
|
||||||
"version": "~=0.1.1",
|
|
||||||
"dependencies": "",
|
|
||||||
"credentials": "dns_baidu_access_key = 12345678\ndns_baidu_secret_key = 1234567890abcdef1234567890abcdef",
|
|
||||||
"full_plugin_name": "dns-baidu"
|
|
||||||
},
|
|
||||||
"beget": {
|
"beget": {
|
||||||
"name":"Beget",
|
"name":"Beget",
|
||||||
"package_name": "certbot-beget-plugin",
|
"package_name": "certbot-beget-plugin",
|
||||||
@@ -55,20 +47,12 @@
|
|||||||
"credentials": "# Bunny API token used by Certbot (see https://dash.bunny.net/account/settings)\ndns_bunny_api_key = xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx",
|
"credentials": "# Bunny API token used by Certbot (see https://dash.bunny.net/account/settings)\ndns_bunny_api_key = xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx",
|
||||||
"full_plugin_name": "dns-bunny"
|
"full_plugin_name": "dns-bunny"
|
||||||
},
|
},
|
||||||
"cdmon": {
|
|
||||||
"name": "cdmon",
|
|
||||||
"package_name": "certbot-dns-cdmon",
|
|
||||||
"version": "~=0.4.1",
|
|
||||||
"dependencies": "",
|
|
||||||
"credentials": "dns_cdmon_api_key=your-cdmon-api-token\ndns_cdmon_domain=your_domain_is_optional",
|
|
||||||
"full_plugin_name": "dns-cdmon"
|
|
||||||
},
|
|
||||||
"cloudflare": {
|
"cloudflare": {
|
||||||
"name": "Cloudflare",
|
"name": "Cloudflare",
|
||||||
"package_name": "certbot-dns-cloudflare",
|
"package_name": "certbot-dns-cloudflare",
|
||||||
"version": "=={{certbot-version}}",
|
"version": "=={{certbot-version}}",
|
||||||
"dependencies": "cloudflare==4.0.* acme=={{certbot-version}}",
|
"dependencies": "cloudflare==2.19.* acme=={{certbot-version}}",
|
||||||
"credentials": "# Cloudflare API credentials used by Certbot\ndns_cloudflare_email = cloudflare@example.com\ndns_cloudflare_api_key = 0123456789abcdef0123456789abcdef01234",
|
"credentials": "# Cloudflare API token\ndns_cloudflare_api_token=0123456789abcdef0123456789abcdef01234567",
|
||||||
"full_plugin_name": "dns-cloudflare"
|
"full_plugin_name": "dns-cloudflare"
|
||||||
},
|
},
|
||||||
"cloudns": {
|
"cloudns": {
|
||||||
@@ -106,19 +90,11 @@
|
|||||||
"cpanel": {
|
"cpanel": {
|
||||||
"name": "cPanel",
|
"name": "cPanel",
|
||||||
"package_name": "certbot-dns-cpanel",
|
"package_name": "certbot-dns-cpanel",
|
||||||
"version": "~=0.4.0",
|
"version": "~=0.2.2",
|
||||||
"dependencies": "",
|
"dependencies": "",
|
||||||
"credentials": "cpanel_url = https://cpanel.example.com:2083\ncpanel_username = your_username\ncpanel_password = your_password\ncpanel_token = your_api_token",
|
"credentials": "cpanel_url = https://cpanel.example.com:2083\ncpanel_username = user\ncpanel_password = hunter2",
|
||||||
"full_plugin_name": "cpanel"
|
"full_plugin_name": "cpanel"
|
||||||
},
|
},
|
||||||
"ddnss": {
|
|
||||||
"name": "DDNSS",
|
|
||||||
"package_name": "certbot-dns-ddnss",
|
|
||||||
"version": "~=1.1.0",
|
|
||||||
"dependencies": "",
|
|
||||||
"credentials": "dns_ddnss_token = YOUR_DDNSS_API_TOKEN",
|
|
||||||
"full_plugin_name": "dns-ddnss"
|
|
||||||
},
|
|
||||||
"desec": {
|
"desec": {
|
||||||
"name": "deSEC",
|
"name": "deSEC",
|
||||||
"package_name": "certbot-dns-desec",
|
"package_name": "certbot-dns-desec",
|
||||||
@@ -188,7 +164,7 @@
|
|||||||
"package_name": "certbot-dns-domainoffensive",
|
"package_name": "certbot-dns-domainoffensive",
|
||||||
"version": "~=2.0.0",
|
"version": "~=2.0.0",
|
||||||
"dependencies": "",
|
"dependencies": "",
|
||||||
"credentials": "dns_domainoffensive_api_token = YOUR_DO_DE_AUTH_TOKEN",
|
"credentials": "dns_do_api_token = YOUR_DO_DE_AUTH_TOKEN",
|
||||||
"full_plugin_name": "dns-domainoffensive"
|
"full_plugin_name": "dns-domainoffensive"
|
||||||
},
|
},
|
||||||
"domeneshop": {
|
"domeneshop": {
|
||||||
@@ -223,14 +199,6 @@
|
|||||||
"credentials": "dns_eurodns_applicationId = myuser\ndns_eurodns_apiKey = mysecretpassword\ndns_eurodns_endpoint = https://rest-api.eurodns.com/user-api-gateway/proxy",
|
"credentials": "dns_eurodns_applicationId = myuser\ndns_eurodns_apiKey = mysecretpassword\ndns_eurodns_endpoint = https://rest-api.eurodns.com/user-api-gateway/proxy",
|
||||||
"full_plugin_name": "dns-eurodns"
|
"full_plugin_name": "dns-eurodns"
|
||||||
},
|
},
|
||||||
"firstdomains": {
|
|
||||||
"name": "First Domains",
|
|
||||||
"package_name": "certbot-dns-firstdomains",
|
|
||||||
"version": ">=1.0",
|
|
||||||
"dependencies": "",
|
|
||||||
"credentials": "dns_firstdomains_username = myremoteuser\ndns_firstdomains_password = verysecureremoteuserpassword",
|
|
||||||
"full_plugin_name": "dns-firstdomains"
|
|
||||||
},
|
|
||||||
"freedns": {
|
"freedns": {
|
||||||
"name": "FreeDNS",
|
"name": "FreeDNS",
|
||||||
"package_name": "certbot-dns-freedns",
|
"package_name": "certbot-dns-freedns",
|
||||||
@@ -241,8 +209,8 @@
|
|||||||
},
|
},
|
||||||
"gandi": {
|
"gandi": {
|
||||||
"name": "Gandi Live DNS",
|
"name": "Gandi Live DNS",
|
||||||
"package_name": "certbot-dns-gandi",
|
"package_name": "certbot_plugin_gandi",
|
||||||
"version": "~=1.6.1",
|
"version": "~=1.5.0",
|
||||||
"dependencies": "",
|
"dependencies": "",
|
||||||
"credentials": "# Gandi personal access token\ndns_gandi_token=PERSONAL_ACCESS_TOKEN",
|
"credentials": "# Gandi personal access token\ndns_gandi_token=PERSONAL_ACCESS_TOKEN",
|
||||||
"full_plugin_name": "dns-gandi"
|
"full_plugin_name": "dns-gandi"
|
||||||
@@ -415,14 +383,6 @@
|
|||||||
"credentials": "dns_netcup_customer_id = 123456\ndns_netcup_api_key = 0123456789abcdef0123456789abcdef01234567\ndns_netcup_api_password = abcdef0123456789abcdef01234567abcdef0123",
|
"credentials": "dns_netcup_customer_id = 123456\ndns_netcup_api_key = 0123456789abcdef0123456789abcdef01234567\ndns_netcup_api_password = abcdef0123456789abcdef01234567abcdef0123",
|
||||||
"full_plugin_name": "dns-netcup"
|
"full_plugin_name": "dns-netcup"
|
||||||
},
|
},
|
||||||
"nicru": {
|
|
||||||
"name": "nic.ru",
|
|
||||||
"package_name": "certbot-dns-nicru",
|
|
||||||
"version": "~=1.0.3",
|
|
||||||
"dependencies": "",
|
|
||||||
"credentials": "dns_nicru_client_id = application-id\ndns_nicru_client_secret = application-token\ndns_nicru_username = 0001110/NIC-D\ndns_nicru_password = password\ndns_nicru_scope = .+:.+/zones/example.com(/.+)?\ndns_nicru_service = DNS_SERVICE_NAME\ndns_nicru_zone = example.com",
|
|
||||||
"full_plugin_name": "dns-nicru"
|
|
||||||
},
|
|
||||||
"njalla": {
|
"njalla": {
|
||||||
"name": "Njalla",
|
"name": "Njalla",
|
||||||
"package_name": "certbot-dns-njalla",
|
"package_name": "certbot-dns-njalla",
|
||||||
@@ -511,30 +471,14 @@
|
|||||||
"credentials": "[default]\naws_access_key_id=AKIAIOSFODNN7EXAMPLE\naws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
|
"credentials": "[default]\naws_access_key_id=AKIAIOSFODNN7EXAMPLE\naws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
|
||||||
"full_plugin_name": "dns-route53"
|
"full_plugin_name": "dns-route53"
|
||||||
},
|
},
|
||||||
"spaceship": {
|
|
||||||
"name": "Spaceship",
|
|
||||||
"package_name": "certbot-dns-spaceship",
|
|
||||||
"version": "~=1.0.4",
|
|
||||||
"dependencies": "",
|
|
||||||
"credentials": "[spaceship]\napi_key=your_api_key\napi_secret=your_api_secret",
|
|
||||||
"full_plugin_name": "dns-spaceship"
|
|
||||||
},
|
|
||||||
"strato": {
|
"strato": {
|
||||||
"name": "Strato",
|
"name": "Strato",
|
||||||
"package_name": "certbot-dns-strato",
|
"package_name": "certbot-dns-strato",
|
||||||
"version": "~=0.2.2",
|
"version": "~=0.2.1",
|
||||||
"dependencies": "",
|
"dependencies": "",
|
||||||
"credentials": "dns_strato_username = user\ndns_strato_password = pass\n# uncomment if youre using two factor authentication:\n# dns_strato_totp_devicename = 2fa_device\n# dns_strato_totp_secret = 2fa_secret\n#\n# uncomment if domain name contains special characters\n# insert domain display name as seen on your account page here\n# dns_strato_domain_display_name = my-punicode-url.de\n#\n# if youre not using strato.de or another special endpoint you can customise it below\n# you will probably only need to adjust the host, but you can also change the complete endpoint url\n# dns_strato_custom_api_scheme = https\n# dns_strato_custom_api_host = www.strato.de\n# dns_strato_custom_api_port = 443\n# dns_strato_custom_api_path = \"/apps/CustomerService\"",
|
"credentials": "dns_strato_username = user\ndns_strato_password = pass\n# uncomment if youre using two factor authentication:\n# dns_strato_totp_devicename = 2fa_device\n# dns_strato_totp_secret = 2fa_secret\n#\n# uncomment if domain name contains special characters\n# insert domain display name as seen on your account page here\n# dns_strato_domain_display_name = my-punicode-url.de\n#\n# if youre not using strato.de or another special endpoint you can customise it below\n# you will probably only need to adjust the host, but you can also change the complete endpoint url\n# dns_strato_custom_api_scheme = https\n# dns_strato_custom_api_host = www.strato.de\n# dns_strato_custom_api_port = 443\n# dns_strato_custom_api_path = \"/apps/CustomerService\"",
|
||||||
"full_plugin_name": "dns-strato"
|
"full_plugin_name": "dns-strato"
|
||||||
},
|
},
|
||||||
"selectelv2": {
|
|
||||||
"name": "Selectel api v2",
|
|
||||||
"package_name": "certbot-dns-selectel-api-v2",
|
|
||||||
"version": "~=0.3.0",
|
|
||||||
"dependencies": "",
|
|
||||||
"credentials": "dns_selectel_api_v2_account_id = your_account_id\ndns_selectel_api_v2_project_name = your_project\ndns_selectel_api_v2_username = your_username\ndns_selectel_api_v2_password = your_password",
|
|
||||||
"full_plugin_name": "dns-selectel-api-v2"
|
|
||||||
},
|
|
||||||
"timeweb": {
|
"timeweb": {
|
||||||
"name": "Timeweb Cloud",
|
"name": "Timeweb Cloud",
|
||||||
"package_name": "certbot-dns-timeweb",
|
"package_name": "certbot-dns-timeweb",
|
||||||
|
@@ -1,25 +0,0 @@
|
|||||||
/// <reference types="cypress" />
|
|
||||||
|
|
||||||
describe('Dashboard endpoints', () => {
|
|
||||||
let token;
|
|
||||||
|
|
||||||
before(() => {
|
|
||||||
cy.getToken().then((tok) => {
|
|
||||||
token = tok;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('Should be able to get host counts', function() {
|
|
||||||
cy.task('backendApiGet', {
|
|
||||||
token: token,
|
|
||||||
path: '/api/reports/hosts'
|
|
||||||
}).then((data) => {
|
|
||||||
cy.validateSwaggerSchema('get', 200, '/reports/hosts', data);
|
|
||||||
expect(data).to.have.property('dead');
|
|
||||||
expect(data).to.have.property('proxy');
|
|
||||||
expect(data).to.have.property('redirection');
|
|
||||||
expect(data).to.have.property('stream');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
@@ -210,16 +210,4 @@ describe('Streams', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Should be able to List Streams', function() {
|
|
||||||
cy.task('backendApiGet', {
|
|
||||||
token: token,
|
|
||||||
path: '/api/nginx/streams?expand=owner,certificate',
|
|
||||||
}).then((data) => {
|
|
||||||
cy.validateSwaggerSchema('get', 200, '/nginx/streams', data);
|
|
||||||
expect(data.length).to.be.greaterThan(0);
|
|
||||||
expect(data[0]).to.have.property('id');
|
|
||||||
expect(data[0]).to.have.property('enabled');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
943
test/yarn.lock
943
test/yarn.lock
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user