mirror of
				https://github.com/NginxProxyManager/nginx-proxy-manager.git
				synced 2025-10-31 15:53:33 +00:00 
			
		
		
		
	Openapi Schema improvements
- Return proper booleans in api responses - Update jsonschemavalidation to latest draft
This commit is contained in:
		
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -8,7 +8,7 @@ const internalAuditLog    = require('./audit-log'); | ||||
| const internalCertificate = require('./certificate'); | ||||
|  | ||||
| function omissions () { | ||||
| 	return ['is_deleted']; | ||||
| 	return ['is_deleted', 'owner.is_deleted']; | ||||
| } | ||||
|  | ||||
| const internalProxyHost = { | ||||
|   | ||||
| @@ -10,7 +10,7 @@ | ||||
|  | ||||
| const _              = require('lodash'); | ||||
| const logger         = require('../logger').access; | ||||
| const validator      = require('ajv'); | ||||
| const Ajv            = require('ajv/dist/2020'); | ||||
| const error          = require('./error'); | ||||
| const userModel      = require('../models/user'); | ||||
| const proxyHostModel = require('../models/proxy_host'); | ||||
| @@ -174,7 +174,6 @@ module.exports = function (token_string) { | ||||
|  | ||||
| 		let schema = { | ||||
| 			$id:                  'objects', | ||||
| 			$schema:              'http://json-schema.org/draft-07/schema#', | ||||
| 			description:          'Actor Properties', | ||||
| 			type:                 'object', | ||||
| 			additionalProperties: false, | ||||
| @@ -251,7 +250,7 @@ module.exports = function (token_string) { | ||||
| 						// Initialised, token decoded ok | ||||
| 						return this.getObjectSchema(permission) | ||||
| 							.then((objectSchema) => { | ||||
| 								let data_schema = { | ||||
| 								const data_schema = { | ||||
| 									[permission]: { | ||||
| 										data:                         data, | ||||
| 										scope:                        Token.get('scope'), | ||||
| @@ -267,7 +266,6 @@ module.exports = function (token_string) { | ||||
| 								}; | ||||
|  | ||||
| 								let permissionSchema = { | ||||
| 									$schema:              'http://json-schema.org/draft-07/schema#', | ||||
| 									$async:               true, | ||||
| 									$id:                  'permissions', | ||||
| 									additionalProperties: false, | ||||
| @@ -276,14 +274,9 @@ module.exports = function (token_string) { | ||||
|  | ||||
| 								permissionSchema.properties[permission] = require('./access/' + permission.replace(/:/gim, '-') + '.json'); | ||||
|  | ||||
| 								// logger.info('objectSchema', JSON.stringify(objectSchema, null, 2)); | ||||
| 								// logger.info('permissionSchema', JSON.stringify(permissionSchema, null, 2)); | ||||
| 								// logger.info('data_schema', JSON.stringify(data_schema, null, 2)); | ||||
|  | ||||
| 								let ajv = validator({ | ||||
| 								const ajv = new Ajv({ | ||||
| 									verbose:      true, | ||||
| 									allErrors:    true, | ||||
| 									format:       'full', | ||||
| 									missingRefs:  'fail', | ||||
| 									breakOnError: true, | ||||
| 									coerceTypes:  true, | ||||
|   | ||||
| @@ -1,5 +1,4 @@ | ||||
| { | ||||
| 	"$schema": "http://json-schema.org/draft-07/schema#", | ||||
| 	"$id": "perms", | ||||
| 	"definitions": { | ||||
| 		"view": { | ||||
|   | ||||
| @@ -1,5 +1,4 @@ | ||||
| { | ||||
| 	"$schema": "http://json-schema.org/draft-07/schema#", | ||||
| 	"$id": "roles", | ||||
| 	"definitions": { | ||||
| 		"admin": { | ||||
|   | ||||
| @@ -27,6 +27,24 @@ module.exports = { | ||||
| 		} | ||||
|  | ||||
| 		return null; | ||||
| 	}, | ||||
|  | ||||
| 	convertIntFieldsToBool: function (obj, fields) { | ||||
| 		fields.forEach(function (field) { | ||||
| 			if (typeof obj[field] !== 'undefined') { | ||||
| 				obj[field] = obj[field] === 1; | ||||
| 			} | ||||
| 		}); | ||||
| 		return obj; | ||||
| 	}, | ||||
|  | ||||
| 	convertBoolFieldsToInt: function (obj, fields) { | ||||
| 		fields.forEach(function (field) { | ||||
| 			if (typeof obj[field] !== 'undefined') { | ||||
| 				obj[field] = obj[field] ? 1 : 0; | ||||
| 			} | ||||
| 		}); | ||||
| 		return obj; | ||||
| 	} | ||||
|  | ||||
| }; | ||||
|   | ||||
| @@ -1,11 +1,12 @@ | ||||
| const Ajv   = require('ajv/dist/2020'); | ||||
| const error = require('../error'); | ||||
|  | ||||
| const ajv = require('ajv')({ | ||||
| const ajv = new Ajv({ | ||||
| 	verbose:         true, | ||||
| 	validateSchema: true, | ||||
| 	allErrors:      false, | ||||
| 	format:         'full', | ||||
| 	coerceTypes:    true | ||||
| 	allErrors:       true, | ||||
| 	allowUnionTypes: true, | ||||
| 	strict:          false, | ||||
| 	coerceTypes:     true, | ||||
| }); | ||||
|  | ||||
| /** | ||||
| @@ -25,8 +26,8 @@ function apiValidator (schema, payload/*, description*/) { | ||||
| 			return; | ||||
| 		} | ||||
|  | ||||
| 		let validate = ajv.compile(schema); | ||||
| 		let valid    = validate(payload); | ||||
| 		const validate = ajv.compile(schema); | ||||
| 		const valid    = validate(payload); | ||||
|  | ||||
| 		if (valid && !validate.errors) { | ||||
| 			resolve(payload); | ||||
|   | ||||
| @@ -1,14 +1,16 @@ | ||||
| const _                 = require('lodash'); | ||||
| const Ajv               = require('ajv/dist/2020'); | ||||
| const error             = require('../error'); | ||||
| const commonDefinitions = require('../../schema/common.json'); | ||||
|  | ||||
| RegExp.prototype.toJSON = RegExp.prototype.toString; | ||||
|  | ||||
| const ajv = require('ajv')({ | ||||
| const ajv = new Ajv({ | ||||
| 	verbose:         true, | ||||
| 	allErrors:       true, | ||||
| 	format:      'full',  // strict regexes for format checks | ||||
| 	allowUnionTypes: true, | ||||
| 	coerceTypes:     true, | ||||
| 	strict:          false, | ||||
| 	schemas:         [commonDefinitions] | ||||
| }); | ||||
|  | ||||
| @@ -38,7 +40,6 @@ function validator (schema, payload) { | ||||
| 			} | ||||
| 		} | ||||
| 	}); | ||||
|  | ||||
| } | ||||
|  | ||||
| module.exports = validator; | ||||
|   | ||||
| @@ -2,6 +2,7 @@ | ||||
| // http://vincit.github.io/objection.js/ | ||||
|  | ||||
| const db               = require('../db'); | ||||
| const helpers          = require('../lib/helpers'); | ||||
| const Model            = require('objection').Model; | ||||
| const User             = require('./user'); | ||||
| const AccessListAuth   = require('./access_list_auth'); | ||||
| @@ -10,6 +11,12 @@ const now              = require('./now_helper'); | ||||
|  | ||||
| Model.knex(db); | ||||
|  | ||||
| const boolFields = [ | ||||
| 	'is_deleted', | ||||
| 	'satisfy_any', | ||||
| 	'pass_auth', | ||||
| ]; | ||||
|  | ||||
| class AccessList extends Model { | ||||
| 	$beforeInsert () { | ||||
| 		this.created_on  = now(); | ||||
| @@ -25,6 +32,16 @@ class AccessList extends Model { | ||||
| 		this.modified_on = now(); | ||||
| 	} | ||||
|  | ||||
| 	$parseDatabaseJson(json) { | ||||
| 		json = super.$parseDatabaseJson(json); | ||||
| 		return helpers.convertIntFieldsToBool(json, boolFields); | ||||
| 	} | ||||
|  | ||||
| 	$formatDatabaseJson(json) { | ||||
| 		json = helpers.convertBoolFieldsToInt(json, boolFields); | ||||
| 		return super.$formatDatabaseJson(json); | ||||
| 	} | ||||
|  | ||||
| 	static get name () { | ||||
| 		return 'AccessList'; | ||||
| 	} | ||||
|   | ||||
| @@ -3,12 +3,17 @@ | ||||
|  | ||||
| const bcrypt  = require('bcrypt'); | ||||
| const db      = require('../db'); | ||||
| const helpers = require('../lib/helpers'); | ||||
| const Model   = require('objection').Model; | ||||
| const User    = require('./user'); | ||||
| const now     = require('./now_helper'); | ||||
|  | ||||
| Model.knex(db); | ||||
|  | ||||
| const boolFields = [ | ||||
| 	'is_deleted', | ||||
| ]; | ||||
|  | ||||
| function encryptPassword () { | ||||
| 	/* jshint -W040 */ | ||||
| 	let _this = this; | ||||
| @@ -41,6 +46,16 @@ class Auth extends Model { | ||||
| 		return encryptPassword.apply(this, queryContext); | ||||
| 	} | ||||
|  | ||||
| 	$parseDatabaseJson(json) { | ||||
| 		json = super.$parseDatabaseJson(json); | ||||
| 		return helpers.convertIntFieldsToBool(json, boolFields); | ||||
| 	} | ||||
|  | ||||
| 	$formatDatabaseJson(json) { | ||||
| 		json = helpers.convertBoolFieldsToInt(json, boolFields); | ||||
| 		return super.$formatDatabaseJson(json); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Verify a plain password against the encrypted password | ||||
| 	 * | ||||
|   | ||||
| @@ -2,12 +2,17 @@ | ||||
| // http://vincit.github.io/objection.js/ | ||||
|  | ||||
| const db      = require('../db'); | ||||
| const helpers = require('../lib/helpers'); | ||||
| const Model   = require('objection').Model; | ||||
| const User    = require('./user'); | ||||
| const now     = require('./now_helper'); | ||||
|  | ||||
| Model.knex(db); | ||||
|  | ||||
| const boolFields = [ | ||||
| 	'is_deleted', | ||||
| ]; | ||||
|  | ||||
| class Certificate extends Model { | ||||
| 	$beforeInsert () { | ||||
| 		this.created_on  = now(); | ||||
| @@ -40,6 +45,16 @@ class Certificate extends Model { | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	$parseDatabaseJson(json) { | ||||
| 		json = super.$parseDatabaseJson(json); | ||||
| 		return helpers.convertIntFieldsToBool(json, boolFields); | ||||
| 	} | ||||
|  | ||||
| 	$formatDatabaseJson(json) { | ||||
| 		json = helpers.convertBoolFieldsToInt(json, boolFields); | ||||
| 		return super.$formatDatabaseJson(json); | ||||
| 	} | ||||
|  | ||||
| 	static get name () { | ||||
| 		return 'Certificate'; | ||||
| 	} | ||||
|   | ||||
| @@ -2,6 +2,7 @@ | ||||
| // http://vincit.github.io/objection.js/ | ||||
|  | ||||
| const db          = require('../db'); | ||||
| const helpers     = require('../lib/helpers'); | ||||
| const Model       = require('objection').Model; | ||||
| const User        = require('./user'); | ||||
| const Certificate = require('./certificate'); | ||||
| @@ -9,6 +10,11 @@ const now         = require('./now_helper'); | ||||
|  | ||||
| Model.knex(db); | ||||
|  | ||||
| const boolFields = [ | ||||
| 	'is_deleted', | ||||
| 	'enabled', | ||||
| ]; | ||||
|  | ||||
| class DeadHost extends Model { | ||||
| 	$beforeInsert () { | ||||
| 		this.created_on  = now(); | ||||
| @@ -36,6 +42,16 @@ class DeadHost extends Model { | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	$parseDatabaseJson(json) { | ||||
| 		json = super.$parseDatabaseJson(json); | ||||
| 		return helpers.convertIntFieldsToBool(json, boolFields); | ||||
| 	} | ||||
|  | ||||
| 	$formatDatabaseJson(json) { | ||||
| 		json = helpers.convertBoolFieldsToInt(json, boolFields); | ||||
| 		return super.$formatDatabaseJson(json); | ||||
| 	} | ||||
|  | ||||
| 	static get name () { | ||||
| 		return 'DeadHost'; | ||||
| 	} | ||||
|   | ||||
| @@ -2,6 +2,7 @@ | ||||
| // http://vincit.github.io/objection.js/ | ||||
|  | ||||
| const db          = require('../db'); | ||||
| const helpers     = require('../lib/helpers'); | ||||
| const Model       = require('objection').Model; | ||||
| const User        = require('./user'); | ||||
| const AccessList  = require('./access_list'); | ||||
| @@ -10,6 +11,18 @@ const now         = require('./now_helper'); | ||||
|  | ||||
| Model.knex(db); | ||||
|  | ||||
| const boolFields = [ | ||||
| 	'is_deleted', | ||||
| 	'ssl_forced', | ||||
| 	'caching_enabled', | ||||
| 	'block_exploits', | ||||
| 	'allow_websocket_upgrade', | ||||
| 	'http2_support', | ||||
| 	'enabled', | ||||
| 	'hsts_enabled', | ||||
| 	'hsts_subdomains', | ||||
| ]; | ||||
|  | ||||
| class ProxyHost extends Model { | ||||
| 	$beforeInsert () { | ||||
| 		this.created_on  = now(); | ||||
| @@ -37,6 +50,16 @@ class ProxyHost extends Model { | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	$parseDatabaseJson(json) { | ||||
| 		json = super.$parseDatabaseJson(json); | ||||
| 		return helpers.convertIntFieldsToBool(json, boolFields); | ||||
| 	} | ||||
|  | ||||
| 	$formatDatabaseJson(json) { | ||||
| 		json = helpers.convertBoolFieldsToInt(json, boolFields); | ||||
| 		return super.$formatDatabaseJson(json); | ||||
| 	} | ||||
|  | ||||
| 	static get name () { | ||||
| 		return 'ProxyHost'; | ||||
| 	} | ||||
|   | ||||
| @@ -3,6 +3,7 @@ | ||||
| // http://vincit.github.io/objection.js/ | ||||
|  | ||||
| const db          = require('../db'); | ||||
| const helpers     = require('../lib/helpers'); | ||||
| const Model       = require('objection').Model; | ||||
| const User        = require('./user'); | ||||
| const Certificate = require('./certificate'); | ||||
| @@ -10,6 +11,14 @@ const now         = require('./now_helper'); | ||||
|  | ||||
| Model.knex(db); | ||||
|  | ||||
| const boolFields = [ | ||||
| 	'is_deleted', | ||||
| 	'enabled', | ||||
| 	'preserve_path', | ||||
| 	'ssl_forced', | ||||
| 	'block_exploits', | ||||
| ]; | ||||
|  | ||||
| class RedirectionHost extends Model { | ||||
| 	$beforeInsert () { | ||||
| 		this.created_on  = now(); | ||||
| @@ -37,6 +46,16 @@ class RedirectionHost extends Model { | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	$parseDatabaseJson(json) { | ||||
| 		json = super.$parseDatabaseJson(json); | ||||
| 		return helpers.convertIntFieldsToBool(json, boolFields); | ||||
| 	} | ||||
|  | ||||
| 	$formatDatabaseJson(json) { | ||||
| 		json = helpers.convertBoolFieldsToInt(json, boolFields); | ||||
| 		return super.$formatDatabaseJson(json); | ||||
| 	} | ||||
|  | ||||
| 	static get name () { | ||||
| 		return 'RedirectionHost'; | ||||
| 	} | ||||
|   | ||||
| @@ -2,12 +2,19 @@ | ||||
| // http://vincit.github.io/objection.js/ | ||||
|  | ||||
| const db      = require('../db'); | ||||
| const helpers = require('../lib/helpers'); | ||||
| const Model   = require('objection').Model; | ||||
| const User    = require('./user'); | ||||
| const now     = require('./now_helper'); | ||||
|  | ||||
| Model.knex(db); | ||||
|  | ||||
| const boolFields = [ | ||||
| 	'is_deleted', | ||||
| 	'tcp_forwarding', | ||||
| 	'udp_forwarding', | ||||
| ]; | ||||
|  | ||||
| class Stream extends Model { | ||||
| 	$beforeInsert () { | ||||
| 		this.created_on  = now(); | ||||
| @@ -23,6 +30,16 @@ class Stream extends Model { | ||||
| 		this.modified_on = now(); | ||||
| 	} | ||||
|  | ||||
| 	$parseDatabaseJson(json) { | ||||
| 		json = super.$parseDatabaseJson(json); | ||||
| 		return helpers.convertIntFieldsToBool(json, boolFields); | ||||
| 	} | ||||
|  | ||||
| 	$formatDatabaseJson(json) { | ||||
| 		json = helpers.convertBoolFieldsToInt(json, boolFields); | ||||
| 		return super.$formatDatabaseJson(json); | ||||
| 	} | ||||
|  | ||||
| 	static get name () { | ||||
| 		return 'Stream'; | ||||
| 	} | ||||
|   | ||||
| @@ -2,12 +2,18 @@ | ||||
| // http://vincit.github.io/objection.js/ | ||||
|  | ||||
| const db             = require('../db'); | ||||
| const helpers        = require('../lib/helpers'); | ||||
| const Model          = require('objection').Model; | ||||
| const UserPermission = require('./user_permission'); | ||||
| const now            = require('./now_helper'); | ||||
|  | ||||
| Model.knex(db); | ||||
|  | ||||
| const boolFields = [ | ||||
| 	'is_deleted', | ||||
| 	'is_disabled', | ||||
| ]; | ||||
|  | ||||
| class User extends Model { | ||||
| 	$beforeInsert () { | ||||
| 		this.created_on  = now(); | ||||
| @@ -23,6 +29,16 @@ class User extends Model { | ||||
| 		this.modified_on = now(); | ||||
| 	} | ||||
|  | ||||
| 	$parseDatabaseJson(json) { | ||||
| 		json = super.$parseDatabaseJson(json); | ||||
| 		return helpers.convertIntFieldsToBool(json, boolFields); | ||||
| 	} | ||||
|  | ||||
| 	$formatDatabaseJson(json) { | ||||
| 		json = helpers.convertBoolFieldsToInt(json, boolFields); | ||||
| 		return super.$formatDatabaseJson(json); | ||||
| 	} | ||||
|  | ||||
| 	static get name () { | ||||
| 		return 'User'; | ||||
| 	} | ||||
|   | ||||
| @@ -2,10 +2,10 @@ | ||||
| 	"name": "nginx-proxy-manager", | ||||
| 	"version": "0.0.0", | ||||
| 	"description": "A beautiful interface for creating Nginx endpoints", | ||||
| 	"main": "js/index.js", | ||||
| 	"main": "index.js", | ||||
| 	"dependencies": { | ||||
| 		"@apidevtools/json-schema-ref-parser": "^11.7.0", | ||||
| 		"ajv": "^6.12.0", | ||||
| 		"ajv": "^8.17.1", | ||||
| 		"archiver": "^5.3.0", | ||||
| 		"batchflow": "^0.4.0", | ||||
| 		"bcrypt": "^5.0.0", | ||||
| @@ -14,7 +14,6 @@ | ||||
| 		"express": "^4.19.2", | ||||
| 		"express-fileupload": "^1.1.9", | ||||
| 		"gravatar": "^1.8.0", | ||||
| 		"json-schema-ref-parser": "^8.0.0", | ||||
| 		"jsonwebtoken": "^9.0.0", | ||||
| 		"knex": "2.4.2", | ||||
| 		"liquidjs": "10.6.1", | ||||
| @@ -35,9 +34,14 @@ | ||||
| 	"author": "Jamie Curnow <jc@jc21.com>", | ||||
| 	"license": "MIT", | ||||
| 	"devDependencies": { | ||||
| 		"@apidevtools/swagger-parser": "^10.1.0", | ||||
| 		"chalk": "4.1.2", | ||||
| 		"eslint": "^8.36.0", | ||||
| 		"eslint-plugin-align-assignments": "^1.1.2", | ||||
| 		"nodemon": "^2.0.2", | ||||
| 		"prettier": "^2.0.4" | ||||
| 	}, | ||||
| 	"scripts": { | ||||
| 		"validate-schema": "node validate-schema.js" | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -29,10 +29,10 @@ router | ||||
| 			additionalProperties: false, | ||||
| 			properties:           { | ||||
| 				expand: { | ||||
| 					$ref: 'common#/definitions/expand' | ||||
| 					$ref: 'common#/properties/expand' | ||||
| 				}, | ||||
| 				query: { | ||||
| 					$ref: 'common#/definitions/query' | ||||
| 					$ref: 'common#/properties/query' | ||||
| 				} | ||||
| 			} | ||||
| 		}, { | ||||
|   | ||||
| @@ -31,10 +31,10 @@ router | ||||
| 			additionalProperties: false, | ||||
| 			properties:           { | ||||
| 				expand: { | ||||
| 					$ref: 'common#/definitions/expand' | ||||
| 					$ref: 'common#/properties/expand' | ||||
| 				}, | ||||
| 				query: { | ||||
| 					$ref: 'common#/definitions/query' | ||||
| 					$ref: 'common#/properties/query' | ||||
| 				} | ||||
| 			} | ||||
| 		}, { | ||||
| @@ -91,10 +91,10 @@ router | ||||
| 			additionalProperties: false, | ||||
| 			properties:           { | ||||
| 				list_id: { | ||||
| 					$ref: 'common#/definitions/id' | ||||
| 					$ref: 'common#/properties/id' | ||||
| 				}, | ||||
| 				expand: { | ||||
| 					$ref: 'common#/definitions/expand' | ||||
| 					$ref: 'common#/properties/expand' | ||||
| 				} | ||||
| 			} | ||||
| 		}, { | ||||
|   | ||||
| @@ -32,10 +32,10 @@ router | ||||
| 			additionalProperties: false, | ||||
| 			properties:           { | ||||
| 				expand: { | ||||
| 					$ref: 'common#/definitions/expand' | ||||
| 					$ref: 'common#/properties/expand' | ||||
| 				}, | ||||
| 				query: { | ||||
| 					$ref: 'common#/definitions/query' | ||||
| 					$ref: 'common#/properties/query' | ||||
| 				} | ||||
| 			} | ||||
| 		}, { | ||||
| @@ -124,10 +124,10 @@ router | ||||
| 			additionalProperties: false, | ||||
| 			properties:           { | ||||
| 				certificate_id: { | ||||
| 					$ref: 'common#/definitions/id' | ||||
| 					$ref: 'common#/properties/id' | ||||
| 				}, | ||||
| 				expand: { | ||||
| 					$ref: 'common#/definitions/expand' | ||||
| 					$ref: 'common#/properties/expand' | ||||
| 				} | ||||
| 			} | ||||
| 		}, { | ||||
|   | ||||
| @@ -31,10 +31,10 @@ router | ||||
| 			additionalProperties: false, | ||||
| 			properties:           { | ||||
| 				expand: { | ||||
| 					$ref: 'common#/definitions/expand' | ||||
| 					$ref: 'common#/properties/expand' | ||||
| 				}, | ||||
| 				query: { | ||||
| 					$ref: 'common#/definitions/query' | ||||
| 					$ref: 'common#/properties/query' | ||||
| 				} | ||||
| 			} | ||||
| 		}, { | ||||
| @@ -91,10 +91,10 @@ router | ||||
| 			additionalProperties: false, | ||||
| 			properties:           { | ||||
| 				host_id: { | ||||
| 					$ref: 'common#/definitions/id' | ||||
| 					$ref: 'common#/properties/id' | ||||
| 				}, | ||||
| 				expand: { | ||||
| 					$ref: 'common#/definitions/expand' | ||||
| 					$ref: 'common#/properties/expand' | ||||
| 				} | ||||
| 			} | ||||
| 		}, { | ||||
|   | ||||
| @@ -31,10 +31,10 @@ router | ||||
| 			additionalProperties: false, | ||||
| 			properties:           { | ||||
| 				expand: { | ||||
| 					$ref: 'common#/definitions/expand' | ||||
| 					$ref: 'common#/properties/expand' | ||||
| 				}, | ||||
| 				query: { | ||||
| 					$ref: 'common#/definitions/query' | ||||
| 					$ref: 'common#/properties/query' | ||||
| 				} | ||||
| 			} | ||||
| 		}, { | ||||
| @@ -91,10 +91,10 @@ router | ||||
| 			additionalProperties: false, | ||||
| 			properties:           { | ||||
| 				host_id: { | ||||
| 					$ref: 'common#/definitions/id' | ||||
| 					$ref: 'common#/properties/id' | ||||
| 				}, | ||||
| 				expand: { | ||||
| 					$ref: 'common#/definitions/expand' | ||||
| 					$ref: 'common#/properties/expand' | ||||
| 				} | ||||
| 			} | ||||
| 		}, { | ||||
|   | ||||
| @@ -31,10 +31,10 @@ router | ||||
| 			additionalProperties: false, | ||||
| 			properties:           { | ||||
| 				expand: { | ||||
| 					$ref: 'common#/definitions/expand' | ||||
| 					$ref: 'common#/properties/expand' | ||||
| 				}, | ||||
| 				query: { | ||||
| 					$ref: 'common#/definitions/query' | ||||
| 					$ref: 'common#/properties/query' | ||||
| 				} | ||||
| 			} | ||||
| 		}, { | ||||
| @@ -91,10 +91,10 @@ router | ||||
| 			additionalProperties: false, | ||||
| 			properties:           { | ||||
| 				host_id: { | ||||
| 					$ref: 'common#/definitions/id' | ||||
| 					$ref: 'common#/properties/id' | ||||
| 				}, | ||||
| 				expand: { | ||||
| 					$ref: 'common#/definitions/expand' | ||||
| 					$ref: 'common#/properties/expand' | ||||
| 				} | ||||
| 			} | ||||
| 		}, { | ||||
|   | ||||
| @@ -31,10 +31,10 @@ router | ||||
| 			additionalProperties: false, | ||||
| 			properties:           { | ||||
| 				expand: { | ||||
| 					$ref: 'common#/definitions/expand' | ||||
| 					$ref: 'common#/properties/expand' | ||||
| 				}, | ||||
| 				query: { | ||||
| 					$ref: 'common#/definitions/query' | ||||
| 					$ref: 'common#/properties/query' | ||||
| 				} | ||||
| 			} | ||||
| 		}, { | ||||
| @@ -91,10 +91,10 @@ router | ||||
| 			additionalProperties: false, | ||||
| 			properties:           { | ||||
| 				stream_id: { | ||||
| 					$ref: 'common#/definitions/id' | ||||
| 					$ref: 'common#/properties/id' | ||||
| 				}, | ||||
| 				expand: { | ||||
| 					$ref: 'common#/definitions/expand' | ||||
| 					$ref: 'common#/properties/expand' | ||||
| 				} | ||||
| 			} | ||||
| 		}, { | ||||
|   | ||||
| @@ -32,10 +32,10 @@ router | ||||
| 			additionalProperties: false, | ||||
| 			properties:           { | ||||
| 				expand: { | ||||
| 					$ref: 'common#/definitions/expand' | ||||
| 					$ref: 'common#/properties/expand' | ||||
| 				}, | ||||
| 				query: { | ||||
| 					$ref: 'common#/definitions/query' | ||||
| 					$ref: 'common#/properties/query' | ||||
| 				} | ||||
| 			} | ||||
| 		}, { | ||||
| @@ -97,10 +97,10 @@ router | ||||
| 			additionalProperties: false, | ||||
| 			properties:           { | ||||
| 				user_id: { | ||||
| 					$ref: 'common#/definitions/id' | ||||
| 					$ref: 'common#/properties/id' | ||||
| 				}, | ||||
| 				expand: { | ||||
| 					$ref: 'common#/definitions/expand' | ||||
| 					$ref: 'common#/properties/expand' | ||||
| 				} | ||||
| 			} | ||||
| 		}, { | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| { | ||||
| 	"$schema": "http://json-schema.org/draft-07/schema#", | ||||
| 	"$schema": "https://json-schema.org/draft/2020-12/schema", | ||||
| 	"$id": "common", | ||||
| 	"definitions": { | ||||
| 	"type": "object", | ||||
| 	"properties": { | ||||
| 		"id": { | ||||
| 			"description": "Unique identifier", | ||||
| 			"example": 123456, | ||||
| 			"readOnly": true, | ||||
| 			"type": "integer", | ||||
| 			"minimum": 1 | ||||
| @@ -37,25 +37,21 @@ | ||||
| 		}, | ||||
| 		"created_on": { | ||||
| 			"description": "Date and time of creation", | ||||
| 			"format": "date-time", | ||||
| 			"readOnly": true, | ||||
| 			"type": "string" | ||||
| 		}, | ||||
| 		"modified_on": { | ||||
| 			"description": "Date and time of last update", | ||||
| 			"format": "date-time", | ||||
| 			"readOnly": true, | ||||
| 			"type": "string" | ||||
| 		}, | ||||
| 		"user_id": { | ||||
| 			"description": "User ID", | ||||
| 			"example": 1234, | ||||
| 			"type": "integer", | ||||
| 			"minimum": 1 | ||||
| 		}, | ||||
| 		"certificate_id": { | ||||
| 			"description": "Certificate ID", | ||||
| 			"example": 1234, | ||||
| 			"anyOf": [ | ||||
| 				{ | ||||
| 					"type": "integer", | ||||
| @@ -69,13 +65,11 @@ | ||||
| 		}, | ||||
| 		"access_list_id": { | ||||
| 			"description": "Access List ID", | ||||
| 			"example": 1234, | ||||
| 			"type": "integer", | ||||
| 			"minimum": 0 | ||||
| 		}, | ||||
| 		"domain_names": { | ||||
| 			"description": "Domain Names separated by a comma", | ||||
| 			"example": "*.jc21.com,blog.jc21.com", | ||||
| 			"type": "array", | ||||
| 			"minItems": 1, | ||||
| 			"maxItems": 100, | ||||
| @@ -87,22 +81,18 @@ | ||||
| 		}, | ||||
| 		"enabled": { | ||||
| 			"description": "Is Enabled", | ||||
| 			"example": true, | ||||
| 			"type": "boolean" | ||||
| 		}, | ||||
| 		"ssl_forced": { | ||||
| 			"description": "Is SSL Forced", | ||||
| 			"example": false, | ||||
| 			"type": "boolean" | ||||
| 		}, | ||||
| 		"hsts_enabled": { | ||||
| 			"description": "Is HSTS Enabled", | ||||
| 			"example": false, | ||||
| 			"type": "boolean" | ||||
| 		}, | ||||
| 		"hsts_subdomains": { | ||||
| 			"description": "Is HSTS applicable to all subdomains", | ||||
| 			"example": false, | ||||
| 			"type": "boolean" | ||||
| 		}, | ||||
| 		"ssl_provider": { | ||||
| @@ -111,17 +101,14 @@ | ||||
| 		}, | ||||
| 		"http2_support": { | ||||
| 			"description": "HTTP2 Protocol Support", | ||||
| 			"example": false, | ||||
| 			"type": "boolean" | ||||
| 		}, | ||||
| 		"block_exploits": { | ||||
| 			"description": "Should we block common exploits", | ||||
| 			"example": true, | ||||
| 			"type": "boolean" | ||||
| 		}, | ||||
| 		"caching_enabled": { | ||||
| 			"description": "Should we cache assets", | ||||
| 			"example": true, | ||||
| 			"type": "boolean" | ||||
| 		} | ||||
| 	} | ||||
|   | ||||
| @@ -5,16 +5,16 @@ | ||||
| 	"additionalProperties": false, | ||||
| 	"properties": { | ||||
| 		"id": { | ||||
| 			"$ref": "../common.json#/definitions/id" | ||||
| 			"$ref": "../common.json#/properties/id" | ||||
| 		}, | ||||
| 		"created_on": { | ||||
| 			"$ref": "../common.json#/definitions/created_on" | ||||
| 			"$ref": "../common.json#/properties/created_on" | ||||
| 		}, | ||||
| 		"modified_on": { | ||||
| 			"$ref": "../common.json#/definitions/modified_on" | ||||
| 			"$ref": "../common.json#/properties/modified_on" | ||||
| 		}, | ||||
| 		"owner_user_id": { | ||||
| 			"$ref": "../common.json#/definitions/user_id" | ||||
| 			"$ref": "../common.json#/properties/user_id" | ||||
| 		}, | ||||
| 		"name": { | ||||
| 			"type": "string", | ||||
|   | ||||
| @@ -5,22 +5,22 @@ | ||||
| 	"additionalProperties": false, | ||||
| 	"properties": { | ||||
| 		"id": { | ||||
| 			"$ref": "../common.json#/definitions/id" | ||||
| 			"$ref": "../common.json#/properties/id" | ||||
| 		}, | ||||
| 		"created_on": { | ||||
| 			"$ref": "../common.json#/definitions/created_on" | ||||
| 			"$ref": "../common.json#/properties/created_on" | ||||
| 		}, | ||||
| 		"modified_on": { | ||||
| 			"$ref": "../common.json#/definitions/modified_on" | ||||
| 			"$ref": "../common.json#/properties/modified_on" | ||||
| 		}, | ||||
| 		"user_id": { | ||||
| 			"$ref": "../common.json#/definitions/user_id" | ||||
| 			"$ref": "../common.json#/properties/user_id" | ||||
| 		}, | ||||
| 		"object_type": { | ||||
| 			"type": "string" | ||||
| 		}, | ||||
| 		"object_id": { | ||||
| 			"$ref": "../common.json#/definitions/id" | ||||
| 			"$ref": "../common.json#/properties/id" | ||||
| 		}, | ||||
| 		"action": { | ||||
| 			"type": "string" | ||||
|   | ||||
| @@ -5,30 +5,29 @@ | ||||
| 	"additionalProperties": false, | ||||
| 	"properties": { | ||||
| 		"id": { | ||||
| 			"$ref": "../common.json#/definitions/id" | ||||
| 			"$ref": "../common.json#/properties/id" | ||||
| 		}, | ||||
| 		"created_on": { | ||||
| 			"$ref": "../common.json#/definitions/created_on" | ||||
| 			"$ref": "../common.json#/properties/created_on" | ||||
| 		}, | ||||
| 		"modified_on": { | ||||
| 			"$ref": "../common.json#/definitions/modified_on" | ||||
| 			"$ref": "../common.json#/properties/modified_on" | ||||
| 		}, | ||||
| 		"owner_user_id": { | ||||
| 			"$ref": "../common.json#/definitions/user_id" | ||||
| 			"$ref": "../common.json#/properties/user_id" | ||||
| 		}, | ||||
| 		"provider": { | ||||
| 			"$ref": "../common.json#/definitions/ssl_provider" | ||||
| 			"$ref": "../common.json#/properties/ssl_provider" | ||||
| 		}, | ||||
| 		"nice_name": { | ||||
| 			"type": "string", | ||||
| 			"description": "Nice Name for the custom certificate" | ||||
| 		}, | ||||
| 		"domain_names": { | ||||
| 			"$ref": "../common.json#/definitions/domain_names" | ||||
| 			"$ref": "../common.json#/properties/domain_names" | ||||
| 		}, | ||||
| 		"expires_on": { | ||||
| 			"description": "Date and time of expiration", | ||||
| 			"format": "date-time", | ||||
| 			"readOnly": true, | ||||
| 			"type": "string" | ||||
| 		}, | ||||
| @@ -37,8 +36,7 @@ | ||||
| 			"additionalProperties": false, | ||||
| 			"properties": { | ||||
| 				"letsencrypt_email": { | ||||
| 					"type": "string", | ||||
| 					"format": "email" | ||||
| 					"type": "string" | ||||
| 				}, | ||||
| 				"letsencrypt_agree": { | ||||
| 					"type": "boolean" | ||||
|   | ||||
| @@ -5,40 +5,40 @@ | ||||
| 	"additionalProperties": false, | ||||
| 	"properties": { | ||||
| 		"id": { | ||||
| 			"$ref": "../common.json#/definitions/id" | ||||
| 			"$ref": "../common.json#/properties/id" | ||||
| 		}, | ||||
| 		"created_on": { | ||||
| 			"$ref": "../common.json#/definitions/created_on" | ||||
| 			"$ref": "../common.json#/properties/created_on" | ||||
| 		}, | ||||
| 		"modified_on": { | ||||
| 			"$ref": "../common.json#/definitions/modified_on" | ||||
| 			"$ref": "../common.json#/properties/modified_on" | ||||
| 		}, | ||||
| 		"owner_user_id": { | ||||
| 			"$ref": "../common.json#/definitions/user_id" | ||||
| 			"$ref": "../common.json#/properties/user_id" | ||||
| 		}, | ||||
| 		"domain_names": { | ||||
| 			"$ref": "../common.json#/definitions/domain_names" | ||||
| 			"$ref": "../common.json#/properties/domain_names" | ||||
| 		}, | ||||
| 		"certificate_id": { | ||||
| 			"$ref": "../common.json#/definitions/certificate_id" | ||||
| 			"$ref": "../common.json#/properties/certificate_id" | ||||
| 		}, | ||||
| 		"ssl_forced": { | ||||
| 			"$ref": "../common.json#/definitions/ssl_forced" | ||||
| 			"$ref": "../common.json#/properties/ssl_forced" | ||||
| 		}, | ||||
| 		"hsts_enabled": { | ||||
| 			"$ref": "../common.json#/definitions/hsts_enabled" | ||||
| 			"$ref": "../common.json#/properties/hsts_enabled" | ||||
| 		}, | ||||
| 		"hsts_subdomains": { | ||||
| 			"$ref": "../common.json#/definitions/hsts_subdomains" | ||||
| 			"$ref": "../common.json#/properties/hsts_subdomains" | ||||
| 		}, | ||||
| 		"http2_support": { | ||||
| 			"$ref": "../common.json#/definitions/http2_support" | ||||
| 			"$ref": "../common.json#/properties/http2_support" | ||||
| 		}, | ||||
| 		"advanced_config": { | ||||
| 			"type": "string" | ||||
| 		}, | ||||
| 		"enabled": { | ||||
| 			"$ref": "../common.json#/definitions/enabled" | ||||
| 			"$ref": "../common.json#/properties/enabled" | ||||
| 		}, | ||||
| 		"meta": { | ||||
| 			"type": "object" | ||||
|   | ||||
| @@ -30,19 +30,19 @@ | ||||
| 	"additionalProperties": false, | ||||
| 	"properties": { | ||||
| 		"id": { | ||||
| 			"$ref": "../common.json#/definitions/id" | ||||
| 			"$ref": "../common.json#/properties/id" | ||||
| 		}, | ||||
| 		"created_on": { | ||||
| 			"$ref": "../common.json#/definitions/created_on" | ||||
| 			"$ref": "../common.json#/properties/created_on" | ||||
| 		}, | ||||
| 		"modified_on": { | ||||
| 			"$ref": "../common.json#/definitions/modified_on" | ||||
| 			"$ref": "../common.json#/properties/modified_on" | ||||
| 		}, | ||||
| 		"owner_user_id": { | ||||
| 			"$ref": "../common.json#/definitions/user_id" | ||||
| 			"$ref": "../common.json#/properties/user_id" | ||||
| 		}, | ||||
| 		"domain_names": { | ||||
| 			"$ref": "../common.json#/definitions/domain_names" | ||||
| 			"$ref": "../common.json#/properties/domain_names" | ||||
| 		}, | ||||
| 		"forward_host": { | ||||
| 			"type": "string", | ||||
| @@ -55,19 +55,19 @@ | ||||
| 			"maximum": 65535 | ||||
| 		}, | ||||
| 		"access_list_id": { | ||||
| 			"$ref": "../common.json#/definitions/access_list_id" | ||||
| 			"$ref": "../common.json#/properties/access_list_id" | ||||
| 		}, | ||||
| 		"certificate_id": { | ||||
| 			"$ref": "../common.json#/definitions/certificate_id" | ||||
| 			"$ref": "../common.json#/properties/certificate_id" | ||||
| 		}, | ||||
| 		"ssl_forced": { | ||||
| 			"$ref": "../common.json#/definitions/ssl_forced" | ||||
| 			"$ref": "../common.json#/properties/ssl_forced" | ||||
| 		}, | ||||
| 		"caching_enabled": { | ||||
| 			"$ref": "../common.json#/definitions/caching_enabled" | ||||
| 			"$ref": "../common.json#/properties/caching_enabled" | ||||
| 		}, | ||||
| 		"block_exploits": { | ||||
| 			"$ref": "../common.json#/definitions/block_exploits" | ||||
| 			"$ref": "../common.json#/properties/block_exploits" | ||||
| 		}, | ||||
| 		"advanced_config": { | ||||
| 			"type": "string" | ||||
| @@ -81,14 +81,14 @@ | ||||
| 			"type": "boolean" | ||||
| 		}, | ||||
| 		"http2_support": { | ||||
| 			"$ref": "../common.json#/definitions/http2_support" | ||||
| 			"$ref": "../common.json#/properties/http2_support" | ||||
| 		}, | ||||
| 		"forward_scheme": { | ||||
| 			"type": "string", | ||||
| 			"enum": ["http", "https"] | ||||
| 		}, | ||||
| 		"enabled": { | ||||
| 			"$ref": "../common.json#/definitions/enabled" | ||||
| 			"$ref": "../common.json#/properties/enabled" | ||||
| 		}, | ||||
| 		"locations": { | ||||
| 			"type": "array", | ||||
| @@ -124,19 +124,33 @@ | ||||
| 			} | ||||
| 		}, | ||||
| 		"hsts_enabled": { | ||||
| 			"$ref": "../common.json#/definitions/hsts_enabled" | ||||
| 			"$ref": "../common.json#/properties/hsts_enabled" | ||||
| 		}, | ||||
| 		"hsts_subdomains": { | ||||
| 			"$ref": "../common.json#/definitions/hsts_subdomains" | ||||
| 			"$ref": "../common.json#/properties/hsts_subdomains" | ||||
| 		}, | ||||
| 		"certificate": { | ||||
| 			"oneOf": [ | ||||
| 				{ | ||||
| 					"type": "null" | ||||
| 				}, | ||||
| 				{ | ||||
| 					"$ref": "./certificate-object.json" | ||||
| 				} | ||||
| 			] | ||||
| 		}, | ||||
| 		"owner": { | ||||
| 			"$ref": "./user-object.json" | ||||
| 		}, | ||||
| 		"access_list": { | ||||
| 			"oneOf": [ | ||||
| 				{ | ||||
| 					"type": "null" | ||||
| 				}, | ||||
| 				{ | ||||
| 					"$ref": "./access-list-object.json" | ||||
| 				} | ||||
| 			] | ||||
| 		}, | ||||
| 		"use_default_location": { | ||||
| 			"type": "boolean" | ||||
|   | ||||
| @@ -5,19 +5,19 @@ | ||||
| 	"additionalProperties": false, | ||||
| 	"properties": { | ||||
| 		"id": { | ||||
| 			"$ref": "../common.json#/definitions/id" | ||||
| 			"$ref": "../common.json#/properties/id" | ||||
| 		}, | ||||
| 		"created_on": { | ||||
| 			"$ref": "../common.json#/definitions/created_on" | ||||
| 			"$ref": "../common.json#/properties/created_on" | ||||
| 		}, | ||||
| 		"modified_on": { | ||||
| 			"$ref": "../common.json#/definitions/modified_on" | ||||
| 			"$ref": "../common.json#/properties/modified_on" | ||||
| 		}, | ||||
| 		"owner_user_id": { | ||||
| 			"$ref": "../common.json#/definitions/user_id" | ||||
| 			"$ref": "../common.json#/properties/user_id" | ||||
| 		}, | ||||
| 		"domain_names": { | ||||
| 			"$ref": "../common.json#/definitions/domain_names" | ||||
| 			"$ref": "../common.json#/properties/domain_names" | ||||
| 		}, | ||||
| 		"forward_http_code": { | ||||
| 			"description": "Redirect HTTP Status Code", | ||||
| @@ -42,28 +42,28 @@ | ||||
| 			"type": "boolean" | ||||
| 		}, | ||||
| 		"certificate_id": { | ||||
| 			"$ref": "../common.json#/definitions/certificate_id" | ||||
| 			"$ref": "../common.json#/properties/certificate_id" | ||||
| 		}, | ||||
| 		"ssl_forced": { | ||||
| 			"$ref": "../common.json#/definitions/ssl_forced" | ||||
| 			"$ref": "../common.json#/properties/ssl_forced" | ||||
| 		}, | ||||
| 		"hsts_enabled": { | ||||
| 			"$ref": "../common.json#/definitions/hsts_enabled" | ||||
| 			"$ref": "../common.json#/properties/hsts_enabled" | ||||
| 		}, | ||||
| 		"hsts_subdomains": { | ||||
| 			"$ref": "../common.json#/definitions/hsts_subdomains" | ||||
| 			"$ref": "../common.json#/properties/hsts_subdomains" | ||||
| 		}, | ||||
| 		"http2_support": { | ||||
| 			"$ref": "../common.json#/definitions/http2_support" | ||||
| 			"$ref": "../common.json#/properties/http2_support" | ||||
| 		}, | ||||
| 		"block_exploits": { | ||||
| 			"$ref": "../common.json#/definitions/block_exploits" | ||||
| 			"$ref": "../common.json#/properties/block_exploits" | ||||
| 		}, | ||||
| 		"advanced_config": { | ||||
| 			"type": "string" | ||||
| 		}, | ||||
| 		"enabled": { | ||||
| 			"$ref": "../common.json#/definitions/enabled" | ||||
| 			"$ref": "../common.json#/properties/enabled" | ||||
| 		}, | ||||
| 		"meta": { | ||||
| 			"type": "object" | ||||
|   | ||||
| @@ -5,16 +5,16 @@ | ||||
| 	"additionalProperties": false, | ||||
| 	"properties": { | ||||
| 		"id": { | ||||
| 			"$ref": "../common.json#/definitions/id" | ||||
| 			"$ref": "../common.json#/properties/id" | ||||
| 		}, | ||||
| 		"created_on": { | ||||
| 			"$ref": "../common.json#/definitions/created_on" | ||||
| 			"$ref": "../common.json#/properties/created_on" | ||||
| 		}, | ||||
| 		"modified_on": { | ||||
| 			"$ref": "../common.json#/definitions/modified_on" | ||||
| 			"$ref": "../common.json#/properties/modified_on" | ||||
| 		}, | ||||
| 		"owner_user_id": { | ||||
| 			"$ref": "../common.json#/definitions/user_id" | ||||
| 			"$ref": "../common.json#/properties/user_id" | ||||
| 		}, | ||||
| 		"incoming_port": { | ||||
| 			"type": "integer", | ||||
| @@ -51,7 +51,7 @@ | ||||
| 			"type": "boolean" | ||||
| 		}, | ||||
| 		"enabled": { | ||||
| 			"$ref": "../common.json#/definitions/enabled" | ||||
| 			"$ref": "../common.json#/properties/enabled" | ||||
| 		}, | ||||
| 		"meta": { | ||||
| 			"type": "object" | ||||
|   | ||||
| @@ -21,11 +21,9 @@ | ||||
| 			"example": "2020-01-30T09:41:04.000Z" | ||||
| 		}, | ||||
| 		"is_disabled": { | ||||
| 			"type": "integer", | ||||
| 			"minimum": 0, | ||||
| 			"maximum": 1, | ||||
| 			"description": "Is user Disabled (0 = false, 1 = true)", | ||||
| 			"example": 0 | ||||
| 			"type": "boolean", | ||||
| 			"description": "Is user Disabled", | ||||
| 			"example": true | ||||
| 		}, | ||||
| 		"email": { | ||||
| 			"type": "string", | ||||
|   | ||||
| @@ -33,8 +33,8 @@ | ||||
| 									"owner_user_id": 1, | ||||
| 									"name": "test1234", | ||||
| 									"meta": {}, | ||||
| 									"satisfy_any": 1, | ||||
| 									"pass_auth": 0, | ||||
| 									"satisfy_any": true, | ||||
| 									"pass_auth": false, | ||||
| 									"proxy_host_count": 0 | ||||
| 								} | ||||
| 							] | ||||
|   | ||||
| @@ -30,7 +30,7 @@ | ||||
| 								"id": 1, | ||||
| 								"created_on": "2020-01-30T09:36:08.000Z", | ||||
| 								"modified_on": "2020-01-30T09:41:04.000Z", | ||||
| 								"is_disabled": 0, | ||||
| 								"is_disabled": false, | ||||
| 								"email": "jc@jc21.com", | ||||
| 								"name": "Jamie Curnow", | ||||
| 								"nickname": "James", | ||||
|   | ||||
| @@ -102,15 +102,15 @@ | ||||
| 								"owner_user_id": 1, | ||||
| 								"name": "test123!!", | ||||
| 								"meta": {}, | ||||
| 								"satisfy_any": 1, | ||||
| 								"pass_auth": 0, | ||||
| 								"satisfy_any": true, | ||||
| 								"pass_auth": false, | ||||
| 								"proxy_host_count": 0, | ||||
| 								"owner": { | ||||
| 									"id": 1, | ||||
| 									"created_on": "2024-10-07T22:43:55.000Z", | ||||
| 									"modified_on": "2024-10-08T12:52:54.000Z", | ||||
| 									"is_deleted": 0, | ||||
| 									"is_disabled": 0, | ||||
| 									"is_deleted": false, | ||||
| 									"is_disabled": false, | ||||
| 									"email": "admin@example.com", | ||||
| 									"name": "Administrator", | ||||
| 									"nickname": "some guy", | ||||
|   | ||||
| @@ -93,15 +93,15 @@ | ||||
| 								"owner_user_id": 1, | ||||
| 								"name": "test1234", | ||||
| 								"meta": {}, | ||||
| 								"satisfy_any": 1, | ||||
| 								"pass_auth": 0, | ||||
| 								"satisfy_any": true, | ||||
| 								"pass_auth": false, | ||||
| 								"proxy_host_count": 0, | ||||
| 								"owner": { | ||||
| 									"id": 1, | ||||
| 									"created_on": "2024-10-07T22:43:55.000Z", | ||||
| 									"modified_on": "2024-10-08T12:52:54.000Z", | ||||
| 									"is_deleted": 0, | ||||
| 									"is_disabled": 0, | ||||
| 									"is_deleted": false, | ||||
| 									"is_disabled": false, | ||||
| 									"email": "admin@example.com", | ||||
| 									"name": "Administrator", | ||||
| 									"nickname": "some guy", | ||||
|   | ||||
| @@ -32,7 +32,7 @@ | ||||
| 								"id": 4, | ||||
| 								"created_on": "2024-10-09T05:31:58.000Z", | ||||
| 								"owner_user_id": 1, | ||||
| 								"is_deleted": 0, | ||||
| 								"is_deleted": false, | ||||
| 								"provider": "letsencrypt", | ||||
| 								"nice_name": "My Test Cert", | ||||
| 								"domain_names": ["test.jc21.supernerd.pro"], | ||||
|   | ||||
| @@ -47,7 +47,7 @@ | ||||
| 								"id": 5, | ||||
| 								"created_on": "2024-10-09 05:28:35", | ||||
| 								"owner_user_id": 1, | ||||
| 								"is_deleted": 0, | ||||
| 								"is_deleted": false, | ||||
| 								"provider": "letsencrypt", | ||||
| 								"nice_name": "test.example.com", | ||||
| 								"domain_names": ["test.example.com"], | ||||
|   | ||||
| @@ -33,16 +33,16 @@ | ||||
| 									"owner_user_id": 1, | ||||
| 									"domain_names": ["test.example.com"], | ||||
| 									"certificate_id": 0, | ||||
| 									"ssl_forced": 0, | ||||
| 									"ssl_forced": false, | ||||
| 									"advanced_config": "", | ||||
| 									"meta": { | ||||
| 										"nginx_online": true, | ||||
| 										"nginx_err": null | ||||
| 									}, | ||||
| 									"http2_support": 0, | ||||
| 									"enabled": 1, | ||||
| 									"hsts_enabled": 0, | ||||
| 									"hsts_subdomains": 0 | ||||
| 									"http2_support": false, | ||||
| 									"enabled": true, | ||||
| 									"hsts_enabled": false, | ||||
| 									"hsts_subdomains": false | ||||
| 								} | ||||
| 							] | ||||
| 						} | ||||
|   | ||||
| @@ -33,16 +33,16 @@ | ||||
| 								"owner_user_id": 1, | ||||
| 								"domain_names": ["test.example.com"], | ||||
| 								"certificate_id": 0, | ||||
| 								"ssl_forced": 0, | ||||
| 								"ssl_forced": false, | ||||
| 								"advanced_config": "", | ||||
| 								"meta": { | ||||
| 									"nginx_online": true, | ||||
| 									"nginx_err": null | ||||
| 								}, | ||||
| 								"http2_support": 0, | ||||
| 								"enabled": 1, | ||||
| 								"hsts_enabled": 0, | ||||
| 								"hsts_subdomains": 0 | ||||
| 								"http2_support": false, | ||||
| 								"enabled": true, | ||||
| 								"hsts_enabled": false, | ||||
| 								"hsts_subdomains": false | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
|   | ||||
| @@ -72,22 +72,22 @@ | ||||
| 								"owner_user_id": 1, | ||||
| 								"domain_names": ["test.example.com"], | ||||
| 								"certificate_id": 0, | ||||
| 								"ssl_forced": 0, | ||||
| 								"ssl_forced": false, | ||||
| 								"advanced_config": "", | ||||
| 								"meta": { | ||||
| 									"nginx_online": true, | ||||
| 									"nginx_err": null | ||||
| 								}, | ||||
| 								"http2_support": 0, | ||||
| 								"enabled": 1, | ||||
| 								"hsts_enabled": 0, | ||||
| 								"hsts_subdomains": 0, | ||||
| 								"http2_support": false, | ||||
| 								"enabled": true, | ||||
| 								"hsts_enabled": false, | ||||
| 								"hsts_subdomains": false, | ||||
| 								"owner": { | ||||
| 									"id": 1, | ||||
| 									"created_on": "2024-10-09T00:59:56.000Z", | ||||
| 									"modified_on": "2024-10-09T00:59:56.000Z", | ||||
| 									"is_deleted": 0, | ||||
| 									"is_disabled": 0, | ||||
| 									"is_deleted": false, | ||||
| 									"is_disabled": false, | ||||
| 									"email": "admin@example.com", | ||||
| 									"name": "Administrator", | ||||
| 									"nickname": "Admin", | ||||
|   | ||||
| @@ -60,20 +60,20 @@ | ||||
| 								"owner_user_id": 1, | ||||
| 								"domain_names": ["test.example.com"], | ||||
| 								"certificate_id": 0, | ||||
| 								"ssl_forced": 0, | ||||
| 								"ssl_forced": false, | ||||
| 								"advanced_config": "", | ||||
| 								"meta": {}, | ||||
| 								"http2_support": 0, | ||||
| 								"enabled": 1, | ||||
| 								"hsts_enabled": 0, | ||||
| 								"hsts_subdomains": 0, | ||||
| 								"http2_support": false, | ||||
| 								"enabled": true, | ||||
| 								"hsts_enabled": false, | ||||
| 								"hsts_subdomains": false, | ||||
| 								"certificate": null, | ||||
| 								"owner": { | ||||
| 									"id": 1, | ||||
| 									"created_on": "2024-10-09T00:59:56.000Z", | ||||
| 									"modified_on": "2024-10-09T00:59:56.000Z", | ||||
| 									"is_deleted": 0, | ||||
| 									"is_disabled": 0, | ||||
| 									"is_deleted": false, | ||||
| 									"is_disabled": false, | ||||
| 									"email": "admin@example.com", | ||||
| 									"name": "Administrator", | ||||
| 									"nickname": "Admin", | ||||
|   | ||||
| @@ -36,21 +36,21 @@ | ||||
| 									"forward_port": 8989, | ||||
| 									"access_list_id": 0, | ||||
| 									"certificate_id": 0, | ||||
| 									"ssl_forced": 0, | ||||
| 									"caching_enabled": 0, | ||||
| 									"block_exploits": 0, | ||||
| 									"ssl_forced": false, | ||||
| 									"caching_enabled": false, | ||||
| 									"block_exploits": false, | ||||
| 									"advanced_config": "", | ||||
| 									"meta": { | ||||
| 										"nginx_online": true, | ||||
| 										"nginx_err": null | ||||
| 									}, | ||||
| 									"allow_websocket_upgrade": 0, | ||||
| 									"http2_support": 0, | ||||
| 									"allow_websocket_upgrade": false, | ||||
| 									"http2_support": false, | ||||
| 									"forward_scheme": "http", | ||||
| 									"enabled": 1, | ||||
| 									"enabled": true, | ||||
| 									"locations": null, | ||||
| 									"hsts_enabled": 0, | ||||
| 									"hsts_subdomains": 0 | ||||
| 									"hsts_enabled": false, | ||||
| 									"hsts_subdomains": false | ||||
| 								} | ||||
| 							] | ||||
| 						} | ||||
|   | ||||
| @@ -36,21 +36,21 @@ | ||||
| 								"forward_port": 8989, | ||||
| 								"access_list_id": 0, | ||||
| 								"certificate_id": 0, | ||||
| 								"ssl_forced": 0, | ||||
| 								"caching_enabled": 0, | ||||
| 								"block_exploits": 0, | ||||
| 								"ssl_forced": false, | ||||
| 								"caching_enabled": false, | ||||
| 								"block_exploits": false, | ||||
| 								"advanced_config": "", | ||||
| 								"meta": { | ||||
| 									"nginx_online": true, | ||||
| 									"nginx_err": null | ||||
| 								}, | ||||
| 								"allow_websocket_upgrade": 0, | ||||
| 								"http2_support": 0, | ||||
| 								"allow_websocket_upgrade": false, | ||||
| 								"http2_support": false, | ||||
| 								"forward_scheme": "http", | ||||
| 								"enabled": 1, | ||||
| 								"enabled": true, | ||||
| 								"locations": null, | ||||
| 								"hsts_enabled": 0, | ||||
| 								"hsts_subdomains": 0 | ||||
| 								"hsts_enabled": false, | ||||
| 								"hsts_subdomains": false | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
|   | ||||
| @@ -102,26 +102,26 @@ | ||||
| 								"forward_port": 8989, | ||||
| 								"access_list_id": 0, | ||||
| 								"certificate_id": 0, | ||||
| 								"ssl_forced": 0, | ||||
| 								"caching_enabled": 0, | ||||
| 								"block_exploits": 0, | ||||
| 								"ssl_forced": false, | ||||
| 								"caching_enabled": false, | ||||
| 								"block_exploits": false, | ||||
| 								"advanced_config": "", | ||||
| 								"meta": { | ||||
| 									"nginx_online": true, | ||||
| 									"nginx_err": null | ||||
| 								}, | ||||
| 								"allow_websocket_upgrade": 0, | ||||
| 								"http2_support": 0, | ||||
| 								"allow_websocket_upgrade": false, | ||||
| 								"http2_support": false, | ||||
| 								"forward_scheme": "http", | ||||
| 								"enabled": 1, | ||||
| 								"hsts_enabled": 0, | ||||
| 								"hsts_subdomains": 0, | ||||
| 								"enabled": true, | ||||
| 								"hsts_enabled": false, | ||||
| 								"hsts_subdomains": false, | ||||
| 								"owner": { | ||||
| 									"id": 1, | ||||
| 									"created_on": "2024-10-07T22:43:55.000Z", | ||||
| 									"modified_on": "2024-10-08T12:52:54.000Z", | ||||
| 									"is_deleted": 0, | ||||
| 									"is_disabled": 0, | ||||
| 									"is_deleted": false, | ||||
| 									"is_disabled": false, | ||||
| 									"email": "admin@example.com", | ||||
| 									"name": "Administrator", | ||||
| 									"nickname": "some guy", | ||||
|   | ||||
| @@ -90,24 +90,24 @@ | ||||
| 								"forward_port": 8989, | ||||
| 								"access_list_id": 0, | ||||
| 								"certificate_id": 0, | ||||
| 								"ssl_forced": 0, | ||||
| 								"caching_enabled": 0, | ||||
| 								"block_exploits": 0, | ||||
| 								"ssl_forced": false, | ||||
| 								"caching_enabled": false, | ||||
| 								"block_exploits": false, | ||||
| 								"advanced_config": "", | ||||
| 								"meta": {}, | ||||
| 								"allow_websocket_upgrade": 0, | ||||
| 								"http2_support": 0, | ||||
| 								"allow_websocket_upgrade": false, | ||||
| 								"http2_support": false, | ||||
| 								"forward_scheme": "http", | ||||
| 								"enabled": 1, | ||||
| 								"hsts_enabled": 0, | ||||
| 								"hsts_subdomains": 0, | ||||
| 								"enabled": true, | ||||
| 								"hsts_enabled": false, | ||||
| 								"hsts_subdomains": false, | ||||
| 								"certificate": null, | ||||
| 								"owner": { | ||||
| 									"id": 1, | ||||
| 									"created_on": "2024-10-07T22:43:55.000Z", | ||||
| 									"modified_on": "2024-10-08T12:52:54.000Z", | ||||
| 									"is_deleted": 0, | ||||
| 									"is_disabled": 0, | ||||
| 									"is_deleted": false, | ||||
| 									"is_disabled": false, | ||||
| 									"email": "admin@example.com", | ||||
| 									"name": "Administrator", | ||||
| 									"nickname": "some guy", | ||||
|   | ||||
| @@ -33,19 +33,19 @@ | ||||
| 									"owner_user_id": 1, | ||||
| 									"domain_names": ["test.example.com"], | ||||
| 									"forward_domain_name": "something-else.com", | ||||
| 									"preserve_path": 0, | ||||
| 									"preserve_path": false, | ||||
| 									"certificate_id": 0, | ||||
| 									"ssl_forced": 0, | ||||
| 									"block_exploits": 0, | ||||
| 									"ssl_forced": false, | ||||
| 									"block_exploits": false, | ||||
| 									"advanced_config": "", | ||||
| 									"meta": { | ||||
| 										"nginx_online": true, | ||||
| 										"nginx_err": null | ||||
| 									}, | ||||
| 									"http2_support": 0, | ||||
| 									"enabled": 1, | ||||
| 									"hsts_enabled": 0, | ||||
| 									"hsts_subdomains": 0, | ||||
| 									"http2_support": false, | ||||
| 									"enabled": true, | ||||
| 									"hsts_enabled": false, | ||||
| 									"hsts_subdomains": false, | ||||
| 									"forward_scheme": "http", | ||||
| 									"forward_http_code": 301 | ||||
| 								} | ||||
|   | ||||
| @@ -33,19 +33,19 @@ | ||||
| 								"owner_user_id": 1, | ||||
| 								"domain_names": ["test.example.com"], | ||||
| 								"forward_domain_name": "something-else.com", | ||||
| 								"preserve_path": 0, | ||||
| 								"preserve_path": false, | ||||
| 								"certificate_id": 0, | ||||
| 								"ssl_forced": 0, | ||||
| 								"block_exploits": 0, | ||||
| 								"ssl_forced": false, | ||||
| 								"block_exploits": false, | ||||
| 								"advanced_config": "", | ||||
| 								"meta": { | ||||
| 									"nginx_online": true, | ||||
| 									"nginx_err": null | ||||
| 								}, | ||||
| 								"http2_support": 0, | ||||
| 								"enabled": 1, | ||||
| 								"hsts_enabled": 0, | ||||
| 								"hsts_subdomains": 0, | ||||
| 								"http2_support": false, | ||||
| 								"enabled": true, | ||||
| 								"hsts_enabled": false, | ||||
| 								"hsts_subdomains": false, | ||||
| 								"forward_scheme": "http", | ||||
| 								"forward_http_code": 301 | ||||
| 							} | ||||
|   | ||||
| @@ -87,27 +87,27 @@ | ||||
| 								"owner_user_id": 1, | ||||
| 								"domain_names": ["test.example.com"], | ||||
| 								"forward_domain_name": "something-else.com", | ||||
| 								"preserve_path": 0, | ||||
| 								"preserve_path": false, | ||||
| 								"certificate_id": 0, | ||||
| 								"ssl_forced": 0, | ||||
| 								"block_exploits": 0, | ||||
| 								"ssl_forced": false, | ||||
| 								"block_exploits": false, | ||||
| 								"advanced_config": "", | ||||
| 								"meta": { | ||||
| 									"nginx_online": true, | ||||
| 									"nginx_err": null | ||||
| 								}, | ||||
| 								"http2_support": 0, | ||||
| 								"enabled": 1, | ||||
| 								"hsts_enabled": 0, | ||||
| 								"hsts_subdomains": 0, | ||||
| 								"http2_support": false, | ||||
| 								"enabled": true, | ||||
| 								"hsts_enabled": false, | ||||
| 								"hsts_subdomains": false, | ||||
| 								"forward_scheme": "http", | ||||
| 								"forward_http_code": 301, | ||||
| 								"owner": { | ||||
| 									"id": 1, | ||||
| 									"created_on": "2024-10-09T00:59:56.000Z", | ||||
| 									"modified_on": "2024-10-09T00:59:56.000Z", | ||||
| 									"is_deleted": 0, | ||||
| 									"is_disabled": 0, | ||||
| 									"is_deleted": false, | ||||
| 									"is_disabled": false, | ||||
| 									"email": "admin@example.com", | ||||
| 									"name": "Administrator", | ||||
| 									"nickname": "Admin", | ||||
|   | ||||
| @@ -75,16 +75,16 @@ | ||||
| 								"owner_user_id": 1, | ||||
| 								"domain_names": ["test.example.com"], | ||||
| 								"forward_domain_name": "something-else.com", | ||||
| 								"preserve_path": 0, | ||||
| 								"preserve_path": false, | ||||
| 								"certificate_id": 0, | ||||
| 								"ssl_forced": 0, | ||||
| 								"block_exploits": 0, | ||||
| 								"ssl_forced": false, | ||||
| 								"block_exploits": false, | ||||
| 								"advanced_config": "", | ||||
| 								"meta": {}, | ||||
| 								"http2_support": 0, | ||||
| 								"enabled": 1, | ||||
| 								"hsts_enabled": 0, | ||||
| 								"hsts_subdomains": 0, | ||||
| 								"http2_support": false, | ||||
| 								"enabled": true, | ||||
| 								"hsts_enabled": false, | ||||
| 								"hsts_subdomains": false, | ||||
| 								"forward_scheme": "http", | ||||
| 								"forward_http_code": 301, | ||||
| 								"certificate": null, | ||||
| @@ -92,8 +92,8 @@ | ||||
| 									"id": 1, | ||||
| 									"created_on": "2024-10-09T00:59:56.000Z", | ||||
| 									"modified_on": "2024-10-09T00:59:56.000Z", | ||||
| 									"is_deleted": 0, | ||||
| 									"is_disabled": 0, | ||||
| 									"is_deleted": false, | ||||
| 									"is_disabled": false, | ||||
| 									"email": "admin@example.com", | ||||
| 									"name": "Administrator", | ||||
| 									"nickname": "Admin", | ||||
|   | ||||
| @@ -34,13 +34,13 @@ | ||||
| 									"incoming_port": 9090, | ||||
| 									"forwarding_host": "router.internal", | ||||
| 									"forwarding_port": 80, | ||||
| 									"tcp_forwarding": 0, | ||||
| 									"udp_forwarding": 0, | ||||
| 									"tcp_forwarding": true, | ||||
| 									"udp_forwarding": false, | ||||
| 									"meta": { | ||||
| 										"nginx_online": true, | ||||
| 										"nginx_err": null | ||||
| 									}, | ||||
| 									"enabled": 1 | ||||
| 									"enabled": true | ||||
| 								} | ||||
| 							] | ||||
| 						} | ||||
|   | ||||
| @@ -55,19 +55,19 @@ | ||||
| 								"incoming_port": 9090, | ||||
| 								"forwarding_host": "router.internal", | ||||
| 								"forwarding_port": 80, | ||||
| 								"tcp_forwarding": 0, | ||||
| 								"udp_forwarding": 0, | ||||
| 								"tcp_forwarding": true, | ||||
| 								"udp_forwarding": false, | ||||
| 								"meta": { | ||||
| 									"nginx_online": true, | ||||
| 									"nginx_err": null | ||||
| 								}, | ||||
| 								"enabled": 1, | ||||
| 								"enabled": true, | ||||
| 								"owner": { | ||||
| 									"id": 1, | ||||
| 									"created_on": "2024-10-09T02:33:16.000Z", | ||||
| 									"modified_on": "2024-10-09T02:33:16.000Z", | ||||
| 									"is_deleted": 0, | ||||
| 									"is_disabled": 0, | ||||
| 									"is_deleted": false, | ||||
| 									"is_disabled": false, | ||||
| 									"email": "admin@example.com", | ||||
| 									"name": "Administrator", | ||||
| 									"nickname": "Admin", | ||||
|   | ||||
| @@ -34,13 +34,13 @@ | ||||
| 								"incoming_port": 9090, | ||||
| 								"forwarding_host": "router.internal", | ||||
| 								"forwarding_port": 80, | ||||
| 								"tcp_forwarding": 0, | ||||
| 								"udp_forwarding": 0, | ||||
| 								"tcp_forwarding": true, | ||||
| 								"udp_forwarding": false, | ||||
| 								"meta": { | ||||
| 									"nginx_online": true, | ||||
| 									"nginx_err": null | ||||
| 								}, | ||||
| 								"enabled": 1 | ||||
| 								"enabled": true | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
|   | ||||
| @@ -102,26 +102,26 @@ | ||||
| 								"forward_port": 8989, | ||||
| 								"access_list_id": 0, | ||||
| 								"certificate_id": 0, | ||||
| 								"ssl_forced": 0, | ||||
| 								"caching_enabled": 0, | ||||
| 								"block_exploits": 0, | ||||
| 								"ssl_forced": false, | ||||
| 								"caching_enabled": false, | ||||
| 								"block_exploits": false, | ||||
| 								"advanced_config": "", | ||||
| 								"meta": { | ||||
| 									"nginx_online": true, | ||||
| 									"nginx_err": null | ||||
| 								}, | ||||
| 								"allow_websocket_upgrade": 0, | ||||
| 								"http2_support": 0, | ||||
| 								"allow_websocket_upgrade": false, | ||||
| 								"http2_support": false, | ||||
| 								"forward_scheme": "http", | ||||
| 								"enabled": 1, | ||||
| 								"hsts_enabled": 0, | ||||
| 								"hsts_subdomains": 0, | ||||
| 								"enabled": true, | ||||
| 								"hsts_enabled": false, | ||||
| 								"hsts_subdomains": false, | ||||
| 								"owner": { | ||||
| 									"id": 1, | ||||
| 									"created_on": "2024-10-07T22:43:55.000Z", | ||||
| 									"modified_on": "2024-10-08T12:52:54.000Z", | ||||
| 									"is_deleted": 0, | ||||
| 									"is_disabled": 0, | ||||
| 									"is_deleted": false, | ||||
| 									"is_disabled": false, | ||||
| 									"email": "admin@example.com", | ||||
| 									"name": "Administrator", | ||||
| 									"nickname": "some guy", | ||||
|   | ||||
| @@ -30,7 +30,7 @@ | ||||
| 									"id": 1, | ||||
| 									"created_on": "2020-01-30T09:36:08.000Z", | ||||
| 									"modified_on": "2020-01-30T09:41:04.000Z", | ||||
| 									"is_disabled": 0, | ||||
| 									"is_disabled": false, | ||||
| 									"email": "jc@jc21.com", | ||||
| 									"name": "Jamie Curnow", | ||||
| 									"nickname": "James", | ||||
| @@ -45,7 +45,7 @@ | ||||
| 									"id": 1, | ||||
| 									"created_on": "2020-01-30T09:36:08.000Z", | ||||
| 									"modified_on": "2020-01-30T09:41:04.000Z", | ||||
| 									"is_disabled": 0, | ||||
| 									"is_disabled": false, | ||||
| 									"email": "jc@jc21.com", | ||||
| 									"name": "Jamie Curnow", | ||||
| 									"nickname": "James", | ||||
|   | ||||
| @@ -56,7 +56,7 @@ | ||||
| 								"id": 2, | ||||
| 								"created_on": "2020-01-30T09:41:04.000Z", | ||||
| 								"modified_on": "2020-01-30T09:41:04.000Z", | ||||
| 								"is_disabled": 0, | ||||
| 								"is_disabled": false, | ||||
| 								"email": "jc@jc21.com", | ||||
| 								"name": "Jamie Curnow", | ||||
| 								"nickname": "James", | ||||
|   | ||||
| @@ -39,7 +39,7 @@ | ||||
| 								"id": 1, | ||||
| 								"created_on": "2020-01-30T09:36:08.000Z", | ||||
| 								"modified_on": "2020-01-30T09:41:04.000Z", | ||||
| 								"is_disabled": 0, | ||||
| 								"is_disabled": false, | ||||
| 								"email": "jc@jc21.com", | ||||
| 								"name": "Jamie Curnow", | ||||
| 								"nickname": "James", | ||||
|   | ||||
| @@ -34,7 +34,7 @@ | ||||
| 									"id": 1, | ||||
| 									"created_on": "2020-01-30T10:43:44.000Z", | ||||
| 									"modified_on": "2020-01-30T10:43:44.000Z", | ||||
| 									"is_disabled": 0, | ||||
| 									"is_disabled": false, | ||||
| 									"email": "jc@jc21.com", | ||||
| 									"name": "Jamie Curnow", | ||||
| 									"nickname": "James", | ||||
|   | ||||
| @@ -69,7 +69,7 @@ | ||||
| 								"id": 2, | ||||
| 								"created_on": "2020-01-30T09:36:08.000Z", | ||||
| 								"modified_on": "2020-01-30T09:41:04.000Z", | ||||
| 								"is_disabled": 0, | ||||
| 								"is_disabled": false, | ||||
| 								"email": "jc@jc21.com", | ||||
| 								"name": "Jamie Curnow", | ||||
| 								"nickname": "James", | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| { | ||||
| 	"openapi": "3.0.0", | ||||
| 	"openapi": "3.1.0", | ||||
| 	"info": { | ||||
| 		"title": "Nginx Proxy Manager API", | ||||
| 		"version": "2.x.x" | ||||
|   | ||||
							
								
								
									
										16
									
								
								backend/validate-schema.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								backend/validate-schema.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| const SwaggerParser = require('@apidevtools/swagger-parser'); | ||||
| const chalk         = require('chalk'); | ||||
| const schema        = require('./schema'); | ||||
| const log           = console.log; | ||||
|  | ||||
| schema.getCompiledSchema().then(async (swaggerJSON) => { | ||||
| 	try { | ||||
| 		const api = await SwaggerParser.validate(swaggerJSON); | ||||
| 		console.log('API name: %s, Version: %s', api.info.title, api.info.version); | ||||
| 		log(chalk.green('❯ Schema is valid')); | ||||
| 	} catch (e) { | ||||
| 		console.error(e); | ||||
| 		log(chalk.red('❯', e.message), '\n'); | ||||
| 		process.exit(1); | ||||
| 	} | ||||
| }); | ||||
| @@ -2,12 +2,12 @@ | ||||
| # yarn lockfile v1 | ||||
|  | ||||
|  | ||||
| "@apidevtools/json-schema-ref-parser@8.0.0": | ||||
|   version "8.0.0" | ||||
|   resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-8.0.0.tgz#9eb749499b3f8d919e90bb141e4b6f67aee4692d" | ||||
|   integrity sha512-n4YBtwQhdpLto1BaUCyAeflizmIbaloGShsPyRtFf5qdFJxfssj+GgLavczgKJFa3Bq+3St2CKcpRJdjtB4EBw== | ||||
| "@apidevtools/json-schema-ref-parser@9.0.6": | ||||
|   version "9.0.6" | ||||
|   resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.6.tgz#5d9000a3ac1fd25404da886da6b266adcd99cf1c" | ||||
|   integrity sha512-M3YgsLjI0lZxvrpeGVk9Ap032W6TPQkH6pRAZz81Ac3WUNF79VQooAFnp8umjvVzUmD93NkogxEwbSce7qMsUg== | ||||
|   dependencies: | ||||
|     "@jsdevtools/ono" "^7.1.0" | ||||
|     "@jsdevtools/ono" "^7.1.3" | ||||
|     call-me-maybe "^1.0.1" | ||||
|     js-yaml "^3.13.1" | ||||
|  | ||||
| @@ -20,6 +20,29 @@ | ||||
|     "@types/json-schema" "^7.0.15" | ||||
|     js-yaml "^4.1.0" | ||||
|  | ||||
| "@apidevtools/openapi-schemas@^2.1.0": | ||||
|   version "2.1.0" | ||||
|   resolved "https://registry.yarnpkg.com/@apidevtools/openapi-schemas/-/openapi-schemas-2.1.0.tgz#9fa08017fb59d80538812f03fc7cac5992caaa17" | ||||
|   integrity sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ== | ||||
|  | ||||
| "@apidevtools/swagger-methods@^3.0.2": | ||||
|   version "3.0.2" | ||||
|   resolved "https://registry.yarnpkg.com/@apidevtools/swagger-methods/-/swagger-methods-3.0.2.tgz#b789a362e055b0340d04712eafe7027ddc1ac267" | ||||
|   integrity sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg== | ||||
|  | ||||
| "@apidevtools/swagger-parser@^10.1.0": | ||||
|   version "10.1.0" | ||||
|   resolved "https://registry.yarnpkg.com/@apidevtools/swagger-parser/-/swagger-parser-10.1.0.tgz#a987d71e5be61feb623203be0c96e5985b192ab6" | ||||
|   integrity sha512-9Kt7EuS/7WbMAUv2gSziqjvxwDbFSg3Xeyfuj5laUODX8o/k/CpsAKiQ8W7/R88eXFTMbJYg6+7uAmOWNKmwnw== | ||||
|   dependencies: | ||||
|     "@apidevtools/json-schema-ref-parser" "9.0.6" | ||||
|     "@apidevtools/openapi-schemas" "^2.1.0" | ||||
|     "@apidevtools/swagger-methods" "^3.0.2" | ||||
|     "@jsdevtools/ono" "^7.1.3" | ||||
|     ajv "^8.6.3" | ||||
|     ajv-draft-04 "^1.0.0" | ||||
|     call-me-maybe "^1.0.1" | ||||
|  | ||||
| "@eslint-community/eslint-utils@^4.2.0": | ||||
|   version "4.3.0" | ||||
|   resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.3.0.tgz#a556790523a351b4e47e9d385f47265eaaf9780a" | ||||
| @@ -76,7 +99,7 @@ | ||||
|   resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" | ||||
|   integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== | ||||
|  | ||||
| "@jsdevtools/ono@^7.1.0", "@jsdevtools/ono@^7.1.3": | ||||
| "@jsdevtools/ono@^7.1.3": | ||||
|   version "7.1.3" | ||||
|   resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796" | ||||
|   integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg== | ||||
| @@ -207,7 +230,12 @@ aggregate-error@^3.0.0: | ||||
|     clean-stack "^2.0.0" | ||||
|     indent-string "^4.0.0" | ||||
|  | ||||
| ajv@^6.10.0, ajv@^6.12.0, ajv@^6.12.4: | ||||
| ajv-draft-04@^1.0.0: | ||||
|   version "1.0.0" | ||||
|   resolved "https://registry.yarnpkg.com/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz#3b64761b268ba0b9e668f0b41ba53fce0ad77fc8" | ||||
|   integrity sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw== | ||||
|  | ||||
| ajv@^6.10.0, ajv@^6.12.4: | ||||
|   version "6.12.6" | ||||
|   resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" | ||||
|   integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== | ||||
| @@ -217,6 +245,16 @@ ajv@^6.10.0, ajv@^6.12.0, ajv@^6.12.4: | ||||
|     json-schema-traverse "^0.4.1" | ||||
|     uri-js "^4.2.2" | ||||
|  | ||||
| ajv@^8.17.1, ajv@^8.6.3: | ||||
|   version "8.17.1" | ||||
|   resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" | ||||
|   integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== | ||||
|   dependencies: | ||||
|     fast-deep-equal "^3.1.3" | ||||
|     fast-uri "^3.0.1" | ||||
|     json-schema-traverse "^1.0.0" | ||||
|     require-from-string "^2.0.2" | ||||
|  | ||||
| ajv@^8.6.2: | ||||
|   version "8.12.0" | ||||
|   resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" | ||||
| @@ -566,6 +604,14 @@ camelcase@^5.0.0, camelcase@^5.3.1: | ||||
|   resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" | ||||
|   integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== | ||||
|  | ||||
| chalk@4.1.2, chalk@^4.0.0: | ||||
|   version "4.1.2" | ||||
|   resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" | ||||
|   integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== | ||||
|   dependencies: | ||||
|     ansi-styles "^4.1.0" | ||||
|     supports-color "^7.1.0" | ||||
|  | ||||
| chalk@^2.3.2: | ||||
|   version "2.4.2" | ||||
|   resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" | ||||
| @@ -583,14 +629,6 @@ chalk@^3.0.0: | ||||
|     ansi-styles "^4.1.0" | ||||
|     supports-color "^7.1.0" | ||||
|  | ||||
| chalk@^4.0.0: | ||||
|   version "4.1.2" | ||||
|   resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" | ||||
|   integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== | ||||
|   dependencies: | ||||
|     ansi-styles "^4.1.0" | ||||
|     supports-color "^7.1.0" | ||||
|  | ||||
| chokidar@^3.2.2: | ||||
|   version "3.4.1" | ||||
|   resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.1.tgz#e905bdecf10eaa0a0b1db0c664481cc4cbc22ba1" | ||||
| @@ -1199,6 +1237,11 @@ fast-levenshtein@^2.0.6: | ||||
|   resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" | ||||
|   integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== | ||||
|  | ||||
| fast-uri@^3.0.1: | ||||
|   version "3.0.2" | ||||
|   resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.2.tgz#d78b298cf70fd3b752fd951175a3da6a7b48f024" | ||||
|   integrity sha512-GR6f0hD7XXyNJa25Tb9BuIdN0tdr+0BMi6/CJPH3wJO1JjNG3n/VsSw38AwRdKZABm8lGbPfakLRkYzx2V9row== | ||||
|  | ||||
| fastq@^1.6.0: | ||||
|   version "1.15.0" | ||||
|   resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" | ||||
| @@ -1870,13 +1913,6 @@ json-parse-better-errors@^1.0.1: | ||||
|   resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" | ||||
|   integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== | ||||
|  | ||||
| json-schema-ref-parser@^8.0.0: | ||||
|   version "8.0.0" | ||||
|   resolved "https://registry.yarnpkg.com/json-schema-ref-parser/-/json-schema-ref-parser-8.0.0.tgz#7c758fac2cf822c05e837abd0a13f8fa2c15ffd4" | ||||
|   integrity sha512-2P4icmNkZLrBr6oa5gSZaDSol/oaBHYkoP/8dsw63E54NnHGRhhiFuy9yFoxPuSm+uHKmeGxAAWMDF16SCHhcQ== | ||||
|   dependencies: | ||||
|     "@apidevtools/json-schema-ref-parser" "8.0.0" | ||||
|  | ||||
| json-schema-traverse@^0.4.1: | ||||
|   version "0.4.1" | ||||
|   resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" | ||||
|   | ||||
| @@ -14,7 +14,7 @@ describe('Basic API checks', () => { | ||||
| 		cy.task('backendApiGet', { | ||||
| 			path: '/api/schema', | ||||
| 		}).then((data) => { | ||||
| 			expect(data.openapi).to.be.equal('3.0.0'); | ||||
| 			expect(data.openapi).to.be.equal('3.1.0'); | ||||
| 		}); | ||||
| 	}); | ||||
| }); | ||||
|   | ||||
| @@ -39,7 +39,7 @@ describe('Hosts endpoints', () => { | ||||
| 			expect(data).to.have.property('id'); | ||||
| 			expect(data.id).to.be.greaterThan(0); | ||||
| 			expect(data).to.have.property('enabled'); | ||||
| 			expect(data.enabled).to.be.greaterThan(0); | ||||
| 			expect(data).to.have.property("enabled", true); | ||||
| 			expect(data).to.have.property('meta'); | ||||
| 			expect(typeof data.meta.nginx_online).to.be.equal('undefined'); | ||||
| 		}); | ||||
|   | ||||
| @@ -1,12 +1,7 @@ | ||||
| const _ = require("lodash"); | ||||
| const chalk = require("chalk"); | ||||
|  | ||||
| module.exports = function() { | ||||
| 	var arr = _.values(arguments); | ||||
| 	arr.unshift( | ||||
| 		chalk.blue.bold("[") + | ||||
| 			chalk.yellow.bold("Backend API") + | ||||
| 			chalk.blue.bold("]"), | ||||
| 	); | ||||
| 	let arr = _.values(arguments); | ||||
| 	arr.unshift('[Backend API]'); | ||||
| 	console.log.apply(null, arr); | ||||
| }; | ||||
|   | ||||
| @@ -6,21 +6,20 @@ | ||||
| 	"dependencies": { | ||||
| 		"@jc21/cypress-swagger-validation": "^0.2.6", | ||||
| 		"@jc21/restler": "^3.4.0", | ||||
| 		"chalk": "^4.1.0", | ||||
| 		"cypress": "^13.9.0", | ||||
| 		"cypress": "^13.15.0", | ||||
| 		"cypress-multi-reporters": "^1.6.4", | ||||
| 		"cypress-wait-until": "^3.0.1", | ||||
| 		"eslint": "^9.3.0", | ||||
| 		"cypress-wait-until": "^3.0.2", | ||||
| 		"eslint": "^9.12.0", | ||||
| 		"eslint-plugin-align-assignments": "^1.1.2", | ||||
| 		"eslint-plugin-chai-friendly": "^0.7.4", | ||||
| 		"eslint-plugin-cypress": "^3.2.0", | ||||
| 		"eslint-plugin-chai-friendly": "^1.0.1", | ||||
| 		"eslint-plugin-cypress": "^3.5.0", | ||||
| 		"lodash": "^4.17.21", | ||||
| 		"mocha": "^10.4.0", | ||||
| 		"mocha": "^10.7.3", | ||||
| 		"mocha-junit-reporter": "^2.2.1" | ||||
| 	}, | ||||
| 	"scripts": { | ||||
| 		"cypress": "cypress open --config-file=cypress/config/dev.json --config baseUrl=${BASE_URL:-http://127.0.0.1:3081}", | ||||
| 		"cypress:headless": "cypress run --config-file=cypress/config/dev.json --config baseUrl=${BASE_URL:-http://127.0.0.1:3081}" | ||||
| 		"cypress": "cypress open --config-file=cypress/config/dev.js --config baseUrl=${BASE_URL:-http://127.0.0.1:3081}", | ||||
| 		"cypress:headless": "cypress run --config-file=cypress/config/dev.js --config baseUrl=${BASE_URL:-http://127.0.0.1:3081}" | ||||
| 	}, | ||||
| 	"author": "", | ||||
| 	"license": "ISC" | ||||
|   | ||||
							
								
								
									
										632
									
								
								test/yarn.lock
									
									
									
									
									
								
							
							
						
						
									
										632
									
								
								test/yarn.lock
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Reference in New Issue
	
	Block a user