mirror of
https://github.com/NginxProxyManager/nginx-proxy-manager.git
synced 2025-12-06 08:16:51 +00:00
Compare commits
10 Commits
5d6916dcf0
...
lang-persi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
32208f3864 | ||
|
|
52ab4844dc | ||
|
|
24216f1f2f | ||
|
|
52e528f217 | ||
|
|
4709f9826c | ||
|
|
74a8c5d806 | ||
|
|
82a1a86c3a | ||
|
|
95957a192c | ||
|
|
906ce8ced2 | ||
|
|
89abb9d559 |
@@ -195,11 +195,11 @@ const internalAccessList = {
|
|||||||
);
|
);
|
||||||
|
|
||||||
await internalAccessList.build(freshRow)
|
await internalAccessList.build(freshRow)
|
||||||
if (Number.parseInt(row.proxy_host_count, 10)) {
|
if (Number.parseInt(freshRow.proxy_host_count, 10)) {
|
||||||
await internalNginx.bulkGenerateConfigs("proxy_host", row.proxy_hosts);
|
await internalNginx.bulkGenerateConfigs("proxy_host", freshRow.proxy_hosts);
|
||||||
}
|
}
|
||||||
await internalNginx.reload();
|
await internalNginx.reload();
|
||||||
return internalAccessList.maskItems(row);
|
return internalAccessList.maskItems(freshRow);
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -381,14 +381,14 @@ const internalNginx = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {String} host_type
|
* @param {String} hostType
|
||||||
* @param {Array} hosts
|
* @param {Array} hosts
|
||||||
* @returns {Promise}
|
* @returns {Promise}
|
||||||
*/
|
*/
|
||||||
bulkGenerateConfigs: (host_type, hosts) => {
|
bulkGenerateConfigs: (hostType, hosts) => {
|
||||||
const promises = [];
|
const promises = [];
|
||||||
hosts.map((host) => {
|
hosts.map((host) => {
|
||||||
promises.push(internalNginx.generateConfig(host_type, host));
|
promises.push(internalNginx.generateConfig(hostType, host));
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -265,7 +265,7 @@ export default function (tokenString) {
|
|||||||
schemas: [roleSchema, permsSchema, objectSchema, permissionSchema],
|
schemas: [roleSchema, permsSchema, objectSchema, permissionSchema],
|
||||||
});
|
});
|
||||||
|
|
||||||
const valid = ajv.validate("permissions", dataSchema);
|
const valid = await ajv.validate("permissions", dataSchema);
|
||||||
return valid && dataSchema[permission];
|
return valid && dataSchema[permission];
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
err.permission = permission;
|
err.permission = permission;
|
||||||
|
|||||||
@@ -20,9 +20,9 @@
|
|||||||
"body-parser": "^1.20.3",
|
"body-parser": "^1.20.3",
|
||||||
"compression": "^1.7.4",
|
"compression": "^1.7.4",
|
||||||
"express": "^4.20.0",
|
"express": "^4.20.0",
|
||||||
"express-fileupload": "^1.1.9",
|
"express-fileupload": "^1.5.2",
|
||||||
"gravatar": "^1.8.0",
|
"gravatar": "^1.8.2",
|
||||||
"jsonwebtoken": "^9.0.0",
|
"jsonwebtoken": "^9.0.2",
|
||||||
"knex": "2.4.2",
|
"knex": "2.4.2",
|
||||||
"liquidjs": "10.6.1",
|
"liquidjs": "10.6.1",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
@@ -38,7 +38,7 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@apidevtools/swagger-parser": "^10.1.0",
|
"@apidevtools/swagger-parser": "^10.1.0",
|
||||||
"@biomejs/biome": "^2.3.1",
|
"@biomejs/biome": "^2.3.2",
|
||||||
"chalk": "4.1.2",
|
"chalk": "4.1.2",
|
||||||
"nodemon": "^2.0.2"
|
"nodemon": "^2.0.2"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -7,7 +7,8 @@
|
|||||||
"description": "Unique identifier",
|
"description": "Unique identifier",
|
||||||
"readOnly": true,
|
"readOnly": true,
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 1
|
"minimum": 1,
|
||||||
|
"example": 11
|
||||||
},
|
},
|
||||||
"expand": {
|
"expand": {
|
||||||
"anyOf": [
|
"anyOf": [
|
||||||
@@ -38,35 +39,42 @@
|
|||||||
"created_on": {
|
"created_on": {
|
||||||
"description": "Date and time of creation",
|
"description": "Date and time of creation",
|
||||||
"readOnly": true,
|
"readOnly": true,
|
||||||
"type": "string"
|
"type": "string",
|
||||||
|
"example": "2025-10-28T04:17:54.000Z"
|
||||||
},
|
},
|
||||||
"modified_on": {
|
"modified_on": {
|
||||||
"description": "Date and time of last update",
|
"description": "Date and time of last update",
|
||||||
"readOnly": true,
|
"readOnly": true,
|
||||||
"type": "string"
|
"type": "string",
|
||||||
|
"example": "2025-10-28T04:17:54.000Z"
|
||||||
},
|
},
|
||||||
"user_id": {
|
"user_id": {
|
||||||
"description": "User ID",
|
"description": "User ID",
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 1
|
"minimum": 1,
|
||||||
|
"example": 2
|
||||||
},
|
},
|
||||||
"certificate_id": {
|
"certificate_id": {
|
||||||
"description": "Certificate ID",
|
"description": "Certificate ID",
|
||||||
"anyOf": [
|
"anyOf": [
|
||||||
{
|
{
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 0
|
"minimum": 0,
|
||||||
|
"example": 5
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"pattern": "^new$"
|
"pattern": "^new$",
|
||||||
|
"example": "new"
|
||||||
}
|
}
|
||||||
]
|
],
|
||||||
|
"example": 5
|
||||||
},
|
},
|
||||||
"access_list_id": {
|
"access_list_id": {
|
||||||
"description": "Access List ID",
|
"description": "Access List ID",
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 0
|
"minimum": 0,
|
||||||
|
"example": 3
|
||||||
},
|
},
|
||||||
"domain_names": {
|
"domain_names": {
|
||||||
"description": "Domain Names separated by a comma",
|
"description": "Domain Names separated by a comma",
|
||||||
@@ -77,44 +85,157 @@
|
|||||||
"items": {
|
"items": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"pattern": "^[^&| @!#%^();:/\\\\}{=+?<>,~`'\"]+$"
|
"pattern": "^[^&| @!#%^();:/\\\\}{=+?<>,~`'\"]+$"
|
||||||
}
|
},
|
||||||
|
"example": ["example.com", "www.example.com"]
|
||||||
},
|
},
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"description": "Is Enabled",
|
"description": "Is Enabled",
|
||||||
"type": "boolean"
|
"type": "boolean",
|
||||||
|
"example": false
|
||||||
},
|
},
|
||||||
"ssl_forced": {
|
"ssl_forced": {
|
||||||
"description": "Is SSL Forced",
|
"description": "Is SSL Forced",
|
||||||
"type": "boolean"
|
"type": "boolean",
|
||||||
|
"example": true
|
||||||
},
|
},
|
||||||
"hsts_enabled": {
|
"hsts_enabled": {
|
||||||
"description": "Is HSTS Enabled",
|
"description": "Is HSTS Enabled",
|
||||||
"type": "boolean"
|
"type": "boolean",
|
||||||
|
"example": true
|
||||||
},
|
},
|
||||||
"hsts_subdomains": {
|
"hsts_subdomains": {
|
||||||
"description": "Is HSTS applicable to all subdomains",
|
"description": "Is HSTS applicable to all subdomains",
|
||||||
"type": "boolean"
|
"type": "boolean",
|
||||||
|
"example": true
|
||||||
},
|
},
|
||||||
"ssl_provider": {
|
"ssl_provider": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"pattern": "^(letsencrypt|other)$"
|
"pattern": "^(letsencrypt|other)$",
|
||||||
|
"example": "letsencrypt"
|
||||||
},
|
},
|
||||||
"http2_support": {
|
"http2_support": {
|
||||||
"description": "HTTP2 Protocol Support",
|
"description": "HTTP2 Protocol Support",
|
||||||
"type": "boolean"
|
"type": "boolean",
|
||||||
|
"example": true
|
||||||
},
|
},
|
||||||
"block_exploits": {
|
"block_exploits": {
|
||||||
"description": "Should we block common exploits",
|
"description": "Should we block common exploits",
|
||||||
"type": "boolean"
|
"type": "boolean",
|
||||||
|
"example": false
|
||||||
},
|
},
|
||||||
"caching_enabled": {
|
"caching_enabled": {
|
||||||
"description": "Should we cache assets",
|
"description": "Should we cache assets",
|
||||||
"type": "boolean"
|
"type": "boolean",
|
||||||
|
"example": true
|
||||||
},
|
},
|
||||||
"email": {
|
"email": {
|
||||||
"description": "Email address",
|
"description": "Email address",
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"pattern": "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$"
|
"pattern": "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$",
|
||||||
|
"example": "me@example.com"
|
||||||
|
},
|
||||||
|
"directive": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["allow", "deny"],
|
||||||
|
"example": "allow"
|
||||||
|
},
|
||||||
|
"address": {
|
||||||
|
"oneOf": [
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^([0-9]{1,3}\\.){3}[0-9]{1,3}(/([0-9]|[1-2][0-9]|3[0-2]))?$"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8]))?$"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^all$"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"example": "192.168.0.11"
|
||||||
|
},
|
||||||
|
"access_items": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false,
|
||||||
|
"properties": {
|
||||||
|
"username": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1
|
||||||
|
},
|
||||||
|
"password": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"example": {
|
||||||
|
"username": "admin",
|
||||||
|
"password": "pass"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"example": [
|
||||||
|
{
|
||||||
|
"username": "admin",
|
||||||
|
"password": "pass"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"access_clients": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false,
|
||||||
|
"properties": {
|
||||||
|
"address": {
|
||||||
|
"$ref": "#/properties/address"
|
||||||
|
},
|
||||||
|
"directive": {
|
||||||
|
"$ref": "#/properties/directive"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"example": {
|
||||||
|
"directive": "allow",
|
||||||
|
"address": "192.168.0.0/24"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"example": [
|
||||||
|
{
|
||||||
|
"directive": "allow",
|
||||||
|
"address": "192.168.0.0/24"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"certificate_files": {
|
||||||
|
"description": "Certificate Files",
|
||||||
|
"content": {
|
||||||
|
"multipart/form-data": {
|
||||||
|
"schema": {
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false,
|
||||||
|
"required": ["certificate", "certificate_key"],
|
||||||
|
"properties": {
|
||||||
|
"certificate": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "-----BEGIN CERTIFICATE-----\nMIID...-----END CERTIFICATE-----"
|
||||||
|
},
|
||||||
|
"certificate_key": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "-----BEGIN CERTIFICATE-----\nMIID...-----END CERTIFICATE-----"
|
||||||
|
},
|
||||||
|
"intermediate_certificate": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "-----BEGIN CERTIFICATE-----\nMIID...-----END CERTIFICATE-----"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"example": {
|
||||||
|
"certificate": "-----BEGIN CERTIFICATE-----\nMIID...-----END CERTIFICATE-----",
|
||||||
|
"certificate_key": "-----BEGIN PRIVATE\nMIID...-----END CERTIFICATE-----"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
{
|
{
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"description": "Access List object",
|
"description": "Access List object",
|
||||||
"required": ["id", "created_on", "modified_on", "owner_user_id", "name", "directive", "address", "satisfy_any", "pass_auth", "meta"],
|
"required": ["id", "created_on", "modified_on", "owner_user_id", "name", "meta", "satisfy_any", "pass_auth", "proxy_host_count"],
|
||||||
"additionalProperties": false,
|
|
||||||
"properties": {
|
"properties": {
|
||||||
"id": {
|
"id": {
|
||||||
"$ref": "../common.json#/properties/id"
|
"$ref": "../common.json#/properties/id"
|
||||||
@@ -18,36 +17,25 @@
|
|||||||
},
|
},
|
||||||
"name": {
|
"name": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"minLength": 1
|
"minLength": 1,
|
||||||
},
|
"example": "My Access List"
|
||||||
"directive": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": ["allow", "deny"]
|
|
||||||
},
|
|
||||||
"address": {
|
|
||||||
"oneOf": [
|
|
||||||
{
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^([0-9]{1,3}\\.){3}[0-9]{1,3}(/([0-9]|[1-2][0-9]|3[0-2]))?$"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8]))?$"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^all$"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"satisfy_any": {
|
|
||||||
"type": "boolean"
|
|
||||||
},
|
|
||||||
"pass_auth": {
|
|
||||||
"type": "boolean"
|
|
||||||
},
|
},
|
||||||
"meta": {
|
"meta": {
|
||||||
"type": "object"
|
"type": "object",
|
||||||
|
"example": {}
|
||||||
|
},
|
||||||
|
"satisfy_any": {
|
||||||
|
"type": "boolean",
|
||||||
|
"example": true
|
||||||
|
},
|
||||||
|
"pass_auth": {
|
||||||
|
"type": "boolean",
|
||||||
|
"example": false
|
||||||
|
},
|
||||||
|
"proxy_host_count": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"example": 3
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,16 +26,19 @@
|
|||||||
"$ref": "../common.json#/properties/user_id"
|
"$ref": "../common.json#/properties/user_id"
|
||||||
},
|
},
|
||||||
"object_type": {
|
"object_type": {
|
||||||
"type": "string"
|
"type": "string",
|
||||||
|
"example": "certificate"
|
||||||
},
|
},
|
||||||
"object_id": {
|
"object_id": {
|
||||||
"$ref": "../common.json#/properties/id"
|
"$ref": "../common.json#/properties/id"
|
||||||
},
|
},
|
||||||
"action": {
|
"action": {
|
||||||
"type": "string"
|
"type": "string",
|
||||||
|
"example": "created"
|
||||||
},
|
},
|
||||||
"meta": {
|
"meta": {
|
||||||
"type": "object"
|
"type": "object",
|
||||||
|
"example": {}
|
||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"$ref": "./user-object.json"
|
"$ref": "./user-object.json"
|
||||||
|
|||||||
@@ -21,7 +21,8 @@
|
|||||||
},
|
},
|
||||||
"nice_name": {
|
"nice_name": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "Nice Name for the custom certificate"
|
"description": "Nice Name for the custom certificate",
|
||||||
|
"example": "My Custom Cert"
|
||||||
},
|
},
|
||||||
"domain_names": {
|
"domain_names": {
|
||||||
"description": "Domain Names separated by a comma",
|
"description": "Domain Names separated by a comma",
|
||||||
@@ -31,12 +32,14 @@
|
|||||||
"items": {
|
"items": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"pattern": "^[^&| @!#%^();:/\\\\}{=+?<>,~`'\"]+$"
|
"pattern": "^[^&| @!#%^();:/\\\\}{=+?<>,~`'\"]+$"
|
||||||
}
|
},
|
||||||
|
"example": ["example.com", "www.example.com"]
|
||||||
},
|
},
|
||||||
"expires_on": {
|
"expires_on": {
|
||||||
"description": "Date and time of expiration",
|
"description": "Date and time of expiration",
|
||||||
"readOnly": true,
|
"readOnly": true,
|
||||||
"type": "string"
|
"type": "string",
|
||||||
|
"example": "2025-10-28T04:17:54.000Z"
|
||||||
},
|
},
|
||||||
"owner": {
|
"owner": {
|
||||||
"$ref": "./user-object.json"
|
"$ref": "./user-object.json"
|
||||||
@@ -56,10 +59,10 @@
|
|||||||
"dns_challenge": {
|
"dns_challenge": {
|
||||||
"type": "boolean"
|
"type": "boolean"
|
||||||
},
|
},
|
||||||
"dns_provider": {
|
"dns_provider_credentials": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
"dns_provider_credentials": {
|
"dns_provider": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
"letsencrypt_certificate": {
|
"letsencrypt_certificate": {
|
||||||
@@ -69,6 +72,9 @@
|
|||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 0
|
"minimum": 0
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"example": {
|
||||||
|
"dns_challenge": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,13 +35,30 @@
|
|||||||
"$ref": "../common.json#/properties/http2_support"
|
"$ref": "../common.json#/properties/http2_support"
|
||||||
},
|
},
|
||||||
"advanced_config": {
|
"advanced_config": {
|
||||||
"type": "string"
|
"type": "string",
|
||||||
|
"example": ""
|
||||||
},
|
},
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"$ref": "../common.json#/properties/enabled"
|
"$ref": "../common.json#/properties/enabled"
|
||||||
},
|
},
|
||||||
"meta": {
|
"meta": {
|
||||||
"type": "object"
|
"type": "object",
|
||||||
|
"example": {}
|
||||||
|
},
|
||||||
|
"certificate": {
|
||||||
|
"oneOf": [
|
||||||
|
{
|
||||||
|
"type": "null",
|
||||||
|
"example": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$ref": "./certificate-object.json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"example": null
|
||||||
|
},
|
||||||
|
"owner": {
|
||||||
|
"$ref": "./user-object.json"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,10 +5,12 @@
|
|||||||
"required": ["code", "message"],
|
"required": ["code", "message"],
|
||||||
"properties": {
|
"properties": {
|
||||||
"code": {
|
"code": {
|
||||||
"type": "integer"
|
"type": "integer",
|
||||||
|
"example": 400
|
||||||
},
|
},
|
||||||
"message": {
|
"message": {
|
||||||
"type": "string"
|
"type": "string",
|
||||||
|
"example": "Bad Request"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,15 +27,18 @@
|
|||||||
"properties": {
|
"properties": {
|
||||||
"major": {
|
"major": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 0
|
"minimum": 0,
|
||||||
|
"example": 2
|
||||||
},
|
},
|
||||||
"minor": {
|
"minor": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 0
|
"minimum": 0,
|
||||||
|
"example": 10
|
||||||
},
|
},
|
||||||
"revision": {
|
"revision": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 0
|
"minimum": 0,
|
||||||
|
"example": 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,37 +5,44 @@
|
|||||||
"visibility": {
|
"visibility": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "Visibility Type",
|
"description": "Visibility Type",
|
||||||
"enum": ["all", "user"]
|
"enum": ["all", "user"],
|
||||||
|
"example": "all"
|
||||||
},
|
},
|
||||||
"access_lists": {
|
"access_lists": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "Access Lists Permissions",
|
"description": "Access Lists Permissions",
|
||||||
"enum": ["hidden", "view", "manage"]
|
"enum": ["hidden", "view", "manage"],
|
||||||
|
"example": "view"
|
||||||
},
|
},
|
||||||
"dead_hosts": {
|
"dead_hosts": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "404 Hosts Permissions",
|
"description": "404 Hosts Permissions",
|
||||||
"enum": ["hidden", "view", "manage"]
|
"enum": ["hidden", "view", "manage"],
|
||||||
|
"example": "manage"
|
||||||
},
|
},
|
||||||
"proxy_hosts": {
|
"proxy_hosts": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "Proxy Hosts Permissions",
|
"description": "Proxy Hosts Permissions",
|
||||||
"enum": ["hidden", "view", "manage"]
|
"enum": ["hidden", "view", "manage"],
|
||||||
|
"example": "hidden"
|
||||||
},
|
},
|
||||||
"redirection_hosts": {
|
"redirection_hosts": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "Redirection Permissions",
|
"description": "Redirection Permissions",
|
||||||
"enum": ["hidden", "view", "manage"]
|
"enum": ["hidden", "view", "manage"],
|
||||||
|
"example": "view"
|
||||||
},
|
},
|
||||||
"streams": {
|
"streams": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "Streams Permissions",
|
"description": "Streams Permissions",
|
||||||
"enum": ["hidden", "view", "manage"]
|
"enum": ["hidden", "view", "manage"],
|
||||||
|
"example": "manage"
|
||||||
},
|
},
|
||||||
"certificates": {
|
"certificates": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "Certificates Permissions",
|
"description": "Certificates Permissions",
|
||||||
"enum": ["hidden", "view", "manage"]
|
"enum": ["hidden", "view", "manage"],
|
||||||
|
"example": "hidden"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,6 @@
|
|||||||
"hsts_enabled",
|
"hsts_enabled",
|
||||||
"hsts_subdomains"
|
"hsts_subdomains"
|
||||||
],
|
],
|
||||||
"additionalProperties": false,
|
|
||||||
"properties": {
|
"properties": {
|
||||||
"id": {
|
"id": {
|
||||||
"$ref": "../common.json#/properties/id"
|
"$ref": "../common.json#/properties/id"
|
||||||
@@ -44,12 +43,14 @@
|
|||||||
"forward_host": {
|
"forward_host": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"minLength": 1,
|
"minLength": 1,
|
||||||
"maxLength": 255
|
"maxLength": 255,
|
||||||
|
"example": "127.0.0.1"
|
||||||
},
|
},
|
||||||
"forward_port": {
|
"forward_port": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 1,
|
"minimum": 1,
|
||||||
"maximum": 65535
|
"maximum": 65535,
|
||||||
|
"example": 8080
|
||||||
},
|
},
|
||||||
"access_list_id": {
|
"access_list_id": {
|
||||||
"$ref": "../common.json#/properties/access_list_id"
|
"$ref": "../common.json#/properties/access_list_id"
|
||||||
@@ -67,22 +68,28 @@
|
|||||||
"$ref": "../common.json#/properties/block_exploits"
|
"$ref": "../common.json#/properties/block_exploits"
|
||||||
},
|
},
|
||||||
"advanced_config": {
|
"advanced_config": {
|
||||||
"type": "string"
|
"type": "string",
|
||||||
|
"example": ""
|
||||||
},
|
},
|
||||||
"meta": {
|
"meta": {
|
||||||
"type": "object"
|
"type": "object",
|
||||||
|
"example": {
|
||||||
|
"nginx_online": true,
|
||||||
|
"nginx_err": null
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"allow_websocket_upgrade": {
|
"allow_websocket_upgrade": {
|
||||||
"description": "Allow Websocket Upgrade for all paths",
|
"description": "Allow Websocket Upgrade for all paths",
|
||||||
"example": true,
|
"type": "boolean",
|
||||||
"type": "boolean"
|
"example": true
|
||||||
},
|
},
|
||||||
"http2_support": {
|
"http2_support": {
|
||||||
"$ref": "../common.json#/properties/http2_support"
|
"$ref": "../common.json#/properties/http2_support"
|
||||||
},
|
},
|
||||||
"forward_scheme": {
|
"forward_scheme": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"enum": ["http", "https"]
|
"enum": ["http", "https"],
|
||||||
|
"example": "http"
|
||||||
},
|
},
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"$ref": "../common.json#/properties/enabled"
|
"$ref": "../common.json#/properties/enabled"
|
||||||
@@ -118,7 +125,15 @@
|
|||||||
"type": "string"
|
"type": "string"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"example": [
|
||||||
|
{
|
||||||
|
"path": "/app",
|
||||||
|
"forward_scheme": "http",
|
||||||
|
"forward_host": "example.com",
|
||||||
|
"forward_port": 80
|
||||||
}
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"hsts_enabled": {
|
"hsts_enabled": {
|
||||||
"$ref": "../common.json#/properties/hsts_enabled"
|
"$ref": "../common.json#/properties/hsts_enabled"
|
||||||
@@ -129,12 +144,14 @@
|
|||||||
"certificate": {
|
"certificate": {
|
||||||
"oneOf": [
|
"oneOf": [
|
||||||
{
|
{
|
||||||
"type": "null"
|
"type": "null",
|
||||||
|
"example": null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"$ref": "./certificate-object.json"
|
"$ref": "./certificate-object.json"
|
||||||
}
|
}
|
||||||
]
|
],
|
||||||
|
"example": null
|
||||||
},
|
},
|
||||||
"owner": {
|
"owner": {
|
||||||
"$ref": "./user-object.json"
|
"$ref": "./user-object.json"
|
||||||
@@ -142,12 +159,14 @@
|
|||||||
"access_list": {
|
"access_list": {
|
||||||
"oneOf": [
|
"oneOf": [
|
||||||
{
|
{
|
||||||
"type": "null"
|
"type": "null",
|
||||||
|
"example": null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"$ref": "./access-list-object.json"
|
"$ref": "./access-list-object.json"
|
||||||
}
|
}
|
||||||
]
|
],
|
||||||
|
"example": null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,26 @@
|
|||||||
{
|
{
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"description": "Redirection Host object",
|
"description": "Redirection Host object",
|
||||||
"required": ["id", "created_on", "modified_on", "owner_user_id", "domain_names", "forward_http_code", "forward_scheme", "forward_domain_name", "preserve_path", "certificate_id", "ssl_forced", "hsts_enabled", "hsts_subdomains", "http2_support", "block_exploits", "advanced_config", "enabled", "meta"],
|
"required": [
|
||||||
|
"id",
|
||||||
|
"created_on",
|
||||||
|
"modified_on",
|
||||||
|
"owner_user_id",
|
||||||
|
"domain_names",
|
||||||
|
"forward_http_code",
|
||||||
|
"forward_scheme",
|
||||||
|
"forward_domain_name",
|
||||||
|
"preserve_path",
|
||||||
|
"certificate_id",
|
||||||
|
"ssl_forced",
|
||||||
|
"hsts_enabled",
|
||||||
|
"hsts_subdomains",
|
||||||
|
"http2_support",
|
||||||
|
"block_exploits",
|
||||||
|
"advanced_config",
|
||||||
|
"enabled",
|
||||||
|
"meta"
|
||||||
|
],
|
||||||
"additionalProperties": false,
|
"additionalProperties": false,
|
||||||
"properties": {
|
"properties": {
|
||||||
"id": {
|
"id": {
|
||||||
@@ -21,25 +40,30 @@
|
|||||||
},
|
},
|
||||||
"forward_http_code": {
|
"forward_http_code": {
|
||||||
"description": "Redirect HTTP Status Code",
|
"description": "Redirect HTTP Status Code",
|
||||||
"example": 302,
|
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 300,
|
"minimum": 300,
|
||||||
"maximum": 308
|
"maximum": 308,
|
||||||
|
"example": 302
|
||||||
},
|
},
|
||||||
"forward_scheme": {
|
"forward_scheme": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"enum": ["auto", "http", "https"]
|
"enum": [
|
||||||
|
"auto",
|
||||||
|
"http",
|
||||||
|
"https"
|
||||||
|
],
|
||||||
|
"example": "http"
|
||||||
},
|
},
|
||||||
"forward_domain_name": {
|
"forward_domain_name": {
|
||||||
"description": "Domain Name",
|
"description": "Domain Name",
|
||||||
"example": "jc21.com",
|
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"pattern": "^(?:[^.*]+\\.?)+[^.]$"
|
"pattern": "^(?:[^.*]+\\.?)+[^.]$",
|
||||||
|
"example": "jc21.com"
|
||||||
},
|
},
|
||||||
"preserve_path": {
|
"preserve_path": {
|
||||||
"description": "Should the path be preserved",
|
"description": "Should the path be preserved",
|
||||||
"example": true,
|
"type": "boolean",
|
||||||
"type": "boolean"
|
"example": true
|
||||||
},
|
},
|
||||||
"certificate_id": {
|
"certificate_id": {
|
||||||
"$ref": "../common.json#/properties/certificate_id"
|
"$ref": "../common.json#/properties/certificate_id"
|
||||||
@@ -60,13 +84,33 @@
|
|||||||
"$ref": "../common.json#/properties/block_exploits"
|
"$ref": "../common.json#/properties/block_exploits"
|
||||||
},
|
},
|
||||||
"advanced_config": {
|
"advanced_config": {
|
||||||
"type": "string"
|
"type": "string",
|
||||||
|
"example": ""
|
||||||
},
|
},
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"$ref": "../common.json#/properties/enabled"
|
"$ref": "../common.json#/properties/enabled"
|
||||||
},
|
},
|
||||||
"meta": {
|
"meta": {
|
||||||
"type": "object"
|
"type": "object",
|
||||||
|
"example": {
|
||||||
|
"nginx_online": true,
|
||||||
|
"nginx_err": null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"certificate": {
|
||||||
|
"oneOf": [
|
||||||
|
{
|
||||||
|
"type": "null",
|
||||||
|
"example": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$ref": "./certificate-object.json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"example": null
|
||||||
|
},
|
||||||
|
"owner": {
|
||||||
|
"$ref": "./user-object.json"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
{
|
{
|
||||||
"BearerAuth": {
|
"bearerAuth": {
|
||||||
"type": "http",
|
"type": "http",
|
||||||
"scheme": "bearer"
|
"scheme": "bearer",
|
||||||
|
"bearerFormat": "JWT",
|
||||||
|
"description": "JWT Bearer Token authentication"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,19 @@
|
|||||||
{
|
{
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"description": "Stream object",
|
"description": "Stream object",
|
||||||
"required": ["id", "created_on", "modified_on", "owner_user_id", "incoming_port", "forwarding_host", "forwarding_port", "tcp_forwarding", "udp_forwarding", "enabled", "meta"],
|
"required": [
|
||||||
|
"id",
|
||||||
|
"created_on",
|
||||||
|
"modified_on",
|
||||||
|
"owner_user_id",
|
||||||
|
"incoming_port",
|
||||||
|
"forwarding_host",
|
||||||
|
"forwarding_port",
|
||||||
|
"tcp_forwarding",
|
||||||
|
"udp_forwarding",
|
||||||
|
"enabled",
|
||||||
|
"meta"
|
||||||
|
],
|
||||||
"additionalProperties": false,
|
"additionalProperties": false,
|
||||||
"properties": {
|
"properties": {
|
||||||
"id": {
|
"id": {
|
||||||
@@ -19,15 +31,16 @@
|
|||||||
"incoming_port": {
|
"incoming_port": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 1,
|
"minimum": 1,
|
||||||
"maximum": 65535
|
"maximum": 65535,
|
||||||
|
"example": 9090
|
||||||
},
|
},
|
||||||
"forwarding_host": {
|
"forwarding_host": {
|
||||||
"anyOf": [
|
"anyOf": [
|
||||||
{
|
{
|
||||||
"description": "Domain Name",
|
"description": "Domain Name",
|
||||||
"example": "jc21.com",
|
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"pattern": "^(?:[^.*]+\\.?)+[^.]$"
|
"pattern": "^(?:[^.*]+\\.?)+[^.]$",
|
||||||
|
"example": "example.com"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
@@ -37,18 +50,22 @@
|
|||||||
"type": "string",
|
"type": "string",
|
||||||
"format": "ipv6"
|
"format": "ipv6"
|
||||||
}
|
}
|
||||||
]
|
],
|
||||||
|
"example": "example.com"
|
||||||
},
|
},
|
||||||
"forwarding_port": {
|
"forwarding_port": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 1,
|
"minimum": 1,
|
||||||
"maximum": 65535
|
"maximum": 65535,
|
||||||
|
"example": 80
|
||||||
},
|
},
|
||||||
"tcp_forwarding": {
|
"tcp_forwarding": {
|
||||||
"type": "boolean"
|
"type": "boolean",
|
||||||
|
"example": true
|
||||||
},
|
},
|
||||||
"udp_forwarding": {
|
"udp_forwarding": {
|
||||||
"type": "boolean"
|
"type": "boolean",
|
||||||
|
"example": false
|
||||||
},
|
},
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"$ref": "../common.json#/properties/enabled"
|
"$ref": "../common.json#/properties/enabled"
|
||||||
@@ -57,10 +74,8 @@
|
|||||||
"$ref": "../common.json#/properties/certificate_id"
|
"$ref": "../common.json#/properties/certificate_id"
|
||||||
},
|
},
|
||||||
"meta": {
|
"meta": {
|
||||||
"type": "object"
|
"type": "object",
|
||||||
},
|
"example": {}
|
||||||
"owner": {
|
|
||||||
"$ref": "./user-object.json"
|
|
||||||
},
|
},
|
||||||
"certificate": {
|
"certificate": {
|
||||||
"oneOf": [
|
"oneOf": [
|
||||||
@@ -70,7 +85,11 @@
|
|||||||
{
|
{
|
||||||
"$ref": "./certificate-object.json"
|
"$ref": "./certificate-object.json"
|
||||||
}
|
}
|
||||||
]
|
],
|
||||||
|
"example": null
|
||||||
|
},
|
||||||
|
"owner": {
|
||||||
|
"$ref": "./user-object.json"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -77,37 +77,37 @@
|
|||||||
"proxy_hosts": {
|
"proxy_hosts": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "Proxy Hosts access level",
|
"description": "Proxy Hosts access level",
|
||||||
"example": "all",
|
"example": "manage",
|
||||||
"pattern": "^(manage|view|hidden)$"
|
"pattern": "^(manage|view|hidden)$"
|
||||||
},
|
},
|
||||||
"redirection_hosts": {
|
"redirection_hosts": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "Redirection Hosts access level",
|
"description": "Redirection Hosts access level",
|
||||||
"example": "all",
|
"example": "manage",
|
||||||
"pattern": "^(manage|view|hidden)$"
|
"pattern": "^(manage|view|hidden)$"
|
||||||
},
|
},
|
||||||
"dead_hosts": {
|
"dead_hosts": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "Dead Hosts access level",
|
"description": "Dead Hosts access level",
|
||||||
"example": "all",
|
"example": "manage",
|
||||||
"pattern": "^(manage|view|hidden)$"
|
"pattern": "^(manage|view|hidden)$"
|
||||||
},
|
},
|
||||||
"streams": {
|
"streams": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "Streams access level",
|
"description": "Streams access level",
|
||||||
"example": "all",
|
"example": "manage",
|
||||||
"pattern": "^(manage|view|hidden)$"
|
"pattern": "^(manage|view|hidden)$"
|
||||||
},
|
},
|
||||||
"access_lists": {
|
"access_lists": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "Access Lists access level",
|
"description": "Access Lists access level",
|
||||||
"example": "all",
|
"example": "hidden",
|
||||||
"pattern": "^(manage|view|hidden)$"
|
"pattern": "^(manage|view|hidden)$"
|
||||||
},
|
},
|
||||||
"certificates": {
|
"certificates": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "Certificates access level",
|
"description": "Certificates access level",
|
||||||
"example": "all",
|
"example": "view",
|
||||||
"pattern": "^(manage|view|hidden)$"
|
"pattern": "^(manage|view|hidden)$"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"operationId": "getAuditLogs",
|
"operationId": "getAuditLogs",
|
||||||
"summary": "Get Audit Logs",
|
"summary": "Get Audit Logs",
|
||||||
"tags": ["Audit Log"],
|
"tags": ["audit-log"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["audit-log"]
|
"bearerAuth": ["admin"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
|
|||||||
@@ -1,13 +1,11 @@
|
|||||||
{
|
{
|
||||||
"operationId": "getAuditLog",
|
"operationId": "getAuditLog",
|
||||||
"summary": "Get Audit Log Event",
|
"summary": "Get Audit Log Event",
|
||||||
"tags": [
|
"tags": ["audit-log"],
|
||||||
"Audit Log"
|
|
||||||
],
|
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": [
|
"bearerAuth": [
|
||||||
"audit-log"
|
"admin"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -15,6 +13,7 @@
|
|||||||
{
|
{
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"name": "id",
|
"name": "id",
|
||||||
|
"description": "Audit Log Event ID",
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 1
|
"minimum": 1
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"operationId": "health",
|
"operationId": "health",
|
||||||
"summary": "Returns the API health status",
|
"summary": "Returns the API health status",
|
||||||
"tags": ["Public"],
|
"tags": ["public"],
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
"description": "200 response",
|
"description": "200 response",
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
{
|
{
|
||||||
"operationId": "getAccessLists",
|
"operationId": "getAccessLists",
|
||||||
"summary": "Get all access lists",
|
"summary": "Get all access lists",
|
||||||
"tags": ["Access Lists"],
|
"tags": ["access-lists"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["access_lists"]
|
"bearerAuth": [
|
||||||
|
"access_lists.view"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
@@ -14,7 +16,12 @@
|
|||||||
"description": "Expansions",
|
"description": "Expansions",
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"enum": ["owner", "items", "clients", "proxy_hosts"]
|
"enum": [
|
||||||
|
"owner",
|
||||||
|
"items",
|
||||||
|
"clients",
|
||||||
|
"proxy_hosts"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -23,10 +30,7 @@
|
|||||||
"description": "200 response",
|
"description": "200 response",
|
||||||
"content": {
|
"content": {
|
||||||
"application/json": {
|
"application/json": {
|
||||||
"examples": {
|
"example": {
|
||||||
"default": {
|
|
||||||
"value": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
"id": 1,
|
||||||
"created_on": "2024-10-08T22:15:40.000Z",
|
"created_on": "2024-10-08T22:15:40.000Z",
|
||||||
"modified_on": "2024-10-08T22:15:40.000Z",
|
"modified_on": "2024-10-08T22:15:40.000Z",
|
||||||
@@ -36,9 +40,6 @@
|
|||||||
"satisfy_any": true,
|
"satisfy_any": true,
|
||||||
"pass_auth": false,
|
"pass_auth": false,
|
||||||
"proxy_host_count": 0
|
"proxy_host_count": 0
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"schema": {
|
"schema": {
|
||||||
"$ref": "../../../components/access-list-object.json"
|
"$ref": "../../../components/access-list-object.json"
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
{
|
{
|
||||||
"operationId": "deleteAccessList",
|
"operationId": "deleteAccessList",
|
||||||
"summary": "Delete a Access List",
|
"summary": "Delete a Access List",
|
||||||
"tags": ["Access Lists"],
|
"tags": ["access-lists"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["access_lists"]
|
"bearerAuth": ["access_lists.manage"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"name": "listID",
|
"name": "listID",
|
||||||
|
"description": "Access List ID",
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 1
|
"minimum": 1
|
||||||
|
|||||||
@@ -1,16 +1,21 @@
|
|||||||
{
|
{
|
||||||
"operationId": "getAccessList",
|
"operationId": "getAccessList",
|
||||||
"summary": "Get a access List",
|
"summary": "Get a access List",
|
||||||
"tags": ["Access Lists"],
|
"tags": [
|
||||||
|
"access-lists"
|
||||||
|
],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["access_lists"]
|
"bearerAuth": [
|
||||||
|
"access_lists.view"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"name": "listID",
|
"name": "listID",
|
||||||
|
"description": "Access List ID",
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 1
|
"minimum": 1
|
||||||
@@ -28,14 +33,14 @@
|
|||||||
"default": {
|
"default": {
|
||||||
"value": {
|
"value": {
|
||||||
"id": 1,
|
"id": 1,
|
||||||
"created_on": "2020-01-30T09:36:08.000Z",
|
"created_on": "2025-10-28T04:06:55.000Z",
|
||||||
"modified_on": "2020-01-30T09:41:04.000Z",
|
"modified_on": "2025-10-29T22:48:20.000Z",
|
||||||
"is_disabled": false,
|
"owner_user_id": 1,
|
||||||
"email": "jc@jc21.com",
|
"name": "My Access List",
|
||||||
"name": "Jamie Curnow",
|
"meta": {},
|
||||||
"nickname": "James",
|
"satisfy_any": false,
|
||||||
"avatar": "//www.gravatar.com/avatar/6193176330f8d38747f038c170ddb193?default=mm",
|
"pass_auth": false,
|
||||||
"roles": ["admin"]
|
"proxy_host_count": 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
{
|
{
|
||||||
"operationId": "updateAccessList",
|
"operationId": "updateAccessList",
|
||||||
"summary": "Update a Access List",
|
"summary": "Update a Access List",
|
||||||
"tags": ["Access Lists"],
|
"tags": ["access-lists"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["access_lists"]
|
"bearerAuth": ["access_lists.manage"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"name": "listID",
|
"name": "listID",
|
||||||
|
"description": "Access List ID",
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 1
|
"minimum": 1
|
||||||
@@ -39,50 +40,29 @@
|
|||||||
"$ref": "../../../../components/access-list-object.json#/properties/pass_auth"
|
"$ref": "../../../../components/access-list-object.json#/properties/pass_auth"
|
||||||
},
|
},
|
||||||
"items": {
|
"items": {
|
||||||
"type": "array",
|
"$ref": "../../../../common.json#/properties/access_items"
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"additionalProperties": false,
|
|
||||||
"properties": {
|
|
||||||
"username": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1
|
|
||||||
},
|
|
||||||
"password": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"clients": {
|
"clients": {
|
||||||
"type": "array",
|
"$ref": "../../../../common.json#/properties/access_clients"
|
||||||
"items": {
|
}
|
||||||
"type": "object",
|
}
|
||||||
"additionalProperties": false,
|
|
||||||
"properties": {
|
|
||||||
"address": {
|
|
||||||
"oneOf": [
|
|
||||||
{
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^([0-9]{1,3}\\.){3}[0-9]{1,3}(/([0-9]|[1-2][0-9]|3[0-2]))?$"
|
|
||||||
},
|
},
|
||||||
|
"example": {
|
||||||
|
"name": "My Access List",
|
||||||
|
"satisfy_any": true,
|
||||||
|
"pass_auth": false,
|
||||||
|
"items": [
|
||||||
{
|
{
|
||||||
"type": "string",
|
"username": "admin2",
|
||||||
"pattern": "^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8]))?$"
|
"password": "pass2"
|
||||||
},
|
}
|
||||||
|
],
|
||||||
|
"clients": [
|
||||||
{
|
{
|
||||||
"type": "string",
|
"directive": "allow",
|
||||||
"pattern": "^all$"
|
"address": "192.168.0.0/24"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
|
||||||
"directive": {
|
|
||||||
"$ref": "../../../../components/access-list-object.json#/properties/directive"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -108,7 +88,6 @@
|
|||||||
"id": 1,
|
"id": 1,
|
||||||
"created_on": "2024-10-07T22:43:55.000Z",
|
"created_on": "2024-10-07T22:43:55.000Z",
|
||||||
"modified_on": "2024-10-08T12:52:54.000Z",
|
"modified_on": "2024-10-08T12:52:54.000Z",
|
||||||
"is_deleted": false,
|
|
||||||
"is_disabled": false,
|
"is_disabled": false,
|
||||||
"email": "admin@example.com",
|
"email": "admin@example.com",
|
||||||
"name": "Administrator",
|
"name": "Administrator",
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
{
|
{
|
||||||
"operationId": "createAccessList",
|
"operationId": "createAccessList",
|
||||||
"summary": "Create a Access List",
|
"summary": "Create a Access List",
|
||||||
"tags": ["Access Lists"],
|
"tags": ["access-lists"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["access_lists"]
|
"bearerAuth": [
|
||||||
|
"access_lists.manage"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"requestBody": {
|
"requestBody": {
|
||||||
@@ -15,7 +17,9 @@
|
|||||||
"schema": {
|
"schema": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"additionalProperties": false,
|
"additionalProperties": false,
|
||||||
"required": ["name"],
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
"properties": {
|
"properties": {
|
||||||
"name": {
|
"name": {
|
||||||
"$ref": "../../../components/access-list-object.json#/properties/name"
|
"$ref": "../../../components/access-list-object.json#/properties/name"
|
||||||
@@ -27,54 +31,29 @@
|
|||||||
"$ref": "../../../components/access-list-object.json#/properties/pass_auth"
|
"$ref": "../../../components/access-list-object.json#/properties/pass_auth"
|
||||||
},
|
},
|
||||||
"items": {
|
"items": {
|
||||||
"type": "array",
|
"$ref": "../../../common.json#/properties/access_items"
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"additionalProperties": false,
|
|
||||||
"properties": {
|
|
||||||
"username": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1
|
|
||||||
},
|
|
||||||
"password": {
|
|
||||||
"type": "string",
|
|
||||||
"minLength": 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"clients": {
|
"clients": {
|
||||||
"type": "array",
|
"$ref": "../../../common.json#/properties/access_clients"
|
||||||
"items": {
|
}
|
||||||
"type": "object",
|
}
|
||||||
"additionalProperties": false,
|
|
||||||
"properties": {
|
|
||||||
"address": {
|
|
||||||
"oneOf": [
|
|
||||||
{
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^([0-9]{1,3}\\.){3}[0-9]{1,3}(/([0-9]|[1-2][0-9]|3[0-2]))?$"
|
|
||||||
},
|
},
|
||||||
|
"example": {
|
||||||
|
"name": "My Access List",
|
||||||
|
"satisfy_any": true,
|
||||||
|
"pass_auth": false,
|
||||||
|
"items": [
|
||||||
{
|
{
|
||||||
"type": "string",
|
"username": "admin",
|
||||||
"pattern": "^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8]))?$"
|
"password": "pass"
|
||||||
},
|
}
|
||||||
|
],
|
||||||
|
"clients": [
|
||||||
{
|
{
|
||||||
"type": "string",
|
"directive": "allow",
|
||||||
"pattern": "^all$"
|
"address": "192.168.0.0/24"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
|
||||||
"directive": {
|
|
||||||
"$ref": "../../../components/access-list-object.json#/properties/directive"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"meta": {
|
|
||||||
"$ref": "../../../components/access-list-object.json#/properties/meta"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -100,13 +79,14 @@
|
|||||||
"id": 1,
|
"id": 1,
|
||||||
"created_on": "2024-10-07T22:43:55.000Z",
|
"created_on": "2024-10-07T22:43:55.000Z",
|
||||||
"modified_on": "2024-10-08T12:52:54.000Z",
|
"modified_on": "2024-10-08T12:52:54.000Z",
|
||||||
"is_deleted": false,
|
|
||||||
"is_disabled": false,
|
"is_disabled": false,
|
||||||
"email": "admin@example.com",
|
"email": "admin@example.com",
|
||||||
"name": "Administrator",
|
"name": "Administrator",
|
||||||
"nickname": "some guy",
|
"nickname": "some guy",
|
||||||
"avatar": "//www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?default=mm",
|
"avatar": "//www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?default=mm",
|
||||||
"roles": ["admin"]
|
"roles": [
|
||||||
|
"admin"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"items": [
|
"items": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
{
|
{
|
||||||
"operationId": "deleteCertificate",
|
"operationId": "deleteCertificate",
|
||||||
"summary": "Delete a Certificate",
|
"summary": "Delete a Certificate",
|
||||||
"tags": ["Certificates"],
|
"tags": ["certificates"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["certificates"]
|
"bearerAuth": ["certificates.manage"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"name": "certID",
|
"name": "certID",
|
||||||
|
"description": "Certificate ID",
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 1
|
"minimum": 1
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
{
|
{
|
||||||
"operationId": "downloadCertificate",
|
"operationId": "downloadCertificate",
|
||||||
"summary": "Downloads a Certificate",
|
"summary": "Downloads a Certificate",
|
||||||
"tags": ["Certificates"],
|
"tags": ["certificates"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["certificates"]
|
"bearerAuth": ["certificates.manage"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"name": "certID",
|
"name": "certID",
|
||||||
|
"description": "Certificate ID",
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 1
|
"minimum": 1
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
{
|
{
|
||||||
"operationId": "getCertificate",
|
"operationId": "getCertificate",
|
||||||
"summary": "Get a Certificate",
|
"summary": "Get a Certificate",
|
||||||
"tags": ["Certificates"],
|
"tags": ["certificates"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["certificates"]
|
"bearerAuth": ["certificates.view"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"name": "certID",
|
"name": "certID",
|
||||||
|
"description": "Certificate ID",
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 1
|
"minimum": 1
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
{
|
{
|
||||||
"operationId": "renewCertificate",
|
"operationId": "renewCertificate",
|
||||||
"summary": "Renews a Certificate",
|
"summary": "Renews a Certificate",
|
||||||
"tags": ["Certificates"],
|
"tags": ["certificates"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["certificates"]
|
"bearerAuth": ["certificates.manage"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"name": "certID",
|
"name": "certID",
|
||||||
|
"description": "Certificate ID",
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 1
|
"minimum": 1
|
||||||
@@ -32,7 +33,6 @@
|
|||||||
"id": 4,
|
"id": 4,
|
||||||
"created_on": "2024-10-09T05:31:58.000Z",
|
"created_on": "2024-10-09T05:31:58.000Z",
|
||||||
"owner_user_id": 1,
|
"owner_user_id": 1,
|
||||||
"is_deleted": false,
|
|
||||||
"provider": "letsencrypt",
|
"provider": "letsencrypt",
|
||||||
"nice_name": "My Test Cert",
|
"nice_name": "My Test Cert",
|
||||||
"domain_names": ["test.jc21.supernerd.pro"],
|
"domain_names": ["test.jc21.supernerd.pro"],
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
{
|
{
|
||||||
"operationId": "uploadCertificate",
|
"operationId": "uploadCertificate",
|
||||||
"summary": "Uploads a custom Certificate",
|
"summary": "Uploads a custom Certificate",
|
||||||
"tags": ["Certificates"],
|
"tags": ["certificates"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["certificates"]
|
"bearerAuth": ["certificates.manage"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"name": "certID",
|
"name": "certID",
|
||||||
|
"description": "Certificate ID",
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 1
|
"minimum": 1
|
||||||
@@ -20,28 +21,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"requestBody": {
|
"requestBody": {
|
||||||
"description": "Certificate Files",
|
"$ref": "../../../../../common.json#/properties/certificate_files"
|
||||||
"required": true,
|
|
||||||
"content": {
|
|
||||||
"multipart/form-data": {
|
|
||||||
"schema": {
|
|
||||||
"type": "object",
|
|
||||||
"additionalProperties": false,
|
|
||||||
"required": ["certificate", "certificate_key"],
|
|
||||||
"properties": {
|
|
||||||
"certificate": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"certificate_key": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"intermediate_certificate": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
@@ -63,15 +43,18 @@
|
|||||||
"properties": {
|
"properties": {
|
||||||
"certificate": {
|
"certificate": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"minLength": 1
|
"minLength": 1,
|
||||||
|
"example": "-----BEGIN CERTIFICATE-----\nMIID...-----END CERTIFICATE-----"
|
||||||
},
|
},
|
||||||
"certificate_key": {
|
"certificate_key": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"minLength": 1
|
"minLength": 1,
|
||||||
|
"example": "-----BEGIN CERTIFICATE-----\nMIID...-----END CERTIFICATE-----"
|
||||||
},
|
},
|
||||||
"intermediate_certificate": {
|
"intermediate_certificate": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"minLength": 1
|
"minLength": 1,
|
||||||
|
"example": "-----BEGIN CERTIFICATE-----\nMIID...-----END CERTIFICATE-----"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,10 @@
|
|||||||
{
|
{
|
||||||
"operationId": "getDNSProviders",
|
"operationId": "getDNSProviders",
|
||||||
"summary": "Get DNS Providers for Certificates",
|
"summary": "Get DNS Providers for Certificates",
|
||||||
"tags": [
|
"tags": ["certificates"],
|
||||||
"Certificates"
|
|
||||||
],
|
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": [
|
"bearerAuth": ["certificates.view"]
|
||||||
"certificates"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"operationId": "getCertificates",
|
"operationId": "getCertificates",
|
||||||
"summary": "Get all certificates",
|
"summary": "Get all certificates",
|
||||||
"tags": ["Certificates"],
|
"tags": ["certificates"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["certificates"]
|
"bearerAuth": ["certificates.view"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"operationId": "createCertificate",
|
"operationId": "createCertificate",
|
||||||
"summary": "Create a Certificate",
|
"summary": "Create a Certificate",
|
||||||
"tags": ["Certificates"],
|
"tags": ["certificates"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["certificates"]
|
"bearerAuth": ["certificates.manage"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"requestBody": {
|
"requestBody": {
|
||||||
@@ -30,6 +30,13 @@
|
|||||||
"$ref": "../../../components/certificate-object.json#/properties/meta"
|
"$ref": "../../../components/certificate-object.json#/properties/meta"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"example": {
|
||||||
|
"provider": "letsencrypt",
|
||||||
|
"domain_names": ["test.example.com"],
|
||||||
|
"meta": {
|
||||||
|
"dns_challenge": false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -47,7 +54,6 @@
|
|||||||
"id": 5,
|
"id": 5,
|
||||||
"created_on": "2024-10-09 05:28:35",
|
"created_on": "2024-10-09 05:28:35",
|
||||||
"owner_user_id": 1,
|
"owner_user_id": 1,
|
||||||
"is_deleted": false,
|
|
||||||
"provider": "letsencrypt",
|
"provider": "letsencrypt",
|
||||||
"nice_name": "test.example.com",
|
"nice_name": "test.example.com",
|
||||||
"domain_names": ["test.example.com"],
|
"domain_names": ["test.example.com"],
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"operationId": "testHttpReach",
|
"operationId": "testHttpReach",
|
||||||
"summary": "Test HTTP Reachability",
|
"summary": "Test HTTP Reachability",
|
||||||
"tags": ["Certificates"],
|
"tags": ["certificates"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["certificates"]
|
"bearerAuth": ["certificates.view"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"requestBody": {
|
"requestBody": {
|
||||||
|
|||||||
@@ -1,35 +1,14 @@
|
|||||||
{
|
{
|
||||||
"operationId": "validateCertificates",
|
"operationId": "validateCertificates",
|
||||||
"summary": "Validates given Custom Certificates",
|
"summary": "Validates given Custom Certificates",
|
||||||
"tags": ["Certificates"],
|
"tags": ["certificates"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["certificates"]
|
"bearerAuth": ["certificates.manage"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"requestBody": {
|
"requestBody": {
|
||||||
"description": "Certificate Files",
|
"$ref": "../../../../common.json#/properties/certificate_files"
|
||||||
"required": true,
|
|
||||||
"content": {
|
|
||||||
"multipart/form-data": {
|
|
||||||
"schema": {
|
|
||||||
"type": "object",
|
|
||||||
"additionalProperties": false,
|
|
||||||
"required": ["certificate", "certificate_key"],
|
|
||||||
"properties": {
|
|
||||||
"certificate": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"certificate_key": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"intermediate_certificate": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
@@ -62,10 +41,12 @@
|
|||||||
"required": ["cn", "issuer", "dates"],
|
"required": ["cn", "issuer", "dates"],
|
||||||
"properties": {
|
"properties": {
|
||||||
"cn": {
|
"cn": {
|
||||||
"type": "string"
|
"type": "string",
|
||||||
|
"example": "example.com"
|
||||||
},
|
},
|
||||||
"issuer": {
|
"issuer": {
|
||||||
"type": "string"
|
"type": "string",
|
||||||
|
"example": "C = US, O = Let's Encrypt, CN = E5"
|
||||||
},
|
},
|
||||||
"dates": {
|
"dates": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
@@ -78,12 +59,17 @@
|
|||||||
"to": {
|
"to": {
|
||||||
"type": "integer"
|
"type": "integer"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"example": {
|
||||||
|
"from": 1728448218,
|
||||||
|
"to": 1736224217
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"certificate_key": {
|
"certificate_key": {
|
||||||
"type": "boolean"
|
"type": "boolean",
|
||||||
|
"example": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"operationId": "getDeadHosts",
|
"operationId": "getDeadHosts",
|
||||||
"summary": "Get all 404 hosts",
|
"summary": "Get all 404 hosts",
|
||||||
"tags": ["404 Hosts"],
|
"tags": ["404-hosts"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["dead_hosts"]
|
"bearerAuth": ["dead_hosts.view"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
{
|
{
|
||||||
"operationId": "deleteDeadHost",
|
"operationId": "deleteDeadHost",
|
||||||
"summary": "Delete a 404 Host",
|
"summary": "Delete a 404 Host",
|
||||||
"tags": ["404 Hosts"],
|
"tags": ["404-hosts"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["dead_hosts"]
|
"bearerAuth": ["dead_hosts.manage"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"name": "hostID",
|
"name": "hostID",
|
||||||
|
"description": "The ID of the 404 Host",
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 1
|
"minimum": 1
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
{
|
{
|
||||||
"operationId": "disableDeadHost",
|
"operationId": "disableDeadHost",
|
||||||
"summary": "Disable a 404 Host",
|
"summary": "Disable a 404 Host",
|
||||||
"tags": ["404 Hosts"],
|
"tags": ["404-hosts"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["dead_hosts"]
|
"bearerAuth": ["dead_hosts.manage"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"name": "hostID",
|
"name": "hostID",
|
||||||
|
"description": "The ID of the 404 Host",
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 1
|
"minimum": 1
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
{
|
{
|
||||||
"operationId": "enableDeadHost",
|
"operationId": "enableDeadHost",
|
||||||
"summary": "Enable a 404 Host",
|
"summary": "Enable a 404 Host",
|
||||||
"tags": ["404 Hosts"],
|
"tags": ["404-hosts"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["dead_hosts"]
|
"bearerAuth": ["dead_hosts.manage"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"name": "hostID",
|
"name": "hostID",
|
||||||
|
"description": "The ID of the 404 Host",
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 1
|
"minimum": 1
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
{
|
{
|
||||||
"operationId": "getDeadHost",
|
"operationId": "getDeadHost",
|
||||||
"summary": "Get a 404 Host",
|
"summary": "Get a 404 Host",
|
||||||
"tags": ["404 Hosts"],
|
"tags": ["404-hosts"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["dead_hosts"]
|
"bearerAuth": ["dead_hosts.view"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"name": "hostID",
|
"name": "hostID",
|
||||||
|
"description": "The ID of the 404 Host",
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 1
|
"minimum": 1
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
{
|
{
|
||||||
"operationId": "updateDeadHost",
|
"operationId": "updateDeadHost",
|
||||||
"summary": "Update a 404 Host",
|
"summary": "Update a 404 Host",
|
||||||
"tags": ["404 Hosts"],
|
"tags": ["404-hosts"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["dead_hosts"]
|
"bearerAuth": ["dead_hosts.manage"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"name": "hostID",
|
"name": "hostID",
|
||||||
|
"description": "The ID of the 404 Host",
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 1
|
"minimum": 1
|
||||||
@@ -86,7 +87,6 @@
|
|||||||
"id": 1,
|
"id": 1,
|
||||||
"created_on": "2024-10-09T00:59:56.000Z",
|
"created_on": "2024-10-09T00:59:56.000Z",
|
||||||
"modified_on": "2024-10-09T00:59:56.000Z",
|
"modified_on": "2024-10-09T00:59:56.000Z",
|
||||||
"is_deleted": false,
|
|
||||||
"is_disabled": false,
|
"is_disabled": false,
|
||||||
"email": "admin@example.com",
|
"email": "admin@example.com",
|
||||||
"name": "Administrator",
|
"name": "Administrator",
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
{
|
{
|
||||||
"operationId": "create404Host",
|
"operationId": "create404Host",
|
||||||
"summary": "Create a 404 Host",
|
"summary": "Create a 404 Host",
|
||||||
"tags": ["404 Hosts"],
|
"tags": ["404-hosts"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["dead_hosts"]
|
"bearerAuth": [
|
||||||
|
"dead_hosts.manage"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"requestBody": {
|
"requestBody": {
|
||||||
@@ -15,7 +17,9 @@
|
|||||||
"schema": {
|
"schema": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"additionalProperties": false,
|
"additionalProperties": false,
|
||||||
"required": ["domain_names"],
|
"required": [
|
||||||
|
"domain_names"
|
||||||
|
],
|
||||||
"properties": {
|
"properties": {
|
||||||
"domain_names": {
|
"domain_names": {
|
||||||
"$ref": "../../../components/dead-host-object.json#/properties/domain_names"
|
"$ref": "../../../components/dead-host-object.json#/properties/domain_names"
|
||||||
@@ -42,6 +46,18 @@
|
|||||||
"$ref": "../../../components/dead-host-object.json#/properties/meta"
|
"$ref": "../../../components/dead-host-object.json#/properties/meta"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"example": {
|
||||||
|
"domain_names": [
|
||||||
|
"test.example.com"
|
||||||
|
],
|
||||||
|
"certificate_id": 0,
|
||||||
|
"ssl_forced": false,
|
||||||
|
"advanced_config": "",
|
||||||
|
"http2_support": false,
|
||||||
|
"hsts_enabled": false,
|
||||||
|
"hsts_subdomains": false,
|
||||||
|
"meta": {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -58,7 +74,9 @@
|
|||||||
"created_on": "2024-10-09T01:38:52.000Z",
|
"created_on": "2024-10-09T01:38:52.000Z",
|
||||||
"modified_on": "2024-10-09T01:38:52.000Z",
|
"modified_on": "2024-10-09T01:38:52.000Z",
|
||||||
"owner_user_id": 1,
|
"owner_user_id": 1,
|
||||||
"domain_names": ["test.example.com"],
|
"domain_names": [
|
||||||
|
"test.example.com"
|
||||||
|
],
|
||||||
"certificate_id": 0,
|
"certificate_id": 0,
|
||||||
"ssl_forced": false,
|
"ssl_forced": false,
|
||||||
"advanced_config": "",
|
"advanced_config": "",
|
||||||
@@ -72,13 +90,14 @@
|
|||||||
"id": 1,
|
"id": 1,
|
||||||
"created_on": "2024-10-09T00:59:56.000Z",
|
"created_on": "2024-10-09T00:59:56.000Z",
|
||||||
"modified_on": "2024-10-09T00:59:56.000Z",
|
"modified_on": "2024-10-09T00:59:56.000Z",
|
||||||
"is_deleted": false,
|
|
||||||
"is_disabled": false,
|
"is_disabled": false,
|
||||||
"email": "admin@example.com",
|
"email": "admin@example.com",
|
||||||
"name": "Administrator",
|
"name": "Administrator",
|
||||||
"nickname": "Admin",
|
"nickname": "Admin",
|
||||||
"avatar": "",
|
"avatar": "",
|
||||||
"roles": ["admin"]
|
"roles": [
|
||||||
|
"admin"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
{
|
{
|
||||||
"operationId": "getProxyHosts",
|
"operationId": "getProxyHosts",
|
||||||
"summary": "Get all proxy hosts",
|
"summary": "Get all proxy hosts",
|
||||||
"tags": ["Proxy Hosts"],
|
"tags": ["proxy-hosts"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["proxy_hosts"]
|
"bearerAuth": [
|
||||||
|
"proxy_hosts.view"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
@@ -14,7 +16,11 @@
|
|||||||
"description": "Expansions",
|
"description": "Expansions",
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"enum": ["access_list", "owner", "certificate"]
|
"enum": [
|
||||||
|
"access_list",
|
||||||
|
"owner",
|
||||||
|
"certificate"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -28,14 +34,16 @@
|
|||||||
"value": [
|
"value": [
|
||||||
{
|
{
|
||||||
"id": 1,
|
"id": 1,
|
||||||
"created_on": "2024-10-08T23:23:03.000Z",
|
"created_on": "2025-10-28T01:10:26.000Z",
|
||||||
"modified_on": "2024-10-08T23:23:04.000Z",
|
"modified_on": "2025-10-28T04:07:16.000Z",
|
||||||
"owner_user_id": 1,
|
"owner_user_id": 1,
|
||||||
"domain_names": ["test.example.com"],
|
"domain_names": [
|
||||||
|
"test.jc21com"
|
||||||
|
],
|
||||||
"forward_host": "127.0.0.1",
|
"forward_host": "127.0.0.1",
|
||||||
"forward_port": 8989,
|
"forward_port": 8081,
|
||||||
"access_list_id": 0,
|
"access_list_id": 1,
|
||||||
"certificate_id": 0,
|
"certificate_id": 1,
|
||||||
"ssl_forced": false,
|
"ssl_forced": false,
|
||||||
"caching_enabled": false,
|
"caching_enabled": false,
|
||||||
"block_exploits": false,
|
"block_exploits": false,
|
||||||
@@ -48,7 +56,7 @@
|
|||||||
"http2_support": false,
|
"http2_support": false,
|
||||||
"forward_scheme": "http",
|
"forward_scheme": "http",
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"locations": null,
|
"locations": [],
|
||||||
"hsts_enabled": false,
|
"hsts_enabled": false,
|
||||||
"hsts_subdomains": false
|
"hsts_subdomains": false
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
{
|
{
|
||||||
"operationId": "deleteProxyHost",
|
"operationId": "deleteProxyHost",
|
||||||
"summary": "Delete a Proxy Host",
|
"summary": "Delete a Proxy Host",
|
||||||
"tags": ["Proxy Hosts"],
|
"tags": ["proxy-hosts"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["proxy_hosts"]
|
"bearerAuth": ["proxy_hosts.manage"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"name": "hostID",
|
"name": "hostID",
|
||||||
|
"description": "The ID of the Proxy Host",
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 1
|
"minimum": 1
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
{
|
{
|
||||||
"operationId": "disableProxyHost",
|
"operationId": "disableProxyHost",
|
||||||
"summary": "Disable a Proxy Host",
|
"summary": "Disable a Proxy Host",
|
||||||
"tags": ["Proxy Hosts"],
|
"tags": ["proxy-hosts"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["proxy_hosts"]
|
"bearerAuth": ["proxy_hosts.manage"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"name": "hostID",
|
"name": "hostID",
|
||||||
|
"description": "The ID of the Proxy Host",
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 1
|
"minimum": 1
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
{
|
{
|
||||||
"operationId": "enableProxyHost",
|
"operationId": "enableProxyHost",
|
||||||
"summary": "Enable a Proxy Host",
|
"summary": "Enable a Proxy Host",
|
||||||
"tags": ["Proxy Hosts"],
|
"tags": ["proxy-hosts"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["proxy_hosts"]
|
"bearerAuth": ["proxy_hosts.manage"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"name": "hostID",
|
"name": "hostID",
|
||||||
|
"description": "The ID of the Proxy Host",
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 1
|
"minimum": 1
|
||||||
|
|||||||
@@ -1,16 +1,19 @@
|
|||||||
{
|
{
|
||||||
"operationId": "getProxyHost",
|
"operationId": "getProxyHost",
|
||||||
"summary": "Get a Proxy Host",
|
"summary": "Get a Proxy Host",
|
||||||
"tags": ["Proxy Hosts"],
|
"tags": ["proxy-hosts"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["proxy_hosts"]
|
"bearerAuth": [
|
||||||
|
"proxy_hosts.view"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"name": "hostID",
|
"name": "hostID",
|
||||||
|
"description": "The ID of the Proxy Host",
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 1
|
"minimum": 1
|
||||||
@@ -27,13 +30,15 @@
|
|||||||
"examples": {
|
"examples": {
|
||||||
"default": {
|
"default": {
|
||||||
"value": {
|
"value": {
|
||||||
"id": 1,
|
"id": 3,
|
||||||
"created_on": "2024-10-08T23:23:03.000Z",
|
"created_on": "2025-10-30T01:12:05.000Z",
|
||||||
"modified_on": "2024-10-08T23:26:38.000Z",
|
"modified_on": "2025-10-30T01:12:05.000Z",
|
||||||
"owner_user_id": 1,
|
"owner_user_id": 1,
|
||||||
"domain_names": ["test.example.com"],
|
"domain_names": [
|
||||||
"forward_host": "192.168.0.10",
|
"test.example.com"
|
||||||
"forward_port": 8989,
|
],
|
||||||
|
"forward_host": "127.0.0.1",
|
||||||
|
"forward_port": 8080,
|
||||||
"access_list_id": 0,
|
"access_list_id": 0,
|
||||||
"certificate_id": 0,
|
"certificate_id": 0,
|
||||||
"ssl_forced": false,
|
"ssl_forced": false,
|
||||||
@@ -48,9 +53,22 @@
|
|||||||
"http2_support": false,
|
"http2_support": false,
|
||||||
"forward_scheme": "http",
|
"forward_scheme": "http",
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"locations": null,
|
"locations": [],
|
||||||
"hsts_enabled": false,
|
"hsts_enabled": false,
|
||||||
"hsts_subdomains": false
|
"hsts_subdomains": false,
|
||||||
|
"owner": {
|
||||||
|
"id": 1,
|
||||||
|
"created_on": "2025-10-28T00:50:24.000Z",
|
||||||
|
"modified_on": "2025-10-28T00:50:24.000Z",
|
||||||
|
"is_disabled": false,
|
||||||
|
"email": "jc@jc21.com",
|
||||||
|
"name": "jamiec",
|
||||||
|
"nickname": "jamiec",
|
||||||
|
"avatar": "//www.gravatar.com/avatar/6193176330f8d38747f038c170ddb193?default=mm",
|
||||||
|
"roles": [
|
||||||
|
"admin"
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,16 +1,19 @@
|
|||||||
{
|
{
|
||||||
"operationId": "updateProxyHost",
|
"operationId": "updateProxyHost",
|
||||||
"summary": "Update a Proxy Host",
|
"summary": "Update a Proxy Host",
|
||||||
"tags": ["Proxy Hosts"],
|
"tags": ["proxy-hosts"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["proxy_hosts"]
|
"bearerAuth": [
|
||||||
|
"proxy_hosts.manage"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"name": "hostID",
|
"name": "hostID",
|
||||||
|
"description": "The ID of the Proxy Host",
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 1
|
"minimum": 1
|
||||||
@@ -93,13 +96,15 @@
|
|||||||
"examples": {
|
"examples": {
|
||||||
"default": {
|
"default": {
|
||||||
"value": {
|
"value": {
|
||||||
"id": 1,
|
"id": 3,
|
||||||
"created_on": "2024-10-08T23:23:03.000Z",
|
"created_on": "2025-10-30T01:12:05.000Z",
|
||||||
"modified_on": "2024-10-08T23:26:37.000Z",
|
"modified_on": "2025-10-30T01:17:06.000Z",
|
||||||
"owner_user_id": 1,
|
"owner_user_id": 1,
|
||||||
"domain_names": ["test.example.com"],
|
"domain_names": [
|
||||||
"forward_host": "192.168.0.10",
|
"test.example.com"
|
||||||
"forward_port": 8989,
|
],
|
||||||
|
"forward_host": "127.0.0.1",
|
||||||
|
"forward_port": 8080,
|
||||||
"access_list_id": 0,
|
"access_list_id": 0,
|
||||||
"certificate_id": 0,
|
"certificate_id": 0,
|
||||||
"ssl_forced": false,
|
"ssl_forced": false,
|
||||||
@@ -114,19 +119,21 @@
|
|||||||
"http2_support": false,
|
"http2_support": false,
|
||||||
"forward_scheme": "http",
|
"forward_scheme": "http",
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
|
"locations": [],
|
||||||
"hsts_enabled": false,
|
"hsts_enabled": false,
|
||||||
"hsts_subdomains": false,
|
"hsts_subdomains": false,
|
||||||
"owner": {
|
"owner": {
|
||||||
"id": 1,
|
"id": 1,
|
||||||
"created_on": "2024-10-07T22:43:55.000Z",
|
"created_on": "2025-10-28T00:50:24.000Z",
|
||||||
"modified_on": "2024-10-08T12:52:54.000Z",
|
"modified_on": "2025-10-28T00:50:24.000Z",
|
||||||
"is_deleted": false,
|
|
||||||
"is_disabled": false,
|
"is_disabled": false,
|
||||||
"email": "admin@example.com",
|
"email": "jc@jc21.com",
|
||||||
"name": "Administrator",
|
"name": "jamiec",
|
||||||
"nickname": "some guy",
|
"nickname": "jamiec",
|
||||||
"avatar": "//www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?default=mm",
|
"avatar": "//www.gravatar.com/avatar/6193176330f8d38747f038c170ddb193?default=mm",
|
||||||
"roles": ["admin"]
|
"roles": [
|
||||||
|
"admin"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"certificate": null,
|
"certificate": null,
|
||||||
"access_list": null
|
"access_list": null
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
{
|
{
|
||||||
"operationId": "createProxyHost",
|
"operationId": "createProxyHost",
|
||||||
"summary": "Create a Proxy Host",
|
"summary": "Create a Proxy Host",
|
||||||
"tags": ["Proxy Hosts"],
|
"tags": ["proxy-hosts"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["proxy_hosts"]
|
"bearerAuth": [
|
||||||
|
"proxy_hosts.manage"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"requestBody": {
|
"requestBody": {
|
||||||
@@ -15,7 +17,12 @@
|
|||||||
"schema": {
|
"schema": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"additionalProperties": false,
|
"additionalProperties": false,
|
||||||
"required": ["domain_names", "forward_scheme", "forward_host", "forward_port"],
|
"required": [
|
||||||
|
"domain_names",
|
||||||
|
"forward_scheme",
|
||||||
|
"forward_host",
|
||||||
|
"forward_port"
|
||||||
|
],
|
||||||
"properties": {
|
"properties": {
|
||||||
"domain_names": {
|
"domain_names": {
|
||||||
"$ref": "../../../components/proxy-host-object.json#/properties/domain_names"
|
"$ref": "../../../components/proxy-host-object.json#/properties/domain_names"
|
||||||
@@ -69,6 +76,14 @@
|
|||||||
"$ref": "../../../components/proxy-host-object.json#/properties/locations"
|
"$ref": "../../../components/proxy-host-object.json#/properties/locations"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"example": {
|
||||||
|
"domain_names": [
|
||||||
|
"test.example.com"
|
||||||
|
],
|
||||||
|
"forward_scheme": "http",
|
||||||
|
"forward_host": "127.0.0.1",
|
||||||
|
"forward_port": 8080
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -81,13 +96,15 @@
|
|||||||
"examples": {
|
"examples": {
|
||||||
"default": {
|
"default": {
|
||||||
"value": {
|
"value": {
|
||||||
"id": 1,
|
"id": 3,
|
||||||
"created_on": "2024-10-08T23:23:03.000Z",
|
"created_on": "2025-10-30T01:12:05.000Z",
|
||||||
"modified_on": "2024-10-08T23:23:03.000Z",
|
"modified_on": "2025-10-30T01:12:05.000Z",
|
||||||
"owner_user_id": 1,
|
"owner_user_id": 1,
|
||||||
"domain_names": ["test.example.com"],
|
"domain_names": [
|
||||||
|
"test.example.com"
|
||||||
|
],
|
||||||
"forward_host": "127.0.0.1",
|
"forward_host": "127.0.0.1",
|
||||||
"forward_port": 8989,
|
"forward_port": 8080,
|
||||||
"access_list_id": 0,
|
"access_list_id": 0,
|
||||||
"certificate_id": 0,
|
"certificate_id": 0,
|
||||||
"ssl_forced": false,
|
"ssl_forced": false,
|
||||||
@@ -99,20 +116,22 @@
|
|||||||
"http2_support": false,
|
"http2_support": false,
|
||||||
"forward_scheme": "http",
|
"forward_scheme": "http",
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
|
"locations": [],
|
||||||
"hsts_enabled": false,
|
"hsts_enabled": false,
|
||||||
"hsts_subdomains": false,
|
"hsts_subdomains": false,
|
||||||
"certificate": null,
|
"certificate": null,
|
||||||
"owner": {
|
"owner": {
|
||||||
"id": 1,
|
"id": 1,
|
||||||
"created_on": "2024-10-07T22:43:55.000Z",
|
"created_on": "2025-10-28T00:50:24.000Z",
|
||||||
"modified_on": "2024-10-08T12:52:54.000Z",
|
"modified_on": "2025-10-28T00:50:24.000Z",
|
||||||
"is_deleted": false,
|
|
||||||
"is_disabled": false,
|
"is_disabled": false,
|
||||||
"email": "admin@example.com",
|
"email": "jc@jc21.com",
|
||||||
"name": "Administrator",
|
"name": "jamiec",
|
||||||
"nickname": "some guy",
|
"nickname": "jamiec",
|
||||||
"avatar": "//www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?default=mm",
|
"avatar": "//www.gravatar.com/avatar/6193176330f8d38747f038c170ddb193?default=mm",
|
||||||
"roles": ["admin"]
|
"roles": [
|
||||||
|
"admin"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"access_list": null
|
"access_list": null
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"operationId": "getRedirectionHosts",
|
"operationId": "getRedirectionHosts",
|
||||||
"summary": "Get all Redirection hosts",
|
"summary": "Get all Redirection hosts",
|
||||||
"tags": ["Redirection Hosts"],
|
"tags": ["redirection-hosts"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["redirection_hosts"]
|
"bearerAuth": ["redirection_hosts.view"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
{
|
{
|
||||||
"operationId": "deleteRedirectionHost",
|
"operationId": "deleteRedirectionHost",
|
||||||
"summary": "Delete a Redirection Host",
|
"summary": "Delete a Redirection Host",
|
||||||
"tags": ["Redirection Hosts"],
|
"tags": ["redirection-hosts"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["redirection_hosts"]
|
"bearerAuth": ["redirection_hosts.manage"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"name": "hostID",
|
"name": "hostID",
|
||||||
|
"description": "The ID of the Redirection Host",
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 1
|
"minimum": 1
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
{
|
{
|
||||||
"operationId": "disableRedirectionHost",
|
"operationId": "disableRedirectionHost",
|
||||||
"summary": "Disable a Redirection Host",
|
"summary": "Disable a Redirection Host",
|
||||||
"tags": ["Redirection Hosts"],
|
"tags": ["redirection-hosts"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["redirection_hosts"]
|
"bearerAuth": ["redirection_hosts.manage"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"name": "hostID",
|
"name": "hostID",
|
||||||
|
"description": "The ID of the Redirection Host",
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 1
|
"minimum": 1
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
{
|
{
|
||||||
"operationId": "enableRedirectionHost",
|
"operationId": "enableRedirectionHost",
|
||||||
"summary": "Enable a Redirection Host",
|
"summary": "Enable a Redirection Host",
|
||||||
"tags": ["Redirection Hosts"],
|
"tags": ["redirection-hosts"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["redirection_hosts"]
|
"bearerAuth": ["redirection_hosts.manage"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"name": "hostID",
|
"name": "hostID",
|
||||||
|
"description": "The ID of the Redirection Host",
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 1
|
"minimum": 1
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
{
|
{
|
||||||
"operationId": "getRedirectionHost",
|
"operationId": "getRedirectionHost",
|
||||||
"summary": "Get a Redirection Host",
|
"summary": "Get a Redirection Host",
|
||||||
"tags": ["Redirection Hosts"],
|
"tags": ["redirection-hosts"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["redirection_hosts"]
|
"bearerAuth": ["redirection_hosts.view"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"name": "hostID",
|
"name": "hostID",
|
||||||
|
"description": "The ID of the Redirection Host",
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 1
|
"minimum": 1
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
{
|
{
|
||||||
"operationId": "updateRedirectionHost",
|
"operationId": "updateRedirectionHost",
|
||||||
"summary": "Update a Redirection Host",
|
"summary": "Update a Redirection Host",
|
||||||
"tags": ["Redirection Hosts"],
|
"tags": ["redirection-hosts"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["redirection_hosts"]
|
"bearerAuth": ["redirection_hosts.manage"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"name": "hostID",
|
"name": "hostID",
|
||||||
|
"description": "The ID of the Redirection Host",
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 1
|
"minimum": 1
|
||||||
@@ -106,7 +107,6 @@
|
|||||||
"id": 1,
|
"id": 1,
|
||||||
"created_on": "2024-10-09T00:59:56.000Z",
|
"created_on": "2024-10-09T00:59:56.000Z",
|
||||||
"modified_on": "2024-10-09T00:59:56.000Z",
|
"modified_on": "2024-10-09T00:59:56.000Z",
|
||||||
"is_deleted": false,
|
|
||||||
"is_disabled": false,
|
"is_disabled": false,
|
||||||
"email": "admin@example.com",
|
"email": "admin@example.com",
|
||||||
"name": "Administrator",
|
"name": "Administrator",
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
{
|
{
|
||||||
"operationId": "createRedirectionHost",
|
"operationId": "createRedirectionHost",
|
||||||
"summary": "Create a Redirection Host",
|
"summary": "Create a Redirection Host",
|
||||||
"tags": ["Redirection Hosts"],
|
"tags": ["redirection-hosts"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["redirection_hosts"]
|
"bearerAuth": [
|
||||||
|
"redirection_hosts.manage"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"requestBody": {
|
"requestBody": {
|
||||||
@@ -15,7 +17,12 @@
|
|||||||
"schema": {
|
"schema": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"additionalProperties": false,
|
"additionalProperties": false,
|
||||||
"required": ["domain_names", "forward_scheme", "forward_http_code", "forward_domain_name"],
|
"required": [
|
||||||
|
"domain_names",
|
||||||
|
"forward_scheme",
|
||||||
|
"forward_http_code",
|
||||||
|
"forward_domain_name"
|
||||||
|
],
|
||||||
"properties": {
|
"properties": {
|
||||||
"domain_names": {
|
"domain_names": {
|
||||||
"$ref": "../../../components/redirection-host-object.json#/properties/domain_names"
|
"$ref": "../../../components/redirection-host-object.json#/properties/domain_names"
|
||||||
@@ -57,6 +64,23 @@
|
|||||||
"$ref": "../../../components/redirection-host-object.json#/properties/meta"
|
"$ref": "../../../components/redirection-host-object.json#/properties/meta"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"example": {
|
||||||
|
"domain_names": [
|
||||||
|
"test.example.com"
|
||||||
|
],
|
||||||
|
"forward_domain_name": "example.com",
|
||||||
|
"forward_scheme": "auto",
|
||||||
|
"forward_http_code": 301,
|
||||||
|
"preserve_path": false,
|
||||||
|
"block_exploits": false,
|
||||||
|
"certificate_id": 0,
|
||||||
|
"ssl_forced": false,
|
||||||
|
"http2_support": false,
|
||||||
|
"hsts_enabled": false,
|
||||||
|
"hsts_subdomains": false,
|
||||||
|
"advanced_config": "",
|
||||||
|
"meta": {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -69,12 +93,14 @@
|
|||||||
"examples": {
|
"examples": {
|
||||||
"default": {
|
"default": {
|
||||||
"value": {
|
"value": {
|
||||||
"id": 1,
|
"id": 2,
|
||||||
"created_on": "2024-10-09T01:13:12.000Z",
|
"created_on": "2025-10-30T01:27:04.000Z",
|
||||||
"modified_on": "2024-10-09T01:13:12.000Z",
|
"modified_on": "2025-10-30T01:27:04.000Z",
|
||||||
"owner_user_id": 1,
|
"owner_user_id": 1,
|
||||||
"domain_names": ["test.example.com"],
|
"domain_names": [
|
||||||
"forward_domain_name": "something-else.com",
|
"test.example.com"
|
||||||
|
],
|
||||||
|
"forward_domain_name": "example.com",
|
||||||
"preserve_path": false,
|
"preserve_path": false,
|
||||||
"certificate_id": 0,
|
"certificate_id": 0,
|
||||||
"ssl_forced": false,
|
"ssl_forced": false,
|
||||||
@@ -85,20 +111,21 @@
|
|||||||
"enabled": true,
|
"enabled": true,
|
||||||
"hsts_enabled": false,
|
"hsts_enabled": false,
|
||||||
"hsts_subdomains": false,
|
"hsts_subdomains": false,
|
||||||
"forward_scheme": "http",
|
"forward_scheme": "auto",
|
||||||
"forward_http_code": 301,
|
"forward_http_code": 301,
|
||||||
"certificate": null,
|
"certificate": null,
|
||||||
"owner": {
|
"owner": {
|
||||||
"id": 1,
|
"id": 1,
|
||||||
"created_on": "2024-10-09T00:59:56.000Z",
|
"created_on": "2025-10-28T00:50:24.000Z",
|
||||||
"modified_on": "2024-10-09T00:59:56.000Z",
|
"modified_on": "2025-10-28T00:50:24.000Z",
|
||||||
"is_deleted": false,
|
|
||||||
"is_disabled": false,
|
"is_disabled": false,
|
||||||
"email": "admin@example.com",
|
"email": "jc@jc21.com",
|
||||||
"name": "Administrator",
|
"name": "jamiec",
|
||||||
"nickname": "Admin",
|
"nickname": "jamiec",
|
||||||
"avatar": "",
|
"avatar": "//www.gravatar.com/avatar/6193176330f8d38747f038c170ddb193?default=mm",
|
||||||
"roles": ["admin"]
|
"roles": [
|
||||||
|
"admin"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"operationId": "getStreams",
|
"operationId": "getStreams",
|
||||||
"summary": "Get all streams",
|
"summary": "Get all streams",
|
||||||
"tags": ["Streams"],
|
"tags": ["streams"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["streams"]
|
"bearerAuth": ["streams.view"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
{
|
{
|
||||||
"operationId": "createStream",
|
"operationId": "createStream",
|
||||||
"summary": "Create a Stream",
|
"summary": "Create a Stream",
|
||||||
"tags": ["Streams"],
|
"tags": ["streams"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["streams"]
|
"bearerAuth": [
|
||||||
|
"streams.manage"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"requestBody": {
|
"requestBody": {
|
||||||
@@ -15,7 +17,11 @@
|
|||||||
"schema": {
|
"schema": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"additionalProperties": false,
|
"additionalProperties": false,
|
||||||
"required": ["incoming_port", "forwarding_host", "forwarding_port"],
|
"required": [
|
||||||
|
"incoming_port",
|
||||||
|
"forwarding_host",
|
||||||
|
"forwarding_port"
|
||||||
|
],
|
||||||
"properties": {
|
"properties": {
|
||||||
"incoming_port": {
|
"incoming_port": {
|
||||||
"$ref": "../../../components/stream-object.json#/properties/incoming_port"
|
"$ref": "../../../components/stream-object.json#/properties/incoming_port"
|
||||||
@@ -42,6 +48,15 @@
|
|||||||
"$ref": "../../../components/dead-host-object.json#/properties/domain_names"
|
"$ref": "../../../components/dead-host-object.json#/properties/domain_names"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"example": {
|
||||||
|
"incoming_port": 8888,
|
||||||
|
"forwarding_host": "127.0.0.1",
|
||||||
|
"forwarding_port": 8080,
|
||||||
|
"tcp_forwarding": true,
|
||||||
|
"udp_forwarding": false,
|
||||||
|
"certificate_id": 0,
|
||||||
|
"meta": {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -72,13 +87,14 @@
|
|||||||
"id": 1,
|
"id": 1,
|
||||||
"created_on": "2024-10-09T02:33:16.000Z",
|
"created_on": "2024-10-09T02:33:16.000Z",
|
||||||
"modified_on": "2024-10-09T02:33:16.000Z",
|
"modified_on": "2024-10-09T02:33:16.000Z",
|
||||||
"is_deleted": false,
|
|
||||||
"is_disabled": false,
|
"is_disabled": false,
|
||||||
"email": "admin@example.com",
|
"email": "admin@example.com",
|
||||||
"name": "Administrator",
|
"name": "Administrator",
|
||||||
"nickname": "Admin",
|
"nickname": "Admin",
|
||||||
"avatar": "",
|
"avatar": "",
|
||||||
"roles": ["admin"]
|
"roles": [
|
||||||
|
"admin"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"certificate_id": 0
|
"certificate_id": 0
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
{
|
{
|
||||||
"operationId": "deleteStream",
|
"operationId": "deleteStream",
|
||||||
"summary": "Delete a Stream",
|
"summary": "Delete a Stream",
|
||||||
"tags": ["Streams"],
|
"tags": ["streams"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["streams"]
|
"bearerAuth": ["streams.manage"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"name": "streamID",
|
"name": "streamID",
|
||||||
|
"description": "The ID of the Stream",
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 1
|
"minimum": 1
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
{
|
{
|
||||||
"operationId": "disableStream",
|
"operationId": "disableStream",
|
||||||
"summary": "Disable a Stream",
|
"summary": "Disable a Stream",
|
||||||
"tags": ["Streams"],
|
"tags": ["streams"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["streams"]
|
"bearerAuth": ["streams.manage"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"name": "streamID",
|
"name": "streamID",
|
||||||
|
"description": "The ID of the Stream",
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 1
|
"minimum": 1
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
{
|
{
|
||||||
"operationId": "enableStream",
|
"operationId": "enableStream",
|
||||||
"summary": "Enable a Stream",
|
"summary": "Enable a Stream",
|
||||||
"tags": ["Streams"],
|
"tags": ["streams"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["streams"]
|
"bearerAuth": ["streams.manage"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"name": "streamID",
|
"name": "streamID",
|
||||||
|
"description": "The ID of the Stream",
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 1
|
"minimum": 1
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
{
|
{
|
||||||
"operationId": "getStream",
|
"operationId": "getStream",
|
||||||
"summary": "Get a Stream",
|
"summary": "Get a Stream",
|
||||||
"tags": ["Streams"],
|
"tags": ["streams"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["streams"]
|
"bearerAuth": ["streams.view"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"name": "streamID",
|
"name": "streamID",
|
||||||
|
"description": "The ID of the Stream",
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 1
|
"minimum": 1
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
{
|
{
|
||||||
"operationId": "updateStream",
|
"operationId": "updateStream",
|
||||||
"summary": "Update a Stream",
|
"summary": "Update a Stream",
|
||||||
"tags": ["Streams"],
|
"tags": ["streams"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["streams"]
|
"bearerAuth": ["streams.manage"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"name": "streamID",
|
"name": "streamID",
|
||||||
|
"description": "The ID of the Stream",
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 1
|
"minimum": 1
|
||||||
@@ -81,7 +82,6 @@
|
|||||||
"id": 1,
|
"id": 1,
|
||||||
"created_on": "2024-10-09T02:33:16.000Z",
|
"created_on": "2024-10-09T02:33:16.000Z",
|
||||||
"modified_on": "2024-10-09T02:33:16.000Z",
|
"modified_on": "2024-10-09T02:33:16.000Z",
|
||||||
"is_deleted": false,
|
|
||||||
"is_disabled": false,
|
"is_disabled": false,
|
||||||
"email": "admin@example.com",
|
"email": "admin@example.com",
|
||||||
"name": "Administrator",
|
"name": "Administrator",
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"operationId": "reportsHosts",
|
"operationId": "reportsHosts",
|
||||||
"summary": "Report on Host Statistics",
|
"summary": "Report on Host Statistics",
|
||||||
"tags": ["Reports"],
|
"tags": ["reports"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["reports"]
|
"bearerAuth": []
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
@@ -27,19 +27,23 @@
|
|||||||
"properties": {
|
"properties": {
|
||||||
"proxy": {
|
"proxy": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"description": "Proxy Hosts Count"
|
"description": "Proxy Hosts Count",
|
||||||
|
"example": 20
|
||||||
},
|
},
|
||||||
"redirection": {
|
"redirection": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"description": "Redirection Hosts Count"
|
"description": "Redirection Hosts Count",
|
||||||
|
"example": 2
|
||||||
},
|
},
|
||||||
"stream": {
|
"stream": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"description": "Streams Count"
|
"description": "Streams Count",
|
||||||
|
"example": 0
|
||||||
},
|
},
|
||||||
"dead": {
|
"dead": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"description": "404 Hosts Count"
|
"description": "404 Hosts Count",
|
||||||
|
"example": 3
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"operationId": "schema",
|
"operationId": "schema",
|
||||||
"summary": "Returns this swagger API schema",
|
"summary": "Returns this swagger API schema",
|
||||||
"tags": ["Public"],
|
"tags": ["public"],
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
"description": "200 response"
|
"description": "200 response"
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"operationId": "getSettings",
|
"operationId": "getSettings",
|
||||||
"summary": "Get all settings",
|
"summary": "Get all settings",
|
||||||
"tags": ["Settings"],
|
"tags": ["settings"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["settings"]
|
"bearerAuth": ["admin"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"operationId": "getSetting",
|
"operationId": "getSetting",
|
||||||
"summary": "Get a setting",
|
"summary": "Get a setting",
|
||||||
"tags": ["Settings"],
|
"tags": ["settings"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["settings"]
|
"bearerAuth": ["admin"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"operationId": "updateSetting",
|
"operationId": "updateSetting",
|
||||||
"summary": "Update a setting",
|
"summary": "Update a setting",
|
||||||
"tags": ["Settings"],
|
"tags": ["settings"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["settings"]
|
"bearerAuth": ["admin"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
@@ -34,7 +34,8 @@
|
|||||||
"value": {
|
"value": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"minLength": 1,
|
"minLength": 1,
|
||||||
"enum": ["congratulations", "404", "444", "redirect", "html"]
|
"enum": ["congratulations", "404", "444", "redirect", "html"],
|
||||||
|
"example": "html"
|
||||||
},
|
},
|
||||||
"meta": {
|
"meta": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
@@ -46,9 +47,16 @@
|
|||||||
"html": {
|
"html": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"example": {
|
||||||
|
"html": "<p>hello world</p>"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"example": {
|
||||||
|
"value": "congratulations",
|
||||||
|
"meta": {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"operationId": "refreshToken",
|
"operationId": "refreshToken",
|
||||||
"summary": "Refresh your access token",
|
"summary": "Refresh your access token",
|
||||||
"tags": ["Tokens"],
|
"tags": ["tokens"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["tokens"]
|
"bearerAuth": []
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"operationId": "requestToken",
|
"operationId": "requestToken",
|
||||||
"summary": "Request a new access token from credentials",
|
"summary": "Request a new access token from credentials",
|
||||||
"tags": ["Tokens"],
|
"tags": ["tokens"],
|
||||||
"requestBody": {
|
"requestBody": {
|
||||||
"description": "Credentials Payload",
|
"description": "Credentials Payload",
|
||||||
"required": true,
|
"required": true,
|
||||||
@@ -12,20 +12,27 @@
|
|||||||
"properties": {
|
"properties": {
|
||||||
"identity": {
|
"identity": {
|
||||||
"minLength": 1,
|
"minLength": 1,
|
||||||
"type": "string"
|
"type": "string",
|
||||||
|
"example": "me@example.com"
|
||||||
},
|
},
|
||||||
"scope": {
|
"scope": {
|
||||||
"minLength": 1,
|
"minLength": 1,
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"enum": ["user"]
|
"enum": ["user"],
|
||||||
|
"example": "user"
|
||||||
},
|
},
|
||||||
"secret": {
|
"secret": {
|
||||||
"minLength": 1,
|
"minLength": 1,
|
||||||
"type": "string"
|
"type": "string",
|
||||||
|
"example": "bigredhorsebanana"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": ["identity", "secret"],
|
"required": ["identity", "secret"],
|
||||||
"type": "object"
|
"type": "object"
|
||||||
|
},
|
||||||
|
"example": {
|
||||||
|
"identity": "me@example.com",
|
||||||
|
"secret": "bigredhorsebanana"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -37,12 +44,10 @@
|
|||||||
"examples": {
|
"examples": {
|
||||||
"default": {
|
"default": {
|
||||||
"value": {
|
"value": {
|
||||||
"result": {
|
|
||||||
"expires": "2025-02-04T20:40:46.340Z",
|
"expires": "2025-02-04T20:40:46.340Z",
|
||||||
"token": "eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCJ9.ey...xaHKYr3Kk6MvkUjcC4"
|
"token": "eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCJ9.ey...xaHKYr3Kk6MvkUjcC4"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"schema": {
|
"schema": {
|
||||||
"$ref": "../../components/token-object.json"
|
"$ref": "../../components/token-object.json"
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"operationId": "getUsers",
|
"operationId": "getUsers",
|
||||||
"summary": "Get all users",
|
"summary": "Get all users",
|
||||||
"tags": ["Users"],
|
"tags": ["users"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["users"]
|
"bearerAuth": ["admin"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"operationId": "createUser",
|
"operationId": "createUser",
|
||||||
"summary": "Create a User",
|
"summary": "Create a User",
|
||||||
"tags": ["Users"],
|
"tags": ["users"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["users"]
|
"bearerAuth": ["admin"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"requestBody": {
|
"requestBody": {
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"operationId": "updateUserAuth",
|
"operationId": "updateUserAuth",
|
||||||
"summary": "Update a User's Authentication",
|
"summary": "Update a User's Authentication",
|
||||||
"tags": ["Users"],
|
"tags": ["users"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["users"]
|
"bearerAuth": ["admin"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"operationId": "deleteUser",
|
"operationId": "deleteUser",
|
||||||
"summary": "Delete a User",
|
"summary": "Delete a User",
|
||||||
"tags": ["Users"],
|
"tags": ["users"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["users"]
|
"bearerAuth": ["admin"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"operationId": "getUser",
|
"operationId": "getUser",
|
||||||
"summary": "Get a user",
|
"summary": "Get a user",
|
||||||
"tags": ["Users"],
|
"tags": ["users"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["users"]
|
"bearerAuth": ["admin"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"operationId": "loginAsUser",
|
"operationId": "loginAsUser",
|
||||||
"summary": "Login as this user",
|
"summary": "Login as this user",
|
||||||
"tags": ["Users"],
|
"tags": ["users"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["users"]
|
"bearerAuth": ["admin"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
@@ -35,11 +35,11 @@
|
|||||||
"created_on": "2020-01-30T10:43:44.000Z",
|
"created_on": "2020-01-30T10:43:44.000Z",
|
||||||
"modified_on": "2020-01-30T10:43:44.000Z",
|
"modified_on": "2020-01-30T10:43:44.000Z",
|
||||||
"is_disabled": false,
|
"is_disabled": false,
|
||||||
"email": "jc@jc21.com",
|
"email": "user2@example.com",
|
||||||
"name": "Jamie Curnow",
|
"name": "John Doe",
|
||||||
"nickname": "James",
|
"nickname": "Jonny",
|
||||||
"avatar": "//www.gravatar.com/avatar/3c8d73f45fd8763f827b964c76e6032a?default=mm",
|
"avatar": "//www.gravatar.com/avatar/3c8d73f45fd8763f827b964c76e6032a?default=mm",
|
||||||
"roles": ["admin"]
|
"roles": []
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -50,16 +50,15 @@
|
|||||||
"required": ["expires", "token", "user"],
|
"required": ["expires", "token", "user"],
|
||||||
"additionalProperties": false,
|
"additionalProperties": false,
|
||||||
"properties": {
|
"properties": {
|
||||||
"expires": {
|
|
||||||
"description": "Token Expiry Unix Time",
|
|
||||||
"example": 1566540249,
|
|
||||||
"minimum": 1,
|
|
||||||
"type": "number"
|
|
||||||
},
|
|
||||||
"token": {
|
"token": {
|
||||||
"description": "JWT Token",
|
"description": "JWT Token",
|
||||||
"example": "eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCJ9.ey...xaHKYr3Kk6MvkUjcC4",
|
"type": "string",
|
||||||
"type": "string"
|
"example": "eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCJ9.ey...xaHKYr3Kk6MvkUjcC4"
|
||||||
|
},
|
||||||
|
"expires": {
|
||||||
|
"description": "Token Expiry Timestamp",
|
||||||
|
"type": "string",
|
||||||
|
"example": "2020-01-30T10:43:44.000Z"
|
||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"$ref": "../../../../components/user-object.json"
|
"$ref": "../../../../components/user-object.json"
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"operationId": "updateUserPermissions",
|
"operationId": "updateUserPermissions",
|
||||||
"summary": "Update a User's Permissions",
|
"summary": "Update a User's Permissions",
|
||||||
"tags": ["Users"],
|
"tags": ["users"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["users"]
|
"bearerAuth": ["admin"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
@@ -27,6 +27,15 @@
|
|||||||
"application/json": {
|
"application/json": {
|
||||||
"schema": {
|
"schema": {
|
||||||
"$ref": "../../../../components/permission-object.json"
|
"$ref": "../../../../components/permission-object.json"
|
||||||
|
},
|
||||||
|
"example": {
|
||||||
|
"visibility": "all",
|
||||||
|
"access_lists": "view",
|
||||||
|
"certificates": "hidden",
|
||||||
|
"dead_hosts": "hidden",
|
||||||
|
"proxy_hosts": "manage",
|
||||||
|
"redirection_hosts": "hidden",
|
||||||
|
"streams": "hidden"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"operationId": "updateUser",
|
"operationId": "updateUser",
|
||||||
"summary": "Update a User",
|
"summary": "Update a User",
|
||||||
"tags": ["Users"],
|
"tags": ["users"],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"BearerAuth": ["users"]
|
"bearerAuth": ["admin"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
|
|||||||
@@ -2,7 +2,8 @@
|
|||||||
"openapi": "3.1.0",
|
"openapi": "3.1.0",
|
||||||
"info": {
|
"info": {
|
||||||
"title": "Nginx Proxy Manager API",
|
"title": "Nginx Proxy Manager API",
|
||||||
"version": "2.x.x"
|
"version": "2.x.x",
|
||||||
|
"description": "This is the official API documentation for Nginx Proxy Manager.\n\nMost endpoints require authentication via Bearer Token (JWT). You can generate a token by logging in via the `POST /tokens` endpoint.\n\nFor more information, visit the [Nginx Proxy Manager Documentation](https://nginxproxymanager.com)."
|
||||||
},
|
},
|
||||||
"servers": [
|
"servers": [
|
||||||
{
|
{
|
||||||
@@ -11,13 +12,59 @@
|
|||||||
],
|
],
|
||||||
"components": {
|
"components": {
|
||||||
"securitySchemes": {
|
"securitySchemes": {
|
||||||
"bearerAuth": {
|
"$ref": "./components/security-schemes.json"
|
||||||
"type": "http",
|
|
||||||
"scheme": "bearer",
|
|
||||||
"bearerFormat": "JWT"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"tags": [
|
||||||
|
{
|
||||||
|
"name": "public",
|
||||||
|
"description": "Endpoints that do not require authentication"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "audit-log",
|
||||||
|
"description": "Endpoints related to Audit Logs"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "access-lists",
|
||||||
|
"description": "Endpoints related to Access Lists"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "certificates",
|
||||||
|
"description": "Endpoints related to Certificates"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "404-hosts",
|
||||||
|
"description": "Endpoints related to 404 Hosts"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "proxy-hosts",
|
||||||
|
"description": "Endpoints related to Proxy Hosts"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "redirection-hosts",
|
||||||
|
"description": "Endpoints related to Redirection Hosts"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "streams",
|
||||||
|
"description": "Endpoints related to Streams"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "reports",
|
||||||
|
"description": "Endpoints for viewing reports"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "settings",
|
||||||
|
"description": "Endpoints for managing application settings"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "tokens",
|
||||||
|
"description": "Endpoints for managing authentication tokens"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "users",
|
||||||
|
"description": "Endpoints for managing users"
|
||||||
|
}
|
||||||
|
],
|
||||||
"paths": {
|
"paths": {
|
||||||
"/": {
|
"/": {
|
||||||
"get": {
|
"get": {
|
||||||
|
|||||||
@@ -43,59 +43,59 @@
|
|||||||
ajv-draft-04 "^1.0.0"
|
ajv-draft-04 "^1.0.0"
|
||||||
call-me-maybe "^1.0.2"
|
call-me-maybe "^1.0.2"
|
||||||
|
|
||||||
"@biomejs/biome@^2.3.1":
|
"@biomejs/biome@^2.3.2":
|
||||||
version "2.3.1"
|
version "2.3.2"
|
||||||
resolved "https://registry.yarnpkg.com/@biomejs/biome/-/biome-2.3.1.tgz#d1a9284f52986324f288cdaf450331a0f3fb1da7"
|
resolved "https://registry.yarnpkg.com/@biomejs/biome/-/biome-2.3.2.tgz#aeeb5f12c39571a18f36a919be63ba7dbc7b290a"
|
||||||
integrity sha512-A29evf1R72V5bo4o2EPxYMm5mtyGvzp2g+biZvRFx29nWebGyyeOSsDWGx3tuNNMFRepGwxmA9ZQ15mzfabK2w==
|
integrity sha512-8e9tzamuDycx7fdrcJ/F/GDZ8SYukc5ud6tDicjjFqURKYFSWMl0H0iXNXZEGmcmNUmABgGuHThPykcM41INgg==
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
"@biomejs/cli-darwin-arm64" "2.3.1"
|
"@biomejs/cli-darwin-arm64" "2.3.2"
|
||||||
"@biomejs/cli-darwin-x64" "2.3.1"
|
"@biomejs/cli-darwin-x64" "2.3.2"
|
||||||
"@biomejs/cli-linux-arm64" "2.3.1"
|
"@biomejs/cli-linux-arm64" "2.3.2"
|
||||||
"@biomejs/cli-linux-arm64-musl" "2.3.1"
|
"@biomejs/cli-linux-arm64-musl" "2.3.2"
|
||||||
"@biomejs/cli-linux-x64" "2.3.1"
|
"@biomejs/cli-linux-x64" "2.3.2"
|
||||||
"@biomejs/cli-linux-x64-musl" "2.3.1"
|
"@biomejs/cli-linux-x64-musl" "2.3.2"
|
||||||
"@biomejs/cli-win32-arm64" "2.3.1"
|
"@biomejs/cli-win32-arm64" "2.3.2"
|
||||||
"@biomejs/cli-win32-x64" "2.3.1"
|
"@biomejs/cli-win32-x64" "2.3.2"
|
||||||
|
|
||||||
"@biomejs/cli-darwin-arm64@2.3.1":
|
"@biomejs/cli-darwin-arm64@2.3.2":
|
||||||
version "2.3.1"
|
version "2.3.2"
|
||||||
resolved "https://registry.yarnpkg.com/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.3.1.tgz#607835f8ef043e1a80f9ad2a232c9e860941ab60"
|
resolved "https://registry.yarnpkg.com/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.3.2.tgz#93f866161abe32e702987ccbddf492c1aabe016f"
|
||||||
integrity sha512-ombSf3MnTUueiYGN1SeI9tBCsDUhpWzOwS63Dove42osNh0PfE1cUtHFx6eZ1+MYCCLwXzlFlYFdrJ+U7h6LcA==
|
integrity sha512-4LECm4kc3If0JISai4c3KWQzukoUdpxy4fRzlrPcrdMSRFksR9ZoXK7JBcPuLBmd2SoT4/d7CQS33VnZpgBjew==
|
||||||
|
|
||||||
"@biomejs/cli-darwin-x64@2.3.1":
|
"@biomejs/cli-darwin-x64@2.3.2":
|
||||||
version "2.3.1"
|
version "2.3.2"
|
||||||
resolved "https://registry.yarnpkg.com/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.3.1.tgz#654fe4aaa8ea5d5bde5457db4961ad5d214713ac"
|
resolved "https://registry.yarnpkg.com/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.3.2.tgz#9c3dffdac12e4f4d8db7680ca20f58ace1f38c23"
|
||||||
integrity sha512-pcOfwyoQkrkbGvXxRvZNe5qgD797IowpJPovPX5biPk2FwMEV+INZqfCaz4G5bVq9hYnjwhRMamg11U4QsRXrQ==
|
integrity sha512-jNMnfwHT4N3wi+ypRfMTjLGnDmKYGzxVr1EYAPBcauRcDnICFXN81wD6wxJcSUrLynoyyYCdfW6vJHS/IAoTDA==
|
||||||
|
|
||||||
"@biomejs/cli-linux-arm64-musl@2.3.1":
|
"@biomejs/cli-linux-arm64-musl@2.3.2":
|
||||||
version "2.3.1"
|
version "2.3.2"
|
||||||
resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.3.1.tgz#5fe502082a575c31ef808cf080cbcd4485964167"
|
resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.3.2.tgz#a0424d2fe355cc43c375b3fbf3e42d39b7221d0e"
|
||||||
integrity sha512-+DZYv8l7FlUtTrWs1Tdt1KcNCAmRO87PyOnxKGunbWm5HKg1oZBSbIIPkjrCtDZaeqSG1DiGx7qF+CPsquQRcg==
|
integrity sha512-2Zz4usDG1GTTPQnliIeNx6eVGGP2ry5vE/v39nT73a3cKN6t5H5XxjcEoZZh62uVZvED7hXXikclvI64vZkYqw==
|
||||||
|
|
||||||
"@biomejs/cli-linux-arm64@2.3.1":
|
"@biomejs/cli-linux-arm64@2.3.2":
|
||||||
version "2.3.1"
|
version "2.3.2"
|
||||||
resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.3.1.tgz#81c02547905d379dbb312e6ff24b04908c2e320f"
|
resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.3.2.tgz#f85717c04d420ede20523d173a1fc10df60d4d37"
|
||||||
integrity sha512-td5O8pFIgLs8H1sAZsD6v+5quODihyEw4nv2R8z7swUfIK1FKk+15e4eiYVLcAE4jUqngvh4j3JCNgg0Y4o4IQ==
|
integrity sha512-amnqvk+gWybbQleRRq8TMe0rIv7GHss8mFJEaGuEZYWg1Tw14YKOkeo8h6pf1c+d3qR+JU4iT9KXnBKGON4klw==
|
||||||
|
|
||||||
"@biomejs/cli-linux-x64-musl@2.3.1":
|
"@biomejs/cli-linux-x64-musl@2.3.2":
|
||||||
version "2.3.1"
|
version "2.3.2"
|
||||||
resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.3.1.tgz#c7c00beb5eda1ad25185544897e66eeec6be3b0b"
|
resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.3.2.tgz#d3e114c744c32d2c50a77c13476bd941819c92d8"
|
||||||
integrity sha512-Y3Ob4nqgv38Mh+6EGHltuN+Cq8aj/gyMTJYzkFZV2AEj+9XzoXB9VNljz9pjfFNHUxvLEV4b55VWyxozQTBaUQ==
|
integrity sha512-gzB19MpRdTuOuLtPpFBGrV3Lq424gHyq2lFj8wfX9tvLMLdmA/R9C7k/mqBp/spcbWuHeIEKgEs3RviOPcWGBA==
|
||||||
|
|
||||||
"@biomejs/cli-linux-x64@2.3.1":
|
"@biomejs/cli-linux-x64@2.3.2":
|
||||||
version "2.3.1"
|
version "2.3.2"
|
||||||
resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-x64/-/cli-linux-x64-2.3.1.tgz#7481d2e7be98d4de574df233766a5bdda037c897"
|
resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-x64/-/cli-linux-x64-2.3.2.tgz#f66ce85d2d757d45e6edecce04753a805bd816f0"
|
||||||
integrity sha512-PYWgEO7up7XYwSAArOpzsVCiqxBCXy53gsReAb1kKYIyXaoAlhBaBMvxR/k2Rm9aTuZ662locXUmPk/Aj+Xu+Q==
|
integrity sha512-8BG/vRAhFz1pmuyd24FQPhNeueLqPtwvZk6yblABY2gzL2H8fLQAF/Z2OPIc+BPIVPld+8cSiKY/KFh6k81xfA==
|
||||||
|
|
||||||
"@biomejs/cli-win32-arm64@2.3.1":
|
"@biomejs/cli-win32-arm64@2.3.2":
|
||||||
version "2.3.1"
|
version "2.3.2"
|
||||||
resolved "https://registry.yarnpkg.com/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.3.1.tgz#dac8c7c7223e97f86cd0eed7aa95584984761481"
|
resolved "https://registry.yarnpkg.com/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.3.2.tgz#b46f8b47a3d97e766cc5ad5eb67d90eeb230b2cb"
|
||||||
integrity sha512-RHIG/zgo+69idUqVvV3n8+j58dKYABRpMyDmfWu2TITC+jwGPiEaT0Q3RKD+kQHiS80mpBrST0iUGeEXT0bU9A==
|
integrity sha512-lCruqQlfWjhMlOdyf5pDHOxoNm4WoyY2vZ4YN33/nuZBRstVDuqPPjS0yBkbUlLEte11FbpW+wWSlfnZfSIZvg==
|
||||||
|
|
||||||
"@biomejs/cli-win32-x64@2.3.1":
|
"@biomejs/cli-win32-x64@2.3.2":
|
||||||
version "2.3.1"
|
version "2.3.2"
|
||||||
resolved "https://registry.yarnpkg.com/@biomejs/cli-win32-x64/-/cli-win32-x64-2.3.1.tgz#f8818ab2c1e3a6e2ed8a656935173e5ce4c720be"
|
resolved "https://registry.yarnpkg.com/@biomejs/cli-win32-x64/-/cli-win32-x64-2.3.2.tgz#a14f5e220dd496705278315ee3e5e028dd657344"
|
||||||
integrity sha512-izl30JJ5Dp10mi90Eko47zhxE6pYyWPcnX1NQxKpL/yMhXxf95oLTzfpu4q+MDBh/gemNqyJEwjBpe0MT5iWPA==
|
integrity sha512-6Ee9P26DTb4D8sN9nXxgbi9Dw5vSOfH98M7UlmkjKB2vtUbrRqCbZiNfryGiwnPIpd6YUoTl7rLVD2/x1CyEHQ==
|
||||||
|
|
||||||
"@gar/promisify@^1.0.1":
|
"@gar/promisify@^1.0.1":
|
||||||
version "1.1.3"
|
version "1.1.3"
|
||||||
@@ -861,7 +861,7 @@ expand-template@^2.0.3:
|
|||||||
resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c"
|
resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c"
|
||||||
integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==
|
integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==
|
||||||
|
|
||||||
express-fileupload@^1.1.9:
|
express-fileupload@^1.5.2:
|
||||||
version "1.5.2"
|
version "1.5.2"
|
||||||
resolved "https://registry.yarnpkg.com/express-fileupload/-/express-fileupload-1.5.2.tgz#4da70ba6f2ffd4c736eab0776445865a9dbd9bfa"
|
resolved "https://registry.yarnpkg.com/express-fileupload/-/express-fileupload-1.5.2.tgz#4da70ba6f2ffd4c736eab0776445865a9dbd9bfa"
|
||||||
integrity sha512-wxUJn2vTHvj/kZCVmc5/bJO15C7aSMyHeuXYY3geKpeKibaAoQGcEv5+sM6nHS2T7VF+QHS4hTWPiY2mKofEdg==
|
integrity sha512-wxUJn2vTHvj/kZCVmc5/bJO15C7aSMyHeuXYY3geKpeKibaAoQGcEv5+sM6nHS2T7VF+QHS4hTWPiY2mKofEdg==
|
||||||
@@ -1108,7 +1108,7 @@ graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.2.0, graceful-fs@^4.2.6:
|
|||||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
|
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
|
||||||
integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
|
integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
|
||||||
|
|
||||||
gravatar@^1.8.0:
|
gravatar@^1.8.2:
|
||||||
version "1.8.2"
|
version "1.8.2"
|
||||||
resolved "https://registry.yarnpkg.com/gravatar/-/gravatar-1.8.2.tgz#f298642b1562ed685af2ae938dbe31ec0c542cc1"
|
resolved "https://registry.yarnpkg.com/gravatar/-/gravatar-1.8.2.tgz#f298642b1562ed685af2ae938dbe31ec0c542cc1"
|
||||||
integrity sha512-GdRwLM3oYpFQKy47MKuluw9hZ2gaCtiKPbDGdcDEuYDKlc8eNnW27KYL9LVbIDzEsx88WtDWQm2ClBcsgBnj6w==
|
integrity sha512-GdRwLM3oYpFQKy47MKuluw9hZ2gaCtiKPbDGdcDEuYDKlc8eNnW27KYL9LVbIDzEsx88WtDWQm2ClBcsgBnj6w==
|
||||||
@@ -1352,7 +1352,7 @@ json-schema-traverse@^1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
|
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
|
||||||
integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
|
integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
|
||||||
|
|
||||||
jsonwebtoken@^9.0.0:
|
jsonwebtoken@^9.0.2:
|
||||||
version "9.0.2"
|
version "9.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz#65ff91f4abef1784697d40952bb1998c504caaf3"
|
resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz#65ff91f4abef1784697d40952bb1998c504caaf3"
|
||||||
integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==
|
integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ export * from "./getToken";
|
|||||||
export * from "./getUser";
|
export * from "./getUser";
|
||||||
export * from "./getUsers";
|
export * from "./getUsers";
|
||||||
export * from "./helpers";
|
export * from "./helpers";
|
||||||
|
export * from "./loginAsUser";
|
||||||
export * from "./models";
|
export * from "./models";
|
||||||
export * from "./refreshToken";
|
export * from "./refreshToken";
|
||||||
export * from "./renewCertificate";
|
export * from "./renewCertificate";
|
||||||
|
|||||||
8
frontend/src/api/backend/loginAsUser.ts
Normal file
8
frontend/src/api/backend/loginAsUser.ts
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
import * as api from "./base";
|
||||||
|
import type { LoginAsTokenResponse } from "./responseTypes";
|
||||||
|
|
||||||
|
export async function loginAsUser(id: number): Promise<LoginAsTokenResponse> {
|
||||||
|
return await api.post({
|
||||||
|
url: `/users/${id}/login`,
|
||||||
|
});
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
import type { AppVersion } from "./models";
|
import type { AppVersion, User } from "./models";
|
||||||
|
|
||||||
export interface HealthResponse {
|
export interface HealthResponse {
|
||||||
status: string;
|
status: string;
|
||||||
@@ -15,3 +15,7 @@ export interface ValidatedCertificateResponse {
|
|||||||
certificate: Record<string, any>;
|
certificate: Record<string, any>;
|
||||||
certificateKey: boolean;
|
certificateKey: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface LoginAsTokenResponse extends TokenResponse {
|
||||||
|
user: User;
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
import type { Table as ReactTable } from "@tanstack/react-table";
|
import type { Table as ReactTable } from "@tanstack/react-table";
|
||||||
import cn from "classnames";
|
import cn from "classnames";
|
||||||
import type { ReactNode } from "react";
|
import type { ReactNode } from "react";
|
||||||
import { Button } from "src/components";
|
import { Button, HasPermission } from "src/components";
|
||||||
import { T } from "src/locale";
|
import { T } from "src/locale";
|
||||||
|
import { type ADMIN, MANAGE, type Permission, type Section } from "src/modules/Permissions";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
tableInstance: ReactTable<any>;
|
tableInstance: ReactTable<any>;
|
||||||
@@ -12,8 +13,20 @@ interface Props {
|
|||||||
objects: string;
|
objects: string;
|
||||||
color?: string;
|
color?: string;
|
||||||
customAddBtn?: ReactNode;
|
customAddBtn?: ReactNode;
|
||||||
|
permissionSection?: Section | typeof ADMIN;
|
||||||
|
permission?: Permission;
|
||||||
}
|
}
|
||||||
function EmptyData({ tableInstance, onNew, isFiltered, object, objects, color = "primary", customAddBtn }: Props) {
|
function EmptyData({
|
||||||
|
tableInstance,
|
||||||
|
onNew,
|
||||||
|
isFiltered,
|
||||||
|
object,
|
||||||
|
objects,
|
||||||
|
color = "primary",
|
||||||
|
customAddBtn,
|
||||||
|
permissionSection,
|
||||||
|
permission,
|
||||||
|
}: Props) {
|
||||||
return (
|
return (
|
||||||
<tr>
|
<tr>
|
||||||
<td colSpan={tableInstance.getVisibleFlatColumns().length}>
|
<td colSpan={tableInstance.getVisibleFlatColumns().length}>
|
||||||
@@ -27,6 +40,7 @@ function EmptyData({ tableInstance, onNew, isFiltered, object, objects, color =
|
|||||||
<h2>
|
<h2>
|
||||||
<T id="object.empty" tData={{ objects }} />
|
<T id="object.empty" tData={{ objects }} />
|
||||||
</h2>
|
</h2>
|
||||||
|
<HasPermission section={permissionSection} permission={permission || MANAGE} hideError>
|
||||||
<p className="text-muted">
|
<p className="text-muted">
|
||||||
<T id="empty-subtitle" />
|
<T id="empty-subtitle" />
|
||||||
</p>
|
</p>
|
||||||
@@ -37,6 +51,7 @@ function EmptyData({ tableInstance, onNew, isFiltered, object, objects, color =
|
|||||||
<T id="object.add" tData={{ object }} />
|
<T id="object.add" tData={{ object }} />
|
||||||
</Button>
|
</Button>
|
||||||
)}
|
)}
|
||||||
|
</HasPermission>
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -3,25 +3,29 @@ import Alert from "react-bootstrap/Alert";
|
|||||||
import { Loading, LoadingPage } from "src/components";
|
import { Loading, LoadingPage } from "src/components";
|
||||||
import { useUser } from "src/hooks";
|
import { useUser } from "src/hooks";
|
||||||
import { T } from "src/locale";
|
import { T } from "src/locale";
|
||||||
|
import { type ADMIN, hasPermission, type Permission, type Section } from "src/modules/Permissions";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
permission: string;
|
section?: Section | typeof ADMIN;
|
||||||
type: "manage" | "view";
|
permission: Permission;
|
||||||
hideError?: boolean;
|
hideError?: boolean;
|
||||||
children?: ReactNode;
|
children?: ReactNode;
|
||||||
pageLoading?: boolean;
|
pageLoading?: boolean;
|
||||||
loadingNoLogo?: boolean;
|
loadingNoLogo?: boolean;
|
||||||
}
|
}
|
||||||
function HasPermission({
|
function HasPermission({
|
||||||
|
section,
|
||||||
permission,
|
permission,
|
||||||
type,
|
|
||||||
children,
|
children,
|
||||||
hideError = false,
|
hideError = false,
|
||||||
pageLoading = false,
|
pageLoading = false,
|
||||||
loadingNoLogo = false,
|
loadingNoLogo = false,
|
||||||
}: Props) {
|
}: Props) {
|
||||||
const { data, isLoading } = useUser("me");
|
const { data, isLoading } = useUser("me");
|
||||||
const perms = data?.permissions;
|
|
||||||
|
if (!section) {
|
||||||
|
return <>{children}</>;
|
||||||
|
}
|
||||||
|
|
||||||
if (isLoading) {
|
if (isLoading) {
|
||||||
if (hideError) {
|
if (hideError) {
|
||||||
@@ -33,33 +37,7 @@ function HasPermission({
|
|||||||
return <Loading noLogo={loadingNoLogo} />;
|
return <Loading noLogo={loadingNoLogo} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
let allowed = permission === "";
|
const allowed = hasPermission(section, permission, data?.permissions, data?.roles);
|
||||||
const acceptable = ["manage", type];
|
|
||||||
|
|
||||||
switch (permission) {
|
|
||||||
case "admin":
|
|
||||||
allowed = data?.roles?.includes("admin") || false;
|
|
||||||
break;
|
|
||||||
case "proxyHosts":
|
|
||||||
allowed = acceptable.indexOf(perms?.proxyHosts || "") !== -1;
|
|
||||||
break;
|
|
||||||
case "redirectionHosts":
|
|
||||||
allowed = acceptable.indexOf(perms?.redirectionHosts || "") !== -1;
|
|
||||||
break;
|
|
||||||
case "deadHosts":
|
|
||||||
allowed = acceptable.indexOf(perms?.deadHosts || "") !== -1;
|
|
||||||
break;
|
|
||||||
case "streams":
|
|
||||||
allowed = acceptable.indexOf(perms?.streams || "") !== -1;
|
|
||||||
break;
|
|
||||||
case "accessLists":
|
|
||||||
allowed = acceptable.indexOf(perms?.accessLists || "") !== -1;
|
|
||||||
break;
|
|
||||||
case "certificates":
|
|
||||||
allowed = acceptable.indexOf(perms?.certificates || "") !== -1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (allowed) {
|
if (allowed) {
|
||||||
return <>{children}</>;
|
return <>{children}</>;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { IconLock, IconLogout, IconUser } from "@tabler/icons-react";
|
import { IconLock, IconLogout, IconUser } from "@tabler/icons-react";
|
||||||
import { LocalePicker, ThemeSwitcher, NavLink } from "src/components";
|
import { LocalePicker, NavLink, ThemeSwitcher } from "src/components";
|
||||||
import { useAuthState } from "src/context";
|
import { useAuthState } from "src/context";
|
||||||
import { useUser } from "src/hooks";
|
import { useUser } from "src/hooks";
|
||||||
import { T } from "src/locale";
|
import { T } from "src/locale";
|
||||||
|
|||||||
@@ -11,14 +11,26 @@ import cn from "classnames";
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import { HasPermission, NavLink } from "src/components";
|
import { HasPermission, NavLink } from "src/components";
|
||||||
import { T } from "src/locale";
|
import { T } from "src/locale";
|
||||||
|
import {
|
||||||
|
ACCESS_LISTS,
|
||||||
|
ADMIN,
|
||||||
|
CERTIFICATES,
|
||||||
|
DEAD_HOSTS,
|
||||||
|
type MANAGE,
|
||||||
|
PROXY_HOSTS,
|
||||||
|
REDIRECTION_HOSTS,
|
||||||
|
type Section,
|
||||||
|
STREAMS,
|
||||||
|
VIEW,
|
||||||
|
} from "src/modules/Permissions";
|
||||||
|
|
||||||
interface MenuItem {
|
interface MenuItem {
|
||||||
label: string;
|
label: string;
|
||||||
icon?: React.ElementType;
|
icon?: React.ElementType;
|
||||||
to?: string;
|
to?: string;
|
||||||
items?: MenuItem[];
|
items?: MenuItem[];
|
||||||
permission?: string;
|
permissionSection?: Section | typeof ADMIN;
|
||||||
permissionType?: "view" | "manage";
|
permission?: typeof VIEW | typeof MANAGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
const menuItems: MenuItem[] = [
|
const menuItems: MenuItem[] = [
|
||||||
@@ -34,26 +46,26 @@ const menuItems: MenuItem[] = [
|
|||||||
{
|
{
|
||||||
to: "/nginx/proxy",
|
to: "/nginx/proxy",
|
||||||
label: "proxy-hosts",
|
label: "proxy-hosts",
|
||||||
permission: "proxyHosts",
|
permissionSection: PROXY_HOSTS,
|
||||||
permissionType: "view",
|
permission: VIEW,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
to: "/nginx/redirection",
|
to: "/nginx/redirection",
|
||||||
label: "redirection-hosts",
|
label: "redirection-hosts",
|
||||||
permission: "redirectionHosts",
|
permissionSection: REDIRECTION_HOSTS,
|
||||||
permissionType: "view",
|
permission: VIEW,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
to: "/nginx/stream",
|
to: "/nginx/stream",
|
||||||
label: "streams",
|
label: "streams",
|
||||||
permission: "streams",
|
permissionSection: STREAMS,
|
||||||
permissionType: "view",
|
permission: VIEW,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
to: "/nginx/404",
|
to: "/nginx/404",
|
||||||
label: "dead-hosts",
|
label: "dead-hosts",
|
||||||
permission: "deadHosts",
|
permissionSection: DEAD_HOSTS,
|
||||||
permissionType: "view",
|
permission: VIEW,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@@ -61,33 +73,33 @@ const menuItems: MenuItem[] = [
|
|||||||
to: "/access",
|
to: "/access",
|
||||||
icon: IconLock,
|
icon: IconLock,
|
||||||
label: "access-lists",
|
label: "access-lists",
|
||||||
permission: "accessLists",
|
permissionSection: ACCESS_LISTS,
|
||||||
permissionType: "view",
|
permission: VIEW,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
to: "/certificates",
|
to: "/certificates",
|
||||||
icon: IconShield,
|
icon: IconShield,
|
||||||
label: "certificates",
|
label: "certificates",
|
||||||
permission: "certificates",
|
permissionSection: CERTIFICATES,
|
||||||
permissionType: "view",
|
permission: VIEW,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
to: "/users",
|
to: "/users",
|
||||||
icon: IconUser,
|
icon: IconUser,
|
||||||
label: "users",
|
label: "users",
|
||||||
permission: "admin",
|
permissionSection: ADMIN,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
to: "/audit-log",
|
to: "/audit-log",
|
||||||
icon: IconBook,
|
icon: IconBook,
|
||||||
label: "auditlogs",
|
label: "auditlogs",
|
||||||
permission: "admin",
|
permissionSection: ADMIN,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
to: "/settings",
|
to: "/settings",
|
||||||
icon: IconSettings,
|
icon: IconSettings,
|
||||||
label: "settings",
|
label: "settings",
|
||||||
permission: "admin",
|
permissionSection: ADMIN,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -99,8 +111,8 @@ const getMenuItem = (item: MenuItem, onClick?: () => void) => {
|
|||||||
return (
|
return (
|
||||||
<HasPermission
|
<HasPermission
|
||||||
key={`item-${item.label}`}
|
key={`item-${item.label}`}
|
||||||
permission={item.permission || ""}
|
section={item.permissionSection}
|
||||||
type={item.permissionType || "view"}
|
permission={item.permission || VIEW}
|
||||||
hideError
|
hideError
|
||||||
>
|
>
|
||||||
<li className="nav-item">
|
<li className="nav-item">
|
||||||
@@ -122,8 +134,8 @@ const getMenuDropown = (item: MenuItem, onClick?: () => void) => {
|
|||||||
return (
|
return (
|
||||||
<HasPermission
|
<HasPermission
|
||||||
key={`item-${item.label}`}
|
key={`item-${item.label}`}
|
||||||
permission={item.permission || ""}
|
section={item.permissionSection}
|
||||||
type={item.permissionType || "view"}
|
permission={item.permission || VIEW}
|
||||||
hideError
|
hideError
|
||||||
>
|
>
|
||||||
<li className={cns}>
|
<li className={cns}>
|
||||||
@@ -147,8 +159,8 @@ const getMenuDropown = (item: MenuItem, onClick?: () => void) => {
|
|||||||
return (
|
return (
|
||||||
<HasPermission
|
<HasPermission
|
||||||
key={`${idx}-${subitem.to}`}
|
key={`${idx}-${subitem.to}`}
|
||||||
permission={subitem.permission || ""}
|
section={subitem.permissionSection}
|
||||||
type={subitem.permissionType || "view"}
|
permission={subitem.permission || VIEW}
|
||||||
hideError
|
hideError
|
||||||
>
|
>
|
||||||
<NavLink to={subitem.to} isDropdownItem onClick={onClick}>
|
<NavLink to={subitem.to} isDropdownItem onClick={onClick}>
|
||||||
|
|||||||
@@ -1,13 +1,14 @@
|
|||||||
import { useQueryClient } from "@tanstack/react-query";
|
import { useQueryClient } from "@tanstack/react-query";
|
||||||
import { createContext, type ReactNode, useContext, useState } from "react";
|
import { createContext, type ReactNode, useContext, useState } from "react";
|
||||||
import { useIntervalWhen } from "rooks";
|
import { useIntervalWhen } from "rooks";
|
||||||
import { getToken, refreshToken, type TokenResponse } from "src/api/backend";
|
import { getToken, loginAsUser, refreshToken, type TokenResponse } from "src/api/backend";
|
||||||
import AuthStore from "src/modules/AuthStore";
|
import AuthStore from "src/modules/AuthStore";
|
||||||
|
|
||||||
// Context
|
// Context
|
||||||
export interface AuthContextType {
|
export interface AuthContextType {
|
||||||
authenticated: boolean;
|
authenticated: boolean;
|
||||||
login: (username: string, password: string) => Promise<void>;
|
login: (username: string, password: string) => Promise<void>;
|
||||||
|
loginAs: (id: number) => Promise<void>;
|
||||||
logout: () => void;
|
logout: () => void;
|
||||||
token?: string;
|
token?: string;
|
||||||
}
|
}
|
||||||
@@ -34,7 +35,20 @@ function AuthProvider({ children, tokenRefreshInterval = 5 * 60 * 1000 }: Props)
|
|||||||
handleTokenUpdate(response);
|
handleTokenUpdate(response);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const loginAs = async (id: number) => {
|
||||||
|
const response = await loginAsUser(id);
|
||||||
|
AuthStore.add(response);
|
||||||
|
queryClient.clear();
|
||||||
|
window.location.reload();
|
||||||
|
};
|
||||||
|
|
||||||
const logout = () => {
|
const logout = () => {
|
||||||
|
if (AuthStore.count() >= 2) {
|
||||||
|
AuthStore.drop();
|
||||||
|
queryClient.clear();
|
||||||
|
window.location.reload();
|
||||||
|
return;
|
||||||
|
}
|
||||||
AuthStore.clear();
|
AuthStore.clear();
|
||||||
setAuthenticated(false);
|
setAuthenticated(false);
|
||||||
queryClient.clear();
|
queryClient.clear();
|
||||||
@@ -55,7 +69,7 @@ function AuthProvider({ children, tokenRefreshInterval = 5 * 60 * 1000 }: Props)
|
|||||||
true,
|
true,
|
||||||
);
|
);
|
||||||
|
|
||||||
const value = { authenticated, login, logout };
|
const value = { authenticated, login, logout, loginAs };
|
||||||
|
|
||||||
return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;
|
return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -201,6 +201,7 @@
|
|||||||
"user.current-password": "Current Password",
|
"user.current-password": "Current Password",
|
||||||
"user.edit-profile": "Edit Profile",
|
"user.edit-profile": "Edit Profile",
|
||||||
"user.full-name": "Full Name",
|
"user.full-name": "Full Name",
|
||||||
|
"user.login-as": "Sign in as {name}",
|
||||||
"user.logout": "Logout",
|
"user.logout": "Logout",
|
||||||
"user.new-password": "New Password",
|
"user.new-password": "New Password",
|
||||||
"user.nickname": "Nickname",
|
"user.nickname": "Nickname",
|
||||||
|
|||||||
@@ -1,3 +1,214 @@
|
|||||||
{
|
{
|
||||||
"dashboard": "داشبورد"
|
"access-list": "لیست دسترسی",
|
||||||
|
"access-list.access-count": "{count} {count, plural, one {Rule} other {Rules}}",
|
||||||
|
"access-list.auth-count": "{count} {count, plural, one {User} other {Users}}",
|
||||||
|
"access-list.help-rules-last": "When at least 1 rule exists, this deny all rule will be added last",
|
||||||
|
"access-list.help.rules-order": "توجه داشته باشید که دستورات allow و deny به ترتیب تعریفشده اعمال خواهند شد.",
|
||||||
|
"access-list.pass-auth": "ارسال احراز هویت به سرور بالادستی",
|
||||||
|
"access-list.public": "قابل دسترسی برای عموم",
|
||||||
|
"access-list.public.subtitle": "نیازی به احراز هویت پایه نیست",
|
||||||
|
"access-list.satisfy-any": "Satisfy Any",
|
||||||
|
"access-list.subtitle": "{users} {users, plural, one {User} other {Users}}, {rules} {rules, plural, one {Rule} other {Rules}} - Created: {date}",
|
||||||
|
"access-lists": "لیستهای دسترسی",
|
||||||
|
"action.add": "افزودن",
|
||||||
|
"action.add-location": "افزودن مکان",
|
||||||
|
"action.close": "بستن",
|
||||||
|
"action.delete": "حذف",
|
||||||
|
"action.disable": "غیرفعال",
|
||||||
|
"action.download": "دانلود",
|
||||||
|
"action.edit": "ویرایش",
|
||||||
|
"action.enable": "فعالسازی",
|
||||||
|
"action.permissions": "مجوزها",
|
||||||
|
"action.renew": "تجدید",
|
||||||
|
"action.view-details": "مشاهده جزئیات",
|
||||||
|
"auditlogs": "لاگهای بررسی",
|
||||||
|
"cancel": "لغو",
|
||||||
|
"certificate": "گواهینامه",
|
||||||
|
"certificate.custom-certificate": "Certificate",
|
||||||
|
"certificate.custom-certificate-key": "Certificate Key",
|
||||||
|
"certificate.custom-intermediate": "Intermediate Certificate",
|
||||||
|
"certificate.in-use": "In Use",
|
||||||
|
"certificate.none.subtitle": "No certificate assigned",
|
||||||
|
"certificate.none.subtitle.for-http": "This host will not use HTTPS",
|
||||||
|
"certificate.none.title": "None",
|
||||||
|
"certificate.not-in-use": "Not Used",
|
||||||
|
"certificates": "Certificates",
|
||||||
|
"certificates.custom": "Custom Certificate",
|
||||||
|
"certificates.custom.warning": "Key files protected with a passphrase are not supported.",
|
||||||
|
"certificates.dns.credentials": "Credentials File Content",
|
||||||
|
"certificates.dns.credentials-note": "This plugin requires a configuration file containing an API token or other credentials for your provider",
|
||||||
|
"certificates.dns.credentials-warning": "This data will be stored as plaintext in the database and in a file!",
|
||||||
|
"certificates.dns.propagation-seconds": "Propagation Seconds",
|
||||||
|
"certificates.dns.propagation-seconds-note": "Leave empty to use the plugins default value. Number of seconds to wait for DNS propagation.",
|
||||||
|
"certificates.dns.provider": "DNS Provider",
|
||||||
|
"certificates.dns.warning": "This section requires some knowledge about Certbot and its DNS plugins. Please consult the respective plugins documentation.",
|
||||||
|
"certificates.http.reachability-404": "There is a server found at this domain but it does not seem to be Nginx Proxy Manager. Please make sure your domain points to the IP where your NPM instance is running.",
|
||||||
|
"certificates.http.reachability-failed-to-check": "Failed to check the reachability due to a communication error with site24x7.com.",
|
||||||
|
"certificates.http.reachability-not-resolved": "There is no server available at this domain. Please make sure your domain exists and points to the IP where your NPM instance is running and if necessary port 80 is forwarded in your router.",
|
||||||
|
"certificates.http.reachability-ok": "Your server is reachable and creating certificates should be possible.",
|
||||||
|
"certificates.http.reachability-other": "There is a server found at this domain but it returned an unexpected status code {code}. Is it the NPM server? Please make sure your domain points to the IP where your NPM instance is running.",
|
||||||
|
"certificates.http.reachability-wrong-data": "There is a server found at this domain but it returned an unexpected data. Is it the NPM server? Please make sure your domain points to the IP where your NPM instance is running.",
|
||||||
|
"certificates.http.test-results": "Test Results",
|
||||||
|
"certificates.http.warning": "These domains must be already configured to point to this installation.",
|
||||||
|
"certificates.request.subtitle": "with Let's Encrypt",
|
||||||
|
"certificates.request.title": "Request a new Certificate",
|
||||||
|
"column.access": "Access",
|
||||||
|
"column.authorization": "Authorization",
|
||||||
|
"column.authorizations": "Authorizations",
|
||||||
|
"column.custom-locations": "Custom Locations",
|
||||||
|
"column.destination": "Destination",
|
||||||
|
"column.details": "Details",
|
||||||
|
"column.email": "Email",
|
||||||
|
"column.event": "Event",
|
||||||
|
"column.expires": "Expires",
|
||||||
|
"column.http-code": "Access",
|
||||||
|
"column.incoming-port": "Incoming Port",
|
||||||
|
"column.name": "Name",
|
||||||
|
"column.protocol": "Protocol",
|
||||||
|
"column.provider": "Provider",
|
||||||
|
"column.roles": "Roles",
|
||||||
|
"column.rules": "Rules",
|
||||||
|
"column.satisfy": "Satisfy",
|
||||||
|
"column.satisfy-all": "All",
|
||||||
|
"column.satisfy-any": "Any",
|
||||||
|
"column.scheme": "Scheme",
|
||||||
|
"column.source": "Source",
|
||||||
|
"column.ssl": "SSL",
|
||||||
|
"column.status": "Status",
|
||||||
|
"created-on": "Created: {date}",
|
||||||
|
"dashboard": "خانه",
|
||||||
|
"dead-host": "404 Host",
|
||||||
|
"dead-hosts": "404 Hosts",
|
||||||
|
"dead-hosts.count": "{count} {count, plural, one {404 Host} other {404 Hosts}}",
|
||||||
|
"disabled": "Disabled",
|
||||||
|
"domain-names": "Domain Names",
|
||||||
|
"domain-names.max": "{count} domain names maximum",
|
||||||
|
"domain-names.placeholder": "Start typing to add domain...",
|
||||||
|
"domain-names.wildcards-not-permitted": "Wildcards not permitted for this type",
|
||||||
|
"domain-names.wildcards-not-supported": "Wildcards not supported for this CA",
|
||||||
|
"domains.force-ssl": "Force SSL",
|
||||||
|
"domains.hsts-enabled": "HSTS Enabled",
|
||||||
|
"domains.hsts-subdomains": "HSTS Sub-domains",
|
||||||
|
"domains.http2-support": "HTTP/2 Support",
|
||||||
|
"domains.use-dns": "Use DNS Challenge",
|
||||||
|
"email-address": "نشانی ایمیل",
|
||||||
|
"empty-search": "هیچ نتیجهای یافت نشد",
|
||||||
|
"empty-subtitle": "چرا یکی ایجاد نمیکنید؟",
|
||||||
|
"enabled": "فعال",
|
||||||
|
"error.access.at-least-one": "Either one Authorization or one Access Rule is required",
|
||||||
|
"error.access.duplicate-usernames": "Authorization Usernames must be unique",
|
||||||
|
"error.invalid-auth": "ایمیل یا رمز عبور نامعتبر است",
|
||||||
|
"error.invalid-domain": "Invalid domain: {domain}",
|
||||||
|
"error.invalid-email": "نشانی ایمیل نامعتبر است",
|
||||||
|
"error.max-character-length": "Maximum length is {max} character{max, plural, one {} other {s}}",
|
||||||
|
"error.max-domains": "Too many domains, max is {max}",
|
||||||
|
"error.maximum": "Maximum is {max}",
|
||||||
|
"error.min-character-length": "Minimum length is {min} character{min, plural, one {} other {s}}",
|
||||||
|
"error.minimum": "Minimum is {min}",
|
||||||
|
"error.passwords-must-match": "Passwords must match",
|
||||||
|
"error.required": "This is required",
|
||||||
|
"expires.on": "Expires: {date}",
|
||||||
|
"footer.github-fork": "Fork me on Github",
|
||||||
|
"host.flags.block-exploits": "Block Common Exploits",
|
||||||
|
"host.flags.cache-assets": "Cache Assets",
|
||||||
|
"host.flags.preserve-path": "Preserve Path",
|
||||||
|
"host.flags.protocols": "Protocols",
|
||||||
|
"host.flags.websockets-upgrade": "Websockets Support",
|
||||||
|
"host.forward-port": "Forward Port",
|
||||||
|
"host.forward-scheme": "Scheme",
|
||||||
|
"hosts": "Hosts",
|
||||||
|
"http-only": "HTTP Only",
|
||||||
|
"lets-encrypt": "Let's Encrypt",
|
||||||
|
"lets-encrypt-via-dns": "Let's Encrypt via DNS",
|
||||||
|
"lets-encrypt-via-http": "Let's Encrypt via HTTP",
|
||||||
|
"loading": "Loading…",
|
||||||
|
"login.title": "Login to your account",
|
||||||
|
"nginx-config.label": "Custom Nginx Configuration",
|
||||||
|
"nginx-config.placeholder": "# Enter your custom Nginx configuration here at your own risk!",
|
||||||
|
"no-permission-error": "You do not have access to view this.",
|
||||||
|
"notfound.action": "Take me home",
|
||||||
|
"notfound.content": "We are sorry but the page you are looking for was not found",
|
||||||
|
"notfound.title": "Oops… You just found an error page",
|
||||||
|
"notification.error": "Error",
|
||||||
|
"notification.object-deleted": "{object} has been deleted",
|
||||||
|
"notification.object-disabled": "{object} has been disabled",
|
||||||
|
"notification.object-enabled": "{object} has been enabled",
|
||||||
|
"notification.object-renewed": "{object} has been renewed",
|
||||||
|
"notification.object-saved": "{object} has been saved",
|
||||||
|
"notification.success": "Success",
|
||||||
|
"object.actions-title": "{object} #{id}",
|
||||||
|
"object.add": "{object} افزودن",
|
||||||
|
"object.delete": "Delete {object}",
|
||||||
|
"object.delete.content": "Are you sure you want to delete this {object}?",
|
||||||
|
"object.edit": "Edit {object}",
|
||||||
|
"object.empty": "There are no {objects}",
|
||||||
|
"object.event.created": "Created {object}",
|
||||||
|
"object.event.deleted": "Deleted {object}",
|
||||||
|
"object.event.disabled": "Disabled {object}",
|
||||||
|
"object.event.enabled": "Enabled {object}",
|
||||||
|
"object.event.renewed": "Renewed {object}",
|
||||||
|
"object.event.updated": "Updated {object}",
|
||||||
|
"offline": "Offline",
|
||||||
|
"online": "Online",
|
||||||
|
"options": "Options",
|
||||||
|
"password": "Password",
|
||||||
|
"password.generate": "Generate random password",
|
||||||
|
"password.hide": "Hide Password",
|
||||||
|
"password.show": "Show Password",
|
||||||
|
"permissions.hidden": "Hidden",
|
||||||
|
"permissions.manage": "Manage",
|
||||||
|
"permissions.view": "View Only",
|
||||||
|
"permissions.visibility.all": "All Items",
|
||||||
|
"permissions.visibility.title": "Item Visibility",
|
||||||
|
"permissions.visibility.user": "Created Items Only",
|
||||||
|
"proxy-host": "Proxy Host",
|
||||||
|
"proxy-host.forward-host": "Forward Hostname / IP",
|
||||||
|
"proxy-hosts": "Proxy Hosts",
|
||||||
|
"proxy-hosts.count": "{count} {count, plural, one {Proxy Host} other {Proxy Hosts}}",
|
||||||
|
"public": "Public",
|
||||||
|
"redirection-host": "Redirection Host",
|
||||||
|
"redirection-host.forward-domain": "Forward Domain",
|
||||||
|
"redirection-hosts": "Redirection Hosts",
|
||||||
|
"redirection-hosts.count": "{count} {count, plural, one {Redirection Host} other {Redirection Hosts}}",
|
||||||
|
"role.admin": "Administrator",
|
||||||
|
"role.standard-user": "Standard User",
|
||||||
|
"save": "Save",
|
||||||
|
"setting": "Setting",
|
||||||
|
"settings": "Settings",
|
||||||
|
"settings.default-site": "Default Site",
|
||||||
|
"settings.default-site.404": "404 Page",
|
||||||
|
"settings.default-site.444": "No Response (444)",
|
||||||
|
"settings.default-site.congratulations": "Congratulations Page",
|
||||||
|
"settings.default-site.description": "What to show when Nginx is hit with an unknown Host",
|
||||||
|
"settings.default-site.html": "Custom HTML",
|
||||||
|
"settings.default-site.html.placeholder": "<!-- Enter your custom HTML content here -->",
|
||||||
|
"settings.default-site.redirect": "Redirect",
|
||||||
|
"setup.preamble": "Get started by creating your admin account.",
|
||||||
|
"setup.title": "Welcome!",
|
||||||
|
"sign-in": "Sign in",
|
||||||
|
"ssl-certificate": "SSL Certificate",
|
||||||
|
"stream": "Stream",
|
||||||
|
"stream.forward-host": "Forward Host",
|
||||||
|
"stream.incoming-port": "Incoming Port",
|
||||||
|
"streams": "Streams",
|
||||||
|
"streams.count": "{count} {count, plural, one {Stream} other {Streams}}",
|
||||||
|
"streams.tcp": "TCP",
|
||||||
|
"streams.udp": "UDP",
|
||||||
|
"test": "Test",
|
||||||
|
"user": "کاربر",
|
||||||
|
"user.change-password": "Change Password",
|
||||||
|
"user.confirm-password": "Confirm Password",
|
||||||
|
"user.current-password": "رمز عبور فعلی",
|
||||||
|
"user.edit-profile": "ویرایش پروفایل",
|
||||||
|
"user.full-name": "نام کامل",
|
||||||
|
"user.login-as": "Sign in as {name}",
|
||||||
|
"user.logout": "خروج",
|
||||||
|
"user.new-password": "رمز عبور جدید",
|
||||||
|
"user.nickname": "نام مستعار",
|
||||||
|
"user.set-password": "تنظیم رمز عبور",
|
||||||
|
"user.set-permissions": "Set Permissions for {name}",
|
||||||
|
"user.switch-dark": "تغییر به حالت تاریک",
|
||||||
|
"user.switch-light": "تغییر به حالت روشن",
|
||||||
|
"username": "نام کاربری",
|
||||||
|
"users": "کاربران"
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"locale-de-DE": "Deutsch",
|
|
||||||
"locale-en-US": "English",
|
"locale-en-US": "English",
|
||||||
"locale-fa-IR": "فارسی"
|
"locale-fa-IR": "فارسی"
|
||||||
}
|
}
|
||||||
7
frontend/src/locale/src/HelpDoc/fa/AccessLists.md
Normal file
7
frontend/src/locale/src/HelpDoc/fa/AccessLists.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
## What is an Access List?
|
||||||
|
|
||||||
|
Access Lists provide a blacklist or whitelist of specific client IP addresses along with authentication for the Proxy Hosts via Basic HTTP Authentication.
|
||||||
|
|
||||||
|
You can configure multiple client rules, usernames and passwords for a single Access List and then apply that to one or more _Proxy Hosts_.
|
||||||
|
|
||||||
|
This is most useful for forwarded web services that do not have authentication mechanisms built in or when you want to protect from unknown clients.
|
||||||
32
frontend/src/locale/src/HelpDoc/fa/Certificates.md
Normal file
32
frontend/src/locale/src/HelpDoc/fa/Certificates.md
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
## Certificates Help
|
||||||
|
|
||||||
|
### HTTP Certificate
|
||||||
|
|
||||||
|
A HTTP validated certificate means Let's Encrypt servers will
|
||||||
|
attempt to reach your domains over HTTP (not HTTPS!) and if successful, they
|
||||||
|
will issue your certificate.
|
||||||
|
|
||||||
|
For this method, you will have to have a _Proxy Host_ created for your domains(s) that
|
||||||
|
is accessible with HTTP and pointing to this Nginx installation. After a certificate
|
||||||
|
has been given, you can modify the _Proxy Host_ to also use this certificate for HTTPS
|
||||||
|
connections. However, the _Proxy Host_ will still need to be configured for HTTP access
|
||||||
|
in order for the certificate to renew.
|
||||||
|
|
||||||
|
This process _does not_ support wildcard domains.
|
||||||
|
|
||||||
|
### DNS Certificate
|
||||||
|
|
||||||
|
A DNS validated certificate requires you to use a DNS Provider plugin. This DNS
|
||||||
|
Provider will be used to create temporary records on your domain and then Let's
|
||||||
|
Encrypt will query those records to be sure you're the owner and if successful, they
|
||||||
|
will issue your certificate.
|
||||||
|
|
||||||
|
You do not need a _Proxy Host_ to be created prior to requesting this type of
|
||||||
|
certificate. Nor do you need to have your _Proxy Host_ configured for HTTP access.
|
||||||
|
|
||||||
|
This process _does_ support wildcard domains.
|
||||||
|
|
||||||
|
### Custom Certificate
|
||||||
|
|
||||||
|
Use this option to upload your own SSL Certificate, as provided by your own
|
||||||
|
Certificate Authority.
|
||||||
10
frontend/src/locale/src/HelpDoc/fa/DeadHosts.md
Normal file
10
frontend/src/locale/src/HelpDoc/fa/DeadHosts.md
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
## What is a 404 Host?
|
||||||
|
|
||||||
|
A 404 Host is simply a host setup that shows a 404 page.
|
||||||
|
|
||||||
|
This can be useful when your domain is listed in search engines and you want
|
||||||
|
to provide a nicer error page or specifically to tell the search indexers that
|
||||||
|
the domain pages no longer exist.
|
||||||
|
|
||||||
|
Another benefit of having this host is to track the logs for hits to it and
|
||||||
|
view the referrers.
|
||||||
7
frontend/src/locale/src/HelpDoc/fa/ProxyHosts.md
Normal file
7
frontend/src/locale/src/HelpDoc/fa/ProxyHosts.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
## What is a Proxy Host?
|
||||||
|
|
||||||
|
A Proxy Host is the incoming endpoint for a web service that you want to forward.
|
||||||
|
|
||||||
|
It provides optional SSL termination for your service that might not have SSL support built in.
|
||||||
|
|
||||||
|
Proxy Hosts are the most common use for the Nginx Proxy Manager.
|
||||||
7
frontend/src/locale/src/HelpDoc/fa/RedirectionHosts.md
Normal file
7
frontend/src/locale/src/HelpDoc/fa/RedirectionHosts.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
## What is a Redirection Host?
|
||||||
|
|
||||||
|
A Redirection Host will redirect requests from the incoming domain and push the
|
||||||
|
viewer to another domain.
|
||||||
|
|
||||||
|
The most common reason to use this type of host is when your website changes
|
||||||
|
domains but you still have search engine or referrer links pointing to the old domain.
|
||||||
6
frontend/src/locale/src/HelpDoc/fa/Streams.md
Normal file
6
frontend/src/locale/src/HelpDoc/fa/Streams.md
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
## What is a Stream?
|
||||||
|
|
||||||
|
A relatively new feature for Nginx, a Stream will serve to forward TCP/UDP
|
||||||
|
traffic directly to another computer on the network.
|
||||||
|
|
||||||
|
If you're running game servers, FTP or SSH servers this can come in handy.
|
||||||
6
frontend/src/locale/src/HelpDoc/fa/index.ts
Normal file
6
frontend/src/locale/src/HelpDoc/fa/index.ts
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
export * as AccessLists from "./AccessLists.md";
|
||||||
|
export * as Certificates from "./Certificates.md";
|
||||||
|
export * as DeadHosts from "./DeadHosts.md";
|
||||||
|
export * as ProxyHosts from "./ProxyHosts.md";
|
||||||
|
export * as RedirectionHosts from "./RedirectionHosts.md";
|
||||||
|
export * as Streams from "./Streams.md";
|
||||||
@@ -1,17 +1,22 @@
|
|||||||
// import * as de from "./de/index";
|
|
||||||
// import * as fa from "./fa/index";
|
|
||||||
import * as en from "./en/index";
|
import * as en from "./en/index";
|
||||||
|
import * as fa from "./fa/index";
|
||||||
|
|
||||||
const items: any = { en };
|
const items: any = { en, fa };
|
||||||
|
|
||||||
const fallbackLang = "en";
|
const fallbackLang = "en";
|
||||||
|
|
||||||
export const getHelpFile = (lang: string, section: string): string => {
|
export const getHelpFile = (lang: string, section: string): string => {
|
||||||
if (typeof items[lang] !== "undefined" && typeof items[lang][section] !== "undefined") {
|
if (
|
||||||
|
typeof items[lang] !== "undefined" &&
|
||||||
|
typeof items[lang][section] !== "undefined"
|
||||||
|
) {
|
||||||
return items[lang][section].default;
|
return items[lang][section].default;
|
||||||
}
|
}
|
||||||
// Fallback to English
|
// Fallback to English
|
||||||
if (typeof items[fallbackLang] !== "undefined" && typeof items[fallbackLang][section] !== "undefined") {
|
if (
|
||||||
|
typeof items[fallbackLang] !== "undefined" &&
|
||||||
|
typeof items[fallbackLang][section] !== "undefined"
|
||||||
|
) {
|
||||||
return items[fallbackLang][section].default;
|
return items[fallbackLang][section].default;
|
||||||
}
|
}
|
||||||
throw new Error(`Cannot load help doc for ${lang}-${section}`);
|
throw new Error(`Cannot load help doc for ${lang}-${section}`);
|
||||||
|
|||||||
@@ -605,6 +605,9 @@
|
|||||||
"user.full-name": {
|
"user.full-name": {
|
||||||
"defaultMessage": "Full Name"
|
"defaultMessage": "Full Name"
|
||||||
},
|
},
|
||||||
|
"user.login-as": {
|
||||||
|
"defaultMessage": "Sign in as {name}"
|
||||||
|
},
|
||||||
"user.logout": {
|
"user.logout": {
|
||||||
"defaultMessage": "Logout"
|
"defaultMessage": "Logout"
|
||||||
},
|
},
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user