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'); | const internalCertificate = require('./certificate'); | ||||||
|  |  | ||||||
| function omissions () { | function omissions () { | ||||||
| 	return ['is_deleted']; | 	return ['is_deleted', 'owner.is_deleted']; | ||||||
| } | } | ||||||
|  |  | ||||||
| const internalProxyHost = { | const internalProxyHost = { | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ | |||||||
|  |  | ||||||
| const _              = require('lodash'); | const _              = require('lodash'); | ||||||
| const logger         = require('../logger').access; | const logger         = require('../logger').access; | ||||||
| const validator      = require('ajv'); | const Ajv            = require('ajv/dist/2020'); | ||||||
| const error          = require('./error'); | const error          = require('./error'); | ||||||
| const userModel      = require('../models/user'); | const userModel      = require('../models/user'); | ||||||
| const proxyHostModel = require('../models/proxy_host'); | const proxyHostModel = require('../models/proxy_host'); | ||||||
| @@ -174,7 +174,6 @@ module.exports = function (token_string) { | |||||||
|  |  | ||||||
| 		let schema = { | 		let schema = { | ||||||
| 			$id:                  'objects', | 			$id:                  'objects', | ||||||
| 			$schema:              'http://json-schema.org/draft-07/schema#', |  | ||||||
| 			description:          'Actor Properties', | 			description:          'Actor Properties', | ||||||
| 			type:                 'object', | 			type:                 'object', | ||||||
| 			additionalProperties: false, | 			additionalProperties: false, | ||||||
| @@ -251,7 +250,7 @@ module.exports = function (token_string) { | |||||||
| 						// Initialised, token decoded ok | 						// Initialised, token decoded ok | ||||||
| 						return this.getObjectSchema(permission) | 						return this.getObjectSchema(permission) | ||||||
| 							.then((objectSchema) => { | 							.then((objectSchema) => { | ||||||
| 								let data_schema = { | 								const data_schema = { | ||||||
| 									[permission]: { | 									[permission]: { | ||||||
| 										data:                         data, | 										data:                         data, | ||||||
| 										scope:                        Token.get('scope'), | 										scope:                        Token.get('scope'), | ||||||
| @@ -267,7 +266,6 @@ module.exports = function (token_string) { | |||||||
| 								}; | 								}; | ||||||
|  |  | ||||||
| 								let permissionSchema = { | 								let permissionSchema = { | ||||||
| 									$schema:              'http://json-schema.org/draft-07/schema#', |  | ||||||
| 									$async:               true, | 									$async:               true, | ||||||
| 									$id:                  'permissions', | 									$id:                  'permissions', | ||||||
| 									additionalProperties: false, | 									additionalProperties: false, | ||||||
| @@ -276,14 +274,9 @@ module.exports = function (token_string) { | |||||||
|  |  | ||||||
| 								permissionSchema.properties[permission] = require('./access/' + permission.replace(/:/gim, '-') + '.json'); | 								permissionSchema.properties[permission] = require('./access/' + permission.replace(/:/gim, '-') + '.json'); | ||||||
|  |  | ||||||
| 								// logger.info('objectSchema', JSON.stringify(objectSchema, null, 2)); | 								const ajv = new Ajv({ | ||||||
| 								// logger.info('permissionSchema', JSON.stringify(permissionSchema, null, 2)); |  | ||||||
| 								// logger.info('data_schema', JSON.stringify(data_schema, null, 2)); |  | ||||||
|  |  | ||||||
| 								let ajv = validator({ |  | ||||||
| 									verbose:      true, | 									verbose:      true, | ||||||
| 									allErrors:    true, | 									allErrors:    true, | ||||||
| 									format:       'full', |  | ||||||
| 									missingRefs:  'fail', | 									missingRefs:  'fail', | ||||||
| 									breakOnError: true, | 									breakOnError: true, | ||||||
| 									coerceTypes:  true, | 									coerceTypes:  true, | ||||||
|   | |||||||
| @@ -1,5 +1,4 @@ | |||||||
| { | { | ||||||
| 	"$schema": "http://json-schema.org/draft-07/schema#", |  | ||||||
| 	"$id": "perms", | 	"$id": "perms", | ||||||
| 	"definitions": { | 	"definitions": { | ||||||
| 		"view": { | 		"view": { | ||||||
|   | |||||||
| @@ -1,5 +1,4 @@ | |||||||
| { | { | ||||||
| 	"$schema": "http://json-schema.org/draft-07/schema#", |  | ||||||
| 	"$id": "roles", | 	"$id": "roles", | ||||||
| 	"definitions": { | 	"definitions": { | ||||||
| 		"admin": { | 		"admin": { | ||||||
|   | |||||||
| @@ -27,6 +27,24 @@ module.exports = { | |||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		return null; | 		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 error = require('../error'); | ||||||
|  |  | ||||||
| const ajv = require('ajv')({ | const ajv = new Ajv({ | ||||||
| 	verbose:        true, | 	verbose:         true, | ||||||
| 	validateSchema: true, | 	allErrors:       true, | ||||||
| 	allErrors:      false, | 	allowUnionTypes: true, | ||||||
| 	format:         'full', | 	strict:          false, | ||||||
| 	coerceTypes:    true | 	coerceTypes:     true, | ||||||
| }); | }); | ||||||
|  |  | ||||||
| /** | /** | ||||||
| @@ -25,8 +26,8 @@ function apiValidator (schema, payload/*, description*/) { | |||||||
| 			return; | 			return; | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		let validate = ajv.compile(schema); | 		const validate = ajv.compile(schema); | ||||||
| 		let valid    = validate(payload); | 		const valid    = validate(payload); | ||||||
|  |  | ||||||
| 		if (valid && !validate.errors) { | 		if (valid && !validate.errors) { | ||||||
| 			resolve(payload); | 			resolve(payload); | ||||||
|   | |||||||
| @@ -1,15 +1,17 @@ | |||||||
| const _                 = require('lodash'); | const _                 = require('lodash'); | ||||||
|  | const Ajv               = require('ajv/dist/2020'); | ||||||
| const error             = require('../error'); | const error             = require('../error'); | ||||||
| const commonDefinitions = require('../../schema/common.json'); | const commonDefinitions = require('../../schema/common.json'); | ||||||
|  |  | ||||||
| RegExp.prototype.toJSON = RegExp.prototype.toString; | RegExp.prototype.toJSON = RegExp.prototype.toString; | ||||||
|  |  | ||||||
| const ajv = require('ajv')({ | const ajv = new Ajv({ | ||||||
| 	verbose:     true, | 	verbose:         true, | ||||||
| 	allErrors:   true, | 	allErrors:       true, | ||||||
| 	format:      'full',  // strict regexes for format checks | 	allowUnionTypes: true, | ||||||
| 	coerceTypes: true, | 	coerceTypes:     true, | ||||||
| 	schemas:     [commonDefinitions] | 	strict:          false, | ||||||
|  | 	schemas:         [commonDefinitions] | ||||||
| }); | }); | ||||||
|  |  | ||||||
| /** | /** | ||||||
| @@ -38,7 +40,6 @@ function validator (schema, payload) { | |||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	}); | 	}); | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| module.exports = validator; | module.exports = validator; | ||||||
|   | |||||||
| @@ -2,6 +2,7 @@ | |||||||
| // http://vincit.github.io/objection.js/ | // http://vincit.github.io/objection.js/ | ||||||
|  |  | ||||||
| const db               = require('../db'); | const db               = require('../db'); | ||||||
|  | const helpers          = require('../lib/helpers'); | ||||||
| const Model            = require('objection').Model; | const Model            = require('objection').Model; | ||||||
| const User             = require('./user'); | const User             = require('./user'); | ||||||
| const AccessListAuth   = require('./access_list_auth'); | const AccessListAuth   = require('./access_list_auth'); | ||||||
| @@ -10,6 +11,12 @@ const now              = require('./now_helper'); | |||||||
|  |  | ||||||
| Model.knex(db); | Model.knex(db); | ||||||
|  |  | ||||||
|  | const boolFields = [ | ||||||
|  | 	'is_deleted', | ||||||
|  | 	'satisfy_any', | ||||||
|  | 	'pass_auth', | ||||||
|  | ]; | ||||||
|  |  | ||||||
| class AccessList extends Model { | class AccessList extends Model { | ||||||
| 	$beforeInsert () { | 	$beforeInsert () { | ||||||
| 		this.created_on  = now(); | 		this.created_on  = now(); | ||||||
| @@ -25,6 +32,16 @@ class AccessList extends Model { | |||||||
| 		this.modified_on = now(); | 		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 () { | 	static get name () { | ||||||
| 		return 'AccessList'; | 		return 'AccessList'; | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -1,14 +1,19 @@ | |||||||
| // Objection Docs: | // Objection Docs: | ||||||
| // http://vincit.github.io/objection.js/ | // http://vincit.github.io/objection.js/ | ||||||
|  |  | ||||||
| const bcrypt = require('bcrypt'); | const bcrypt  = require('bcrypt'); | ||||||
| const db     = require('../db'); | const db      = require('../db'); | ||||||
| const Model  = require('objection').Model; | const helpers = require('../lib/helpers'); | ||||||
| const User   = require('./user'); | const Model   = require('objection').Model; | ||||||
| const now    = require('./now_helper'); | const User    = require('./user'); | ||||||
|  | const now     = require('./now_helper'); | ||||||
|  |  | ||||||
| Model.knex(db); | Model.knex(db); | ||||||
|  |  | ||||||
|  | const boolFields = [ | ||||||
|  | 	'is_deleted', | ||||||
|  | ]; | ||||||
|  |  | ||||||
| function encryptPassword () { | function encryptPassword () { | ||||||
| 	/* jshint -W040 */ | 	/* jshint -W040 */ | ||||||
| 	let _this = this; | 	let _this = this; | ||||||
| @@ -41,6 +46,16 @@ class Auth extends Model { | |||||||
| 		return encryptPassword.apply(this, queryContext); | 		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 | 	 * Verify a plain password against the encrypted password | ||||||
| 	 * | 	 * | ||||||
|   | |||||||
| @@ -1,13 +1,18 @@ | |||||||
| // Objection Docs: | // Objection Docs: | ||||||
| // http://vincit.github.io/objection.js/ | // http://vincit.github.io/objection.js/ | ||||||
|  |  | ||||||
| const db    = require('../db'); | const db      = require('../db'); | ||||||
| const Model = require('objection').Model; | const helpers = require('../lib/helpers'); | ||||||
| const User  = require('./user'); | const Model   = require('objection').Model; | ||||||
| const now   = require('./now_helper'); | const User    = require('./user'); | ||||||
|  | const now     = require('./now_helper'); | ||||||
|  |  | ||||||
| Model.knex(db); | Model.knex(db); | ||||||
|  |  | ||||||
|  | const boolFields = [ | ||||||
|  | 	'is_deleted', | ||||||
|  | ]; | ||||||
|  |  | ||||||
| class Certificate extends Model { | class Certificate extends Model { | ||||||
| 	$beforeInsert () { | 	$beforeInsert () { | ||||||
| 		this.created_on  = now(); | 		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 () { | 	static get name () { | ||||||
| 		return 'Certificate'; | 		return 'Certificate'; | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -2,6 +2,7 @@ | |||||||
| // http://vincit.github.io/objection.js/ | // http://vincit.github.io/objection.js/ | ||||||
|  |  | ||||||
| const db          = require('../db'); | const db          = require('../db'); | ||||||
|  | const helpers     = require('../lib/helpers'); | ||||||
| const Model       = require('objection').Model; | const Model       = require('objection').Model; | ||||||
| const User        = require('./user'); | const User        = require('./user'); | ||||||
| const Certificate = require('./certificate'); | const Certificate = require('./certificate'); | ||||||
| @@ -9,6 +10,11 @@ const now         = require('./now_helper'); | |||||||
|  |  | ||||||
| Model.knex(db); | Model.knex(db); | ||||||
|  |  | ||||||
|  | const boolFields = [ | ||||||
|  | 	'is_deleted', | ||||||
|  | 	'enabled', | ||||||
|  | ]; | ||||||
|  |  | ||||||
| class DeadHost extends Model { | class DeadHost extends Model { | ||||||
| 	$beforeInsert () { | 	$beforeInsert () { | ||||||
| 		this.created_on  = now(); | 		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 () { | 	static get name () { | ||||||
| 		return 'DeadHost'; | 		return 'DeadHost'; | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -2,6 +2,7 @@ | |||||||
| // http://vincit.github.io/objection.js/ | // http://vincit.github.io/objection.js/ | ||||||
|  |  | ||||||
| const db          = require('../db'); | const db          = require('../db'); | ||||||
|  | const helpers     = require('../lib/helpers'); | ||||||
| const Model       = require('objection').Model; | const Model       = require('objection').Model; | ||||||
| const User        = require('./user'); | const User        = require('./user'); | ||||||
| const AccessList  = require('./access_list'); | const AccessList  = require('./access_list'); | ||||||
| @@ -10,6 +11,18 @@ const now         = require('./now_helper'); | |||||||
|  |  | ||||||
| Model.knex(db); | 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 { | class ProxyHost extends Model { | ||||||
| 	$beforeInsert () { | 	$beforeInsert () { | ||||||
| 		this.created_on  = now(); | 		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 () { | 	static get name () { | ||||||
| 		return 'ProxyHost'; | 		return 'ProxyHost'; | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -3,6 +3,7 @@ | |||||||
| // http://vincit.github.io/objection.js/ | // http://vincit.github.io/objection.js/ | ||||||
|  |  | ||||||
| const db          = require('../db'); | const db          = require('../db'); | ||||||
|  | const helpers     = require('../lib/helpers'); | ||||||
| const Model       = require('objection').Model; | const Model       = require('objection').Model; | ||||||
| const User        = require('./user'); | const User        = require('./user'); | ||||||
| const Certificate = require('./certificate'); | const Certificate = require('./certificate'); | ||||||
| @@ -10,6 +11,14 @@ const now         = require('./now_helper'); | |||||||
|  |  | ||||||
| Model.knex(db); | Model.knex(db); | ||||||
|  |  | ||||||
|  | const boolFields = [ | ||||||
|  | 	'is_deleted', | ||||||
|  | 	'enabled', | ||||||
|  | 	'preserve_path', | ||||||
|  | 	'ssl_forced', | ||||||
|  | 	'block_exploits', | ||||||
|  | ]; | ||||||
|  |  | ||||||
| class RedirectionHost extends Model { | class RedirectionHost extends Model { | ||||||
| 	$beforeInsert () { | 	$beforeInsert () { | ||||||
| 		this.created_on  = now(); | 		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 () { | 	static get name () { | ||||||
| 		return 'RedirectionHost'; | 		return 'RedirectionHost'; | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -1,13 +1,20 @@ | |||||||
| // Objection Docs: | // Objection Docs: | ||||||
| // http://vincit.github.io/objection.js/ | // http://vincit.github.io/objection.js/ | ||||||
|  |  | ||||||
| const db    = require('../db'); | const db      = require('../db'); | ||||||
| const Model = require('objection').Model; | const helpers = require('../lib/helpers'); | ||||||
| const User  = require('./user'); | const Model   = require('objection').Model; | ||||||
| const now   = require('./now_helper'); | const User    = require('./user'); | ||||||
|  | const now     = require('./now_helper'); | ||||||
|  |  | ||||||
| Model.knex(db); | Model.knex(db); | ||||||
|  |  | ||||||
|  | const boolFields = [ | ||||||
|  | 	'is_deleted', | ||||||
|  | 	'tcp_forwarding', | ||||||
|  | 	'udp_forwarding', | ||||||
|  | ]; | ||||||
|  |  | ||||||
| class Stream extends Model { | class Stream extends Model { | ||||||
| 	$beforeInsert () { | 	$beforeInsert () { | ||||||
| 		this.created_on  = now(); | 		this.created_on  = now(); | ||||||
| @@ -23,6 +30,16 @@ class Stream extends Model { | |||||||
| 		this.modified_on = now(); | 		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 () { | 	static get name () { | ||||||
| 		return 'Stream'; | 		return 'Stream'; | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -2,12 +2,18 @@ | |||||||
| // http://vincit.github.io/objection.js/ | // http://vincit.github.io/objection.js/ | ||||||
|  |  | ||||||
| const db             = require('../db'); | const db             = require('../db'); | ||||||
|  | const helpers        = require('../lib/helpers'); | ||||||
| const Model          = require('objection').Model; | const Model          = require('objection').Model; | ||||||
| const UserPermission = require('./user_permission'); | const UserPermission = require('./user_permission'); | ||||||
| const now            = require('./now_helper'); | const now            = require('./now_helper'); | ||||||
|  |  | ||||||
| Model.knex(db); | Model.knex(db); | ||||||
|  |  | ||||||
|  | const boolFields = [ | ||||||
|  | 	'is_deleted', | ||||||
|  | 	'is_disabled', | ||||||
|  | ]; | ||||||
|  |  | ||||||
| class User extends Model { | class User extends Model { | ||||||
| 	$beforeInsert () { | 	$beforeInsert () { | ||||||
| 		this.created_on  = now(); | 		this.created_on  = now(); | ||||||
| @@ -23,6 +29,16 @@ class User extends Model { | |||||||
| 		this.modified_on = now(); | 		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 () { | 	static get name () { | ||||||
| 		return 'User'; | 		return 'User'; | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -2,10 +2,10 @@ | |||||||
| 	"name": "nginx-proxy-manager", | 	"name": "nginx-proxy-manager", | ||||||
| 	"version": "0.0.0", | 	"version": "0.0.0", | ||||||
| 	"description": "A beautiful interface for creating Nginx endpoints", | 	"description": "A beautiful interface for creating Nginx endpoints", | ||||||
| 	"main": "js/index.js", | 	"main": "index.js", | ||||||
| 	"dependencies": { | 	"dependencies": { | ||||||
| 		"@apidevtools/json-schema-ref-parser": "^11.7.0", | 		"@apidevtools/json-schema-ref-parser": "^11.7.0", | ||||||
| 		"ajv": "^6.12.0", | 		"ajv": "^8.17.1", | ||||||
| 		"archiver": "^5.3.0", | 		"archiver": "^5.3.0", | ||||||
| 		"batchflow": "^0.4.0", | 		"batchflow": "^0.4.0", | ||||||
| 		"bcrypt": "^5.0.0", | 		"bcrypt": "^5.0.0", | ||||||
| @@ -14,7 +14,6 @@ | |||||||
| 		"express": "^4.19.2", | 		"express": "^4.19.2", | ||||||
| 		"express-fileupload": "^1.1.9", | 		"express-fileupload": "^1.1.9", | ||||||
| 		"gravatar": "^1.8.0", | 		"gravatar": "^1.8.0", | ||||||
| 		"json-schema-ref-parser": "^8.0.0", |  | ||||||
| 		"jsonwebtoken": "^9.0.0", | 		"jsonwebtoken": "^9.0.0", | ||||||
| 		"knex": "2.4.2", | 		"knex": "2.4.2", | ||||||
| 		"liquidjs": "10.6.1", | 		"liquidjs": "10.6.1", | ||||||
| @@ -35,9 +34,14 @@ | |||||||
| 	"author": "Jamie Curnow <jc@jc21.com>", | 	"author": "Jamie Curnow <jc@jc21.com>", | ||||||
| 	"license": "MIT", | 	"license": "MIT", | ||||||
| 	"devDependencies": { | 	"devDependencies": { | ||||||
|  | 		"@apidevtools/swagger-parser": "^10.1.0", | ||||||
|  | 		"chalk": "4.1.2", | ||||||
| 		"eslint": "^8.36.0", | 		"eslint": "^8.36.0", | ||||||
| 		"eslint-plugin-align-assignments": "^1.1.2", | 		"eslint-plugin-align-assignments": "^1.1.2", | ||||||
| 		"nodemon": "^2.0.2", | 		"nodemon": "^2.0.2", | ||||||
| 		"prettier": "^2.0.4" | 		"prettier": "^2.0.4" | ||||||
|  | 	}, | ||||||
|  | 	"scripts": { | ||||||
|  | 		"validate-schema": "node validate-schema.js" | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|   | |||||||
| @@ -29,10 +29,10 @@ router | |||||||
| 			additionalProperties: false, | 			additionalProperties: false, | ||||||
| 			properties:           { | 			properties:           { | ||||||
| 				expand: { | 				expand: { | ||||||
| 					$ref: 'common#/definitions/expand' | 					$ref: 'common#/properties/expand' | ||||||
| 				}, | 				}, | ||||||
| 				query: { | 				query: { | ||||||
| 					$ref: 'common#/definitions/query' | 					$ref: 'common#/properties/query' | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		}, { | 		}, { | ||||||
|   | |||||||
| @@ -31,10 +31,10 @@ router | |||||||
| 			additionalProperties: false, | 			additionalProperties: false, | ||||||
| 			properties:           { | 			properties:           { | ||||||
| 				expand: { | 				expand: { | ||||||
| 					$ref: 'common#/definitions/expand' | 					$ref: 'common#/properties/expand' | ||||||
| 				}, | 				}, | ||||||
| 				query: { | 				query: { | ||||||
| 					$ref: 'common#/definitions/query' | 					$ref: 'common#/properties/query' | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		}, { | 		}, { | ||||||
| @@ -91,10 +91,10 @@ router | |||||||
| 			additionalProperties: false, | 			additionalProperties: false, | ||||||
| 			properties:           { | 			properties:           { | ||||||
| 				list_id: { | 				list_id: { | ||||||
| 					$ref: 'common#/definitions/id' | 					$ref: 'common#/properties/id' | ||||||
| 				}, | 				}, | ||||||
| 				expand: { | 				expand: { | ||||||
| 					$ref: 'common#/definitions/expand' | 					$ref: 'common#/properties/expand' | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		}, { | 		}, { | ||||||
|   | |||||||
| @@ -32,10 +32,10 @@ router | |||||||
| 			additionalProperties: false, | 			additionalProperties: false, | ||||||
| 			properties:           { | 			properties:           { | ||||||
| 				expand: { | 				expand: { | ||||||
| 					$ref: 'common#/definitions/expand' | 					$ref: 'common#/properties/expand' | ||||||
| 				}, | 				}, | ||||||
| 				query: { | 				query: { | ||||||
| 					$ref: 'common#/definitions/query' | 					$ref: 'common#/properties/query' | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		}, { | 		}, { | ||||||
| @@ -124,10 +124,10 @@ router | |||||||
| 			additionalProperties: false, | 			additionalProperties: false, | ||||||
| 			properties:           { | 			properties:           { | ||||||
| 				certificate_id: { | 				certificate_id: { | ||||||
| 					$ref: 'common#/definitions/id' | 					$ref: 'common#/properties/id' | ||||||
| 				}, | 				}, | ||||||
| 				expand: { | 				expand: { | ||||||
| 					$ref: 'common#/definitions/expand' | 					$ref: 'common#/properties/expand' | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		}, { | 		}, { | ||||||
|   | |||||||
| @@ -31,10 +31,10 @@ router | |||||||
| 			additionalProperties: false, | 			additionalProperties: false, | ||||||
| 			properties:           { | 			properties:           { | ||||||
| 				expand: { | 				expand: { | ||||||
| 					$ref: 'common#/definitions/expand' | 					$ref: 'common#/properties/expand' | ||||||
| 				}, | 				}, | ||||||
| 				query: { | 				query: { | ||||||
| 					$ref: 'common#/definitions/query' | 					$ref: 'common#/properties/query' | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		}, { | 		}, { | ||||||
| @@ -91,10 +91,10 @@ router | |||||||
| 			additionalProperties: false, | 			additionalProperties: false, | ||||||
| 			properties:           { | 			properties:           { | ||||||
| 				host_id: { | 				host_id: { | ||||||
| 					$ref: 'common#/definitions/id' | 					$ref: 'common#/properties/id' | ||||||
| 				}, | 				}, | ||||||
| 				expand: { | 				expand: { | ||||||
| 					$ref: 'common#/definitions/expand' | 					$ref: 'common#/properties/expand' | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		}, { | 		}, { | ||||||
|   | |||||||
| @@ -31,10 +31,10 @@ router | |||||||
| 			additionalProperties: false, | 			additionalProperties: false, | ||||||
| 			properties:           { | 			properties:           { | ||||||
| 				expand: { | 				expand: { | ||||||
| 					$ref: 'common#/definitions/expand' | 					$ref: 'common#/properties/expand' | ||||||
| 				}, | 				}, | ||||||
| 				query: { | 				query: { | ||||||
| 					$ref: 'common#/definitions/query' | 					$ref: 'common#/properties/query' | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		}, { | 		}, { | ||||||
| @@ -91,10 +91,10 @@ router | |||||||
| 			additionalProperties: false, | 			additionalProperties: false, | ||||||
| 			properties:           { | 			properties:           { | ||||||
| 				host_id: { | 				host_id: { | ||||||
| 					$ref: 'common#/definitions/id' | 					$ref: 'common#/properties/id' | ||||||
| 				}, | 				}, | ||||||
| 				expand: { | 				expand: { | ||||||
| 					$ref: 'common#/definitions/expand' | 					$ref: 'common#/properties/expand' | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		}, { | 		}, { | ||||||
|   | |||||||
| @@ -31,10 +31,10 @@ router | |||||||
| 			additionalProperties: false, | 			additionalProperties: false, | ||||||
| 			properties:           { | 			properties:           { | ||||||
| 				expand: { | 				expand: { | ||||||
| 					$ref: 'common#/definitions/expand' | 					$ref: 'common#/properties/expand' | ||||||
| 				}, | 				}, | ||||||
| 				query: { | 				query: { | ||||||
| 					$ref: 'common#/definitions/query' | 					$ref: 'common#/properties/query' | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		}, { | 		}, { | ||||||
| @@ -91,10 +91,10 @@ router | |||||||
| 			additionalProperties: false, | 			additionalProperties: false, | ||||||
| 			properties:           { | 			properties:           { | ||||||
| 				host_id: { | 				host_id: { | ||||||
| 					$ref: 'common#/definitions/id' | 					$ref: 'common#/properties/id' | ||||||
| 				}, | 				}, | ||||||
| 				expand: { | 				expand: { | ||||||
| 					$ref: 'common#/definitions/expand' | 					$ref: 'common#/properties/expand' | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		}, { | 		}, { | ||||||
|   | |||||||
| @@ -31,10 +31,10 @@ router | |||||||
| 			additionalProperties: false, | 			additionalProperties: false, | ||||||
| 			properties:           { | 			properties:           { | ||||||
| 				expand: { | 				expand: { | ||||||
| 					$ref: 'common#/definitions/expand' | 					$ref: 'common#/properties/expand' | ||||||
| 				}, | 				}, | ||||||
| 				query: { | 				query: { | ||||||
| 					$ref: 'common#/definitions/query' | 					$ref: 'common#/properties/query' | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		}, { | 		}, { | ||||||
| @@ -91,10 +91,10 @@ router | |||||||
| 			additionalProperties: false, | 			additionalProperties: false, | ||||||
| 			properties:           { | 			properties:           { | ||||||
| 				stream_id: { | 				stream_id: { | ||||||
| 					$ref: 'common#/definitions/id' | 					$ref: 'common#/properties/id' | ||||||
| 				}, | 				}, | ||||||
| 				expand: { | 				expand: { | ||||||
| 					$ref: 'common#/definitions/expand' | 					$ref: 'common#/properties/expand' | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		}, { | 		}, { | ||||||
|   | |||||||
| @@ -32,10 +32,10 @@ router | |||||||
| 			additionalProperties: false, | 			additionalProperties: false, | ||||||
| 			properties:           { | 			properties:           { | ||||||
| 				expand: { | 				expand: { | ||||||
| 					$ref: 'common#/definitions/expand' | 					$ref: 'common#/properties/expand' | ||||||
| 				}, | 				}, | ||||||
| 				query: { | 				query: { | ||||||
| 					$ref: 'common#/definitions/query' | 					$ref: 'common#/properties/query' | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		}, { | 		}, { | ||||||
| @@ -97,10 +97,10 @@ router | |||||||
| 			additionalProperties: false, | 			additionalProperties: false, | ||||||
| 			properties:           { | 			properties:           { | ||||||
| 				user_id: { | 				user_id: { | ||||||
| 					$ref: 'common#/definitions/id' | 					$ref: 'common#/properties/id' | ||||||
| 				}, | 				}, | ||||||
| 				expand: { | 				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", | 	"$id": "common", | ||||||
| 	"definitions": { | 	"type": "object", | ||||||
|  | 	"properties": { | ||||||
| 		"id": { | 		"id": { | ||||||
| 			"description": "Unique identifier", | 			"description": "Unique identifier", | ||||||
| 			"example": 123456, |  | ||||||
| 			"readOnly": true, | 			"readOnly": true, | ||||||
| 			"type": "integer", | 			"type": "integer", | ||||||
| 			"minimum": 1 | 			"minimum": 1 | ||||||
| @@ -37,25 +37,21 @@ | |||||||
| 		}, | 		}, | ||||||
| 		"created_on": { | 		"created_on": { | ||||||
| 			"description": "Date and time of creation", | 			"description": "Date and time of creation", | ||||||
| 			"format": "date-time", |  | ||||||
| 			"readOnly": true, | 			"readOnly": true, | ||||||
| 			"type": "string" | 			"type": "string" | ||||||
| 		}, | 		}, | ||||||
| 		"modified_on": { | 		"modified_on": { | ||||||
| 			"description": "Date and time of last update", | 			"description": "Date and time of last update", | ||||||
| 			"format": "date-time", |  | ||||||
| 			"readOnly": true, | 			"readOnly": true, | ||||||
| 			"type": "string" | 			"type": "string" | ||||||
| 		}, | 		}, | ||||||
| 		"user_id": { | 		"user_id": { | ||||||
| 			"description": "User ID", | 			"description": "User ID", | ||||||
| 			"example": 1234, |  | ||||||
| 			"type": "integer", | 			"type": "integer", | ||||||
| 			"minimum": 1 | 			"minimum": 1 | ||||||
| 		}, | 		}, | ||||||
| 		"certificate_id": { | 		"certificate_id": { | ||||||
| 			"description": "Certificate ID", | 			"description": "Certificate ID", | ||||||
| 			"example": 1234, |  | ||||||
| 			"anyOf": [ | 			"anyOf": [ | ||||||
| 				{ | 				{ | ||||||
| 					"type": "integer", | 					"type": "integer", | ||||||
| @@ -69,13 +65,11 @@ | |||||||
| 		}, | 		}, | ||||||
| 		"access_list_id": { | 		"access_list_id": { | ||||||
| 			"description": "Access List ID", | 			"description": "Access List ID", | ||||||
| 			"example": 1234, |  | ||||||
| 			"type": "integer", | 			"type": "integer", | ||||||
| 			"minimum": 0 | 			"minimum": 0 | ||||||
| 		}, | 		}, | ||||||
| 		"domain_names": { | 		"domain_names": { | ||||||
| 			"description": "Domain Names separated by a comma", | 			"description": "Domain Names separated by a comma", | ||||||
| 			"example": "*.jc21.com,blog.jc21.com", |  | ||||||
| 			"type": "array", | 			"type": "array", | ||||||
| 			"minItems": 1, | 			"minItems": 1, | ||||||
| 			"maxItems": 100, | 			"maxItems": 100, | ||||||
| @@ -87,22 +81,18 @@ | |||||||
| 		}, | 		}, | ||||||
| 		"enabled": { | 		"enabled": { | ||||||
| 			"description": "Is Enabled", | 			"description": "Is Enabled", | ||||||
| 			"example": true, |  | ||||||
| 			"type": "boolean" | 			"type": "boolean" | ||||||
| 		}, | 		}, | ||||||
| 		"ssl_forced": { | 		"ssl_forced": { | ||||||
| 			"description": "Is SSL Forced", | 			"description": "Is SSL Forced", | ||||||
| 			"example": false, |  | ||||||
| 			"type": "boolean" | 			"type": "boolean" | ||||||
| 		}, | 		}, | ||||||
| 		"hsts_enabled": { | 		"hsts_enabled": { | ||||||
| 			"description": "Is HSTS Enabled", | 			"description": "Is HSTS Enabled", | ||||||
| 			"example": false, |  | ||||||
| 			"type": "boolean" | 			"type": "boolean" | ||||||
| 		}, | 		}, | ||||||
| 		"hsts_subdomains": { | 		"hsts_subdomains": { | ||||||
| 			"description": "Is HSTS applicable to all subdomains", | 			"description": "Is HSTS applicable to all subdomains", | ||||||
| 			"example": false, |  | ||||||
| 			"type": "boolean" | 			"type": "boolean" | ||||||
| 		}, | 		}, | ||||||
| 		"ssl_provider": { | 		"ssl_provider": { | ||||||
| @@ -111,17 +101,14 @@ | |||||||
| 		}, | 		}, | ||||||
| 		"http2_support": { | 		"http2_support": { | ||||||
| 			"description": "HTTP2 Protocol Support", | 			"description": "HTTP2 Protocol Support", | ||||||
| 			"example": false, |  | ||||||
| 			"type": "boolean" | 			"type": "boolean" | ||||||
| 		}, | 		}, | ||||||
| 		"block_exploits": { | 		"block_exploits": { | ||||||
| 			"description": "Should we block common exploits", | 			"description": "Should we block common exploits", | ||||||
| 			"example": true, |  | ||||||
| 			"type": "boolean" | 			"type": "boolean" | ||||||
| 		}, | 		}, | ||||||
| 		"caching_enabled": { | 		"caching_enabled": { | ||||||
| 			"description": "Should we cache assets", | 			"description": "Should we cache assets", | ||||||
| 			"example": true, |  | ||||||
| 			"type": "boolean" | 			"type": "boolean" | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -5,16 +5,16 @@ | |||||||
| 	"additionalProperties": false, | 	"additionalProperties": false, | ||||||
| 	"properties": { | 	"properties": { | ||||||
| 		"id": { | 		"id": { | ||||||
| 			"$ref": "../common.json#/definitions/id" | 			"$ref": "../common.json#/properties/id" | ||||||
| 		}, | 		}, | ||||||
| 		"created_on": { | 		"created_on": { | ||||||
| 			"$ref": "../common.json#/definitions/created_on" | 			"$ref": "../common.json#/properties/created_on" | ||||||
| 		}, | 		}, | ||||||
| 		"modified_on": { | 		"modified_on": { | ||||||
| 			"$ref": "../common.json#/definitions/modified_on" | 			"$ref": "../common.json#/properties/modified_on" | ||||||
| 		}, | 		}, | ||||||
| 		"owner_user_id": { | 		"owner_user_id": { | ||||||
| 			"$ref": "../common.json#/definitions/user_id" | 			"$ref": "../common.json#/properties/user_id" | ||||||
| 		}, | 		}, | ||||||
| 		"name": { | 		"name": { | ||||||
| 			"type": "string", | 			"type": "string", | ||||||
|   | |||||||
| @@ -5,22 +5,22 @@ | |||||||
| 	"additionalProperties": false, | 	"additionalProperties": false, | ||||||
| 	"properties": { | 	"properties": { | ||||||
| 		"id": { | 		"id": { | ||||||
| 			"$ref": "../common.json#/definitions/id" | 			"$ref": "../common.json#/properties/id" | ||||||
| 		}, | 		}, | ||||||
| 		"created_on": { | 		"created_on": { | ||||||
| 			"$ref": "../common.json#/definitions/created_on" | 			"$ref": "../common.json#/properties/created_on" | ||||||
| 		}, | 		}, | ||||||
| 		"modified_on": { | 		"modified_on": { | ||||||
| 			"$ref": "../common.json#/definitions/modified_on" | 			"$ref": "../common.json#/properties/modified_on" | ||||||
| 		}, | 		}, | ||||||
| 		"user_id": { | 		"user_id": { | ||||||
| 			"$ref": "../common.json#/definitions/user_id" | 			"$ref": "../common.json#/properties/user_id" | ||||||
| 		}, | 		}, | ||||||
| 		"object_type": { | 		"object_type": { | ||||||
| 			"type": "string" | 			"type": "string" | ||||||
| 		}, | 		}, | ||||||
| 		"object_id": { | 		"object_id": { | ||||||
| 			"$ref": "../common.json#/definitions/id" | 			"$ref": "../common.json#/properties/id" | ||||||
| 		}, | 		}, | ||||||
| 		"action": { | 		"action": { | ||||||
| 			"type": "string" | 			"type": "string" | ||||||
|   | |||||||
| @@ -5,30 +5,29 @@ | |||||||
| 	"additionalProperties": false, | 	"additionalProperties": false, | ||||||
| 	"properties": { | 	"properties": { | ||||||
| 		"id": { | 		"id": { | ||||||
| 			"$ref": "../common.json#/definitions/id" | 			"$ref": "../common.json#/properties/id" | ||||||
| 		}, | 		}, | ||||||
| 		"created_on": { | 		"created_on": { | ||||||
| 			"$ref": "../common.json#/definitions/created_on" | 			"$ref": "../common.json#/properties/created_on" | ||||||
| 		}, | 		}, | ||||||
| 		"modified_on": { | 		"modified_on": { | ||||||
| 			"$ref": "../common.json#/definitions/modified_on" | 			"$ref": "../common.json#/properties/modified_on" | ||||||
| 		}, | 		}, | ||||||
| 		"owner_user_id": { | 		"owner_user_id": { | ||||||
| 			"$ref": "../common.json#/definitions/user_id" | 			"$ref": "../common.json#/properties/user_id" | ||||||
| 		}, | 		}, | ||||||
| 		"provider": { | 		"provider": { | ||||||
| 			"$ref": "../common.json#/definitions/ssl_provider" | 			"$ref": "../common.json#/properties/ssl_provider" | ||||||
| 		}, | 		}, | ||||||
| 		"nice_name": { | 		"nice_name": { | ||||||
| 			"type": "string", | 			"type": "string", | ||||||
| 			"description": "Nice Name for the custom certificate" | 			"description": "Nice Name for the custom certificate" | ||||||
| 		}, | 		}, | ||||||
| 		"domain_names": { | 		"domain_names": { | ||||||
| 			"$ref": "../common.json#/definitions/domain_names" | 			"$ref": "../common.json#/properties/domain_names" | ||||||
| 		}, | 		}, | ||||||
| 		"expires_on": { | 		"expires_on": { | ||||||
| 			"description": "Date and time of expiration", | 			"description": "Date and time of expiration", | ||||||
| 			"format": "date-time", |  | ||||||
| 			"readOnly": true, | 			"readOnly": true, | ||||||
| 			"type": "string" | 			"type": "string" | ||||||
| 		}, | 		}, | ||||||
| @@ -37,8 +36,7 @@ | |||||||
| 			"additionalProperties": false, | 			"additionalProperties": false, | ||||||
| 			"properties": { | 			"properties": { | ||||||
| 				"letsencrypt_email": { | 				"letsencrypt_email": { | ||||||
| 					"type": "string", | 					"type": "string" | ||||||
| 					"format": "email" |  | ||||||
| 				}, | 				}, | ||||||
| 				"letsencrypt_agree": { | 				"letsencrypt_agree": { | ||||||
| 					"type": "boolean" | 					"type": "boolean" | ||||||
|   | |||||||
| @@ -5,40 +5,40 @@ | |||||||
| 	"additionalProperties": false, | 	"additionalProperties": false, | ||||||
| 	"properties": { | 	"properties": { | ||||||
| 		"id": { | 		"id": { | ||||||
| 			"$ref": "../common.json#/definitions/id" | 			"$ref": "../common.json#/properties/id" | ||||||
| 		}, | 		}, | ||||||
| 		"created_on": { | 		"created_on": { | ||||||
| 			"$ref": "../common.json#/definitions/created_on" | 			"$ref": "../common.json#/properties/created_on" | ||||||
| 		}, | 		}, | ||||||
| 		"modified_on": { | 		"modified_on": { | ||||||
| 			"$ref": "../common.json#/definitions/modified_on" | 			"$ref": "../common.json#/properties/modified_on" | ||||||
| 		}, | 		}, | ||||||
| 		"owner_user_id": { | 		"owner_user_id": { | ||||||
| 			"$ref": "../common.json#/definitions/user_id" | 			"$ref": "../common.json#/properties/user_id" | ||||||
| 		}, | 		}, | ||||||
| 		"domain_names": { | 		"domain_names": { | ||||||
| 			"$ref": "../common.json#/definitions/domain_names" | 			"$ref": "../common.json#/properties/domain_names" | ||||||
| 		}, | 		}, | ||||||
| 		"certificate_id": { | 		"certificate_id": { | ||||||
| 			"$ref": "../common.json#/definitions/certificate_id" | 			"$ref": "../common.json#/properties/certificate_id" | ||||||
| 		}, | 		}, | ||||||
| 		"ssl_forced": { | 		"ssl_forced": { | ||||||
| 			"$ref": "../common.json#/definitions/ssl_forced" | 			"$ref": "../common.json#/properties/ssl_forced" | ||||||
| 		}, | 		}, | ||||||
| 		"hsts_enabled": { | 		"hsts_enabled": { | ||||||
| 			"$ref": "../common.json#/definitions/hsts_enabled" | 			"$ref": "../common.json#/properties/hsts_enabled" | ||||||
| 		}, | 		}, | ||||||
| 		"hsts_subdomains": { | 		"hsts_subdomains": { | ||||||
| 			"$ref": "../common.json#/definitions/hsts_subdomains" | 			"$ref": "../common.json#/properties/hsts_subdomains" | ||||||
| 		}, | 		}, | ||||||
| 		"http2_support": { | 		"http2_support": { | ||||||
| 			"$ref": "../common.json#/definitions/http2_support" | 			"$ref": "../common.json#/properties/http2_support" | ||||||
| 		}, | 		}, | ||||||
| 		"advanced_config": { | 		"advanced_config": { | ||||||
| 			"type": "string" | 			"type": "string" | ||||||
| 		}, | 		}, | ||||||
| 		"enabled": { | 		"enabled": { | ||||||
| 			"$ref": "../common.json#/definitions/enabled" | 			"$ref": "../common.json#/properties/enabled" | ||||||
| 		}, | 		}, | ||||||
| 		"meta": { | 		"meta": { | ||||||
| 			"type": "object" | 			"type": "object" | ||||||
|   | |||||||
| @@ -30,19 +30,19 @@ | |||||||
| 	"additionalProperties": false, | 	"additionalProperties": false, | ||||||
| 	"properties": { | 	"properties": { | ||||||
| 		"id": { | 		"id": { | ||||||
| 			"$ref": "../common.json#/definitions/id" | 			"$ref": "../common.json#/properties/id" | ||||||
| 		}, | 		}, | ||||||
| 		"created_on": { | 		"created_on": { | ||||||
| 			"$ref": "../common.json#/definitions/created_on" | 			"$ref": "../common.json#/properties/created_on" | ||||||
| 		}, | 		}, | ||||||
| 		"modified_on": { | 		"modified_on": { | ||||||
| 			"$ref": "../common.json#/definitions/modified_on" | 			"$ref": "../common.json#/properties/modified_on" | ||||||
| 		}, | 		}, | ||||||
| 		"owner_user_id": { | 		"owner_user_id": { | ||||||
| 			"$ref": "../common.json#/definitions/user_id" | 			"$ref": "../common.json#/properties/user_id" | ||||||
| 		}, | 		}, | ||||||
| 		"domain_names": { | 		"domain_names": { | ||||||
| 			"$ref": "../common.json#/definitions/domain_names" | 			"$ref": "../common.json#/properties/domain_names" | ||||||
| 		}, | 		}, | ||||||
| 		"forward_host": { | 		"forward_host": { | ||||||
| 			"type": "string", | 			"type": "string", | ||||||
| @@ -55,19 +55,19 @@ | |||||||
| 			"maximum": 65535 | 			"maximum": 65535 | ||||||
| 		}, | 		}, | ||||||
| 		"access_list_id": { | 		"access_list_id": { | ||||||
| 			"$ref": "../common.json#/definitions/access_list_id" | 			"$ref": "../common.json#/properties/access_list_id" | ||||||
| 		}, | 		}, | ||||||
| 		"certificate_id": { | 		"certificate_id": { | ||||||
| 			"$ref": "../common.json#/definitions/certificate_id" | 			"$ref": "../common.json#/properties/certificate_id" | ||||||
| 		}, | 		}, | ||||||
| 		"ssl_forced": { | 		"ssl_forced": { | ||||||
| 			"$ref": "../common.json#/definitions/ssl_forced" | 			"$ref": "../common.json#/properties/ssl_forced" | ||||||
| 		}, | 		}, | ||||||
| 		"caching_enabled": { | 		"caching_enabled": { | ||||||
| 			"$ref": "../common.json#/definitions/caching_enabled" | 			"$ref": "../common.json#/properties/caching_enabled" | ||||||
| 		}, | 		}, | ||||||
| 		"block_exploits": { | 		"block_exploits": { | ||||||
| 			"$ref": "../common.json#/definitions/block_exploits" | 			"$ref": "../common.json#/properties/block_exploits" | ||||||
| 		}, | 		}, | ||||||
| 		"advanced_config": { | 		"advanced_config": { | ||||||
| 			"type": "string" | 			"type": "string" | ||||||
| @@ -81,14 +81,14 @@ | |||||||
| 			"type": "boolean" | 			"type": "boolean" | ||||||
| 		}, | 		}, | ||||||
| 		"http2_support": { | 		"http2_support": { | ||||||
| 			"$ref": "../common.json#/definitions/http2_support" | 			"$ref": "../common.json#/properties/http2_support" | ||||||
| 		}, | 		}, | ||||||
| 		"forward_scheme": { | 		"forward_scheme": { | ||||||
| 			"type": "string", | 			"type": "string", | ||||||
| 			"enum": ["http", "https"] | 			"enum": ["http", "https"] | ||||||
| 		}, | 		}, | ||||||
| 		"enabled": { | 		"enabled": { | ||||||
| 			"$ref": "../common.json#/definitions/enabled" | 			"$ref": "../common.json#/properties/enabled" | ||||||
| 		}, | 		}, | ||||||
| 		"locations": { | 		"locations": { | ||||||
| 			"type": "array", | 			"type": "array", | ||||||
| @@ -124,19 +124,33 @@ | |||||||
| 			} | 			} | ||||||
| 		}, | 		}, | ||||||
| 		"hsts_enabled": { | 		"hsts_enabled": { | ||||||
| 			"$ref": "../common.json#/definitions/hsts_enabled" | 			"$ref": "../common.json#/properties/hsts_enabled" | ||||||
| 		}, | 		}, | ||||||
| 		"hsts_subdomains": { | 		"hsts_subdomains": { | ||||||
| 			"$ref": "../common.json#/definitions/hsts_subdomains" | 			"$ref": "../common.json#/properties/hsts_subdomains" | ||||||
| 		}, | 		}, | ||||||
| 		"certificate": { | 		"certificate": { | ||||||
| 			"$ref": "./certificate-object.json" | 			"oneOf": [ | ||||||
|  | 				{ | ||||||
|  | 					"type": "null" | ||||||
|  | 				}, | ||||||
|  | 				{ | ||||||
|  | 					"$ref": "./certificate-object.json" | ||||||
|  | 				} | ||||||
|  | 			] | ||||||
| 		}, | 		}, | ||||||
| 		"owner": { | 		"owner": { | ||||||
| 			"$ref": "./user-object.json" | 			"$ref": "./user-object.json" | ||||||
| 		}, | 		}, | ||||||
| 		"access_list": { | 		"access_list": { | ||||||
| 			"$ref": "./access-list-object.json" | 			"oneOf": [ | ||||||
|  | 				{ | ||||||
|  | 					"type": "null" | ||||||
|  | 				}, | ||||||
|  | 				{ | ||||||
|  | 					"$ref": "./access-list-object.json" | ||||||
|  | 				} | ||||||
|  | 			] | ||||||
| 		}, | 		}, | ||||||
| 		"use_default_location": { | 		"use_default_location": { | ||||||
| 			"type": "boolean" | 			"type": "boolean" | ||||||
|   | |||||||
| @@ -5,19 +5,19 @@ | |||||||
| 	"additionalProperties": false, | 	"additionalProperties": false, | ||||||
| 	"properties": { | 	"properties": { | ||||||
| 		"id": { | 		"id": { | ||||||
| 			"$ref": "../common.json#/definitions/id" | 			"$ref": "../common.json#/properties/id" | ||||||
| 		}, | 		}, | ||||||
| 		"created_on": { | 		"created_on": { | ||||||
| 			"$ref": "../common.json#/definitions/created_on" | 			"$ref": "../common.json#/properties/created_on" | ||||||
| 		}, | 		}, | ||||||
| 		"modified_on": { | 		"modified_on": { | ||||||
| 			"$ref": "../common.json#/definitions/modified_on" | 			"$ref": "../common.json#/properties/modified_on" | ||||||
| 		}, | 		}, | ||||||
| 		"owner_user_id": { | 		"owner_user_id": { | ||||||
| 			"$ref": "../common.json#/definitions/user_id" | 			"$ref": "../common.json#/properties/user_id" | ||||||
| 		}, | 		}, | ||||||
| 		"domain_names": { | 		"domain_names": { | ||||||
| 			"$ref": "../common.json#/definitions/domain_names" | 			"$ref": "../common.json#/properties/domain_names" | ||||||
| 		}, | 		}, | ||||||
| 		"forward_http_code": { | 		"forward_http_code": { | ||||||
| 			"description": "Redirect HTTP Status Code", | 			"description": "Redirect HTTP Status Code", | ||||||
| @@ -42,28 +42,28 @@ | |||||||
| 			"type": "boolean" | 			"type": "boolean" | ||||||
| 		}, | 		}, | ||||||
| 		"certificate_id": { | 		"certificate_id": { | ||||||
| 			"$ref": "../common.json#/definitions/certificate_id" | 			"$ref": "../common.json#/properties/certificate_id" | ||||||
| 		}, | 		}, | ||||||
| 		"ssl_forced": { | 		"ssl_forced": { | ||||||
| 			"$ref": "../common.json#/definitions/ssl_forced" | 			"$ref": "../common.json#/properties/ssl_forced" | ||||||
| 		}, | 		}, | ||||||
| 		"hsts_enabled": { | 		"hsts_enabled": { | ||||||
| 			"$ref": "../common.json#/definitions/hsts_enabled" | 			"$ref": "../common.json#/properties/hsts_enabled" | ||||||
| 		}, | 		}, | ||||||
| 		"hsts_subdomains": { | 		"hsts_subdomains": { | ||||||
| 			"$ref": "../common.json#/definitions/hsts_subdomains" | 			"$ref": "../common.json#/properties/hsts_subdomains" | ||||||
| 		}, | 		}, | ||||||
| 		"http2_support": { | 		"http2_support": { | ||||||
| 			"$ref": "../common.json#/definitions/http2_support" | 			"$ref": "../common.json#/properties/http2_support" | ||||||
| 		}, | 		}, | ||||||
| 		"block_exploits": { | 		"block_exploits": { | ||||||
| 			"$ref": "../common.json#/definitions/block_exploits" | 			"$ref": "../common.json#/properties/block_exploits" | ||||||
| 		}, | 		}, | ||||||
| 		"advanced_config": { | 		"advanced_config": { | ||||||
| 			"type": "string" | 			"type": "string" | ||||||
| 		}, | 		}, | ||||||
| 		"enabled": { | 		"enabled": { | ||||||
| 			"$ref": "../common.json#/definitions/enabled" | 			"$ref": "../common.json#/properties/enabled" | ||||||
| 		}, | 		}, | ||||||
| 		"meta": { | 		"meta": { | ||||||
| 			"type": "object" | 			"type": "object" | ||||||
|   | |||||||
| @@ -5,16 +5,16 @@ | |||||||
| 	"additionalProperties": false, | 	"additionalProperties": false, | ||||||
| 	"properties": { | 	"properties": { | ||||||
| 		"id": { | 		"id": { | ||||||
| 			"$ref": "../common.json#/definitions/id" | 			"$ref": "../common.json#/properties/id" | ||||||
| 		}, | 		}, | ||||||
| 		"created_on": { | 		"created_on": { | ||||||
| 			"$ref": "../common.json#/definitions/created_on" | 			"$ref": "../common.json#/properties/created_on" | ||||||
| 		}, | 		}, | ||||||
| 		"modified_on": { | 		"modified_on": { | ||||||
| 			"$ref": "../common.json#/definitions/modified_on" | 			"$ref": "../common.json#/properties/modified_on" | ||||||
| 		}, | 		}, | ||||||
| 		"owner_user_id": { | 		"owner_user_id": { | ||||||
| 			"$ref": "../common.json#/definitions/user_id" | 			"$ref": "../common.json#/properties/user_id" | ||||||
| 		}, | 		}, | ||||||
| 		"incoming_port": { | 		"incoming_port": { | ||||||
| 			"type": "integer", | 			"type": "integer", | ||||||
| @@ -51,7 +51,7 @@ | |||||||
| 			"type": "boolean" | 			"type": "boolean" | ||||||
| 		}, | 		}, | ||||||
| 		"enabled": { | 		"enabled": { | ||||||
| 			"$ref": "../common.json#/definitions/enabled" | 			"$ref": "../common.json#/properties/enabled" | ||||||
| 		}, | 		}, | ||||||
| 		"meta": { | 		"meta": { | ||||||
| 			"type": "object" | 			"type": "object" | ||||||
|   | |||||||
| @@ -21,11 +21,9 @@ | |||||||
| 			"example": "2020-01-30T09:41:04.000Z" | 			"example": "2020-01-30T09:41:04.000Z" | ||||||
| 		}, | 		}, | ||||||
| 		"is_disabled": { | 		"is_disabled": { | ||||||
| 			"type": "integer", | 			"type": "boolean", | ||||||
| 			"minimum": 0, | 			"description": "Is user Disabled", | ||||||
| 			"maximum": 1, | 			"example": true | ||||||
| 			"description": "Is user Disabled (0 = false, 1 = true)", |  | ||||||
| 			"example": 0 |  | ||||||
| 		}, | 		}, | ||||||
| 		"email": { | 		"email": { | ||||||
| 			"type": "string", | 			"type": "string", | ||||||
|   | |||||||
| @@ -33,8 +33,8 @@ | |||||||
| 									"owner_user_id": 1, | 									"owner_user_id": 1, | ||||||
| 									"name": "test1234", | 									"name": "test1234", | ||||||
| 									"meta": {}, | 									"meta": {}, | ||||||
| 									"satisfy_any": 1, | 									"satisfy_any": true, | ||||||
| 									"pass_auth": 0, | 									"pass_auth": false, | ||||||
| 									"proxy_host_count": 0 | 									"proxy_host_count": 0 | ||||||
| 								} | 								} | ||||||
| 							] | 							] | ||||||
|   | |||||||
| @@ -30,7 +30,7 @@ | |||||||
| 								"id": 1, | 								"id": 1, | ||||||
| 								"created_on": "2020-01-30T09:36:08.000Z", | 								"created_on": "2020-01-30T09:36:08.000Z", | ||||||
| 								"modified_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", | 								"email": "jc@jc21.com", | ||||||
| 								"name": "Jamie Curnow", | 								"name": "Jamie Curnow", | ||||||
| 								"nickname": "James", | 								"nickname": "James", | ||||||
|   | |||||||
| @@ -102,15 +102,15 @@ | |||||||
| 								"owner_user_id": 1, | 								"owner_user_id": 1, | ||||||
| 								"name": "test123!!", | 								"name": "test123!!", | ||||||
| 								"meta": {}, | 								"meta": {}, | ||||||
| 								"satisfy_any": 1, | 								"satisfy_any": true, | ||||||
| 								"pass_auth": 0, | 								"pass_auth": false, | ||||||
| 								"proxy_host_count": 0, | 								"proxy_host_count": 0, | ||||||
| 								"owner": { | 								"owner": { | ||||||
| 									"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": 0, | 									"is_deleted": false, | ||||||
| 									"is_disabled": 0, | 									"is_disabled": false, | ||||||
| 									"email": "admin@example.com", | 									"email": "admin@example.com", | ||||||
| 									"name": "Administrator", | 									"name": "Administrator", | ||||||
| 									"nickname": "some guy", | 									"nickname": "some guy", | ||||||
|   | |||||||
| @@ -93,15 +93,15 @@ | |||||||
| 								"owner_user_id": 1, | 								"owner_user_id": 1, | ||||||
| 								"name": "test1234", | 								"name": "test1234", | ||||||
| 								"meta": {}, | 								"meta": {}, | ||||||
| 								"satisfy_any": 1, | 								"satisfy_any": true, | ||||||
| 								"pass_auth": 0, | 								"pass_auth": false, | ||||||
| 								"proxy_host_count": 0, | 								"proxy_host_count": 0, | ||||||
| 								"owner": { | 								"owner": { | ||||||
| 									"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": 0, | 									"is_deleted": false, | ||||||
| 									"is_disabled": 0, | 									"is_disabled": false, | ||||||
| 									"email": "admin@example.com", | 									"email": "admin@example.com", | ||||||
| 									"name": "Administrator", | 									"name": "Administrator", | ||||||
| 									"nickname": "some guy", | 									"nickname": "some guy", | ||||||
|   | |||||||
| @@ -32,7 +32,7 @@ | |||||||
| 								"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": 0, | 								"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"], | ||||||
|   | |||||||
| @@ -47,7 +47,7 @@ | |||||||
| 								"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": 0, | 								"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"], | ||||||
|   | |||||||
| @@ -33,16 +33,16 @@ | |||||||
| 									"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": 0, | 									"ssl_forced": false, | ||||||
| 									"advanced_config": "", | 									"advanced_config": "", | ||||||
| 									"meta": { | 									"meta": { | ||||||
| 										"nginx_online": true, | 										"nginx_online": true, | ||||||
| 										"nginx_err": null | 										"nginx_err": null | ||||||
| 									}, | 									}, | ||||||
| 									"http2_support": 0, | 									"http2_support": false, | ||||||
| 									"enabled": 1, | 									"enabled": true, | ||||||
| 									"hsts_enabled": 0, | 									"hsts_enabled": false, | ||||||
| 									"hsts_subdomains": 0 | 									"hsts_subdomains": false | ||||||
| 								} | 								} | ||||||
| 							] | 							] | ||||||
| 						} | 						} | ||||||
|   | |||||||
| @@ -33,16 +33,16 @@ | |||||||
| 								"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": 0, | 								"ssl_forced": false, | ||||||
| 								"advanced_config": "", | 								"advanced_config": "", | ||||||
| 								"meta": { | 								"meta": { | ||||||
| 									"nginx_online": true, | 									"nginx_online": true, | ||||||
| 									"nginx_err": null | 									"nginx_err": null | ||||||
| 								}, | 								}, | ||||||
| 								"http2_support": 0, | 								"http2_support": false, | ||||||
| 								"enabled": 1, | 								"enabled": true, | ||||||
| 								"hsts_enabled": 0, | 								"hsts_enabled": false, | ||||||
| 								"hsts_subdomains": 0 | 								"hsts_subdomains": false | ||||||
| 							} | 							} | ||||||
| 						} | 						} | ||||||
| 					}, | 					}, | ||||||
|   | |||||||
| @@ -72,22 +72,22 @@ | |||||||
| 								"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": 0, | 								"ssl_forced": false, | ||||||
| 								"advanced_config": "", | 								"advanced_config": "", | ||||||
| 								"meta": { | 								"meta": { | ||||||
| 									"nginx_online": true, | 									"nginx_online": true, | ||||||
| 									"nginx_err": null | 									"nginx_err": null | ||||||
| 								}, | 								}, | ||||||
| 								"http2_support": 0, | 								"http2_support": false, | ||||||
| 								"enabled": 1, | 								"enabled": true, | ||||||
| 								"hsts_enabled": 0, | 								"hsts_enabled": false, | ||||||
| 								"hsts_subdomains": 0, | 								"hsts_subdomains": false, | ||||||
| 								"owner": { | 								"owner": { | ||||||
| 									"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": 0, | 									"is_deleted": false, | ||||||
| 									"is_disabled": 0, | 									"is_disabled": false, | ||||||
| 									"email": "admin@example.com", | 									"email": "admin@example.com", | ||||||
| 									"name": "Administrator", | 									"name": "Administrator", | ||||||
| 									"nickname": "Admin", | 									"nickname": "Admin", | ||||||
|   | |||||||
| @@ -60,20 +60,20 @@ | |||||||
| 								"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": 0, | 								"ssl_forced": false, | ||||||
| 								"advanced_config": "", | 								"advanced_config": "", | ||||||
| 								"meta": {}, | 								"meta": {}, | ||||||
| 								"http2_support": 0, | 								"http2_support": false, | ||||||
| 								"enabled": 1, | 								"enabled": true, | ||||||
| 								"hsts_enabled": 0, | 								"hsts_enabled": false, | ||||||
| 								"hsts_subdomains": 0, | 								"hsts_subdomains": false, | ||||||
| 								"certificate": null, | 								"certificate": null, | ||||||
| 								"owner": { | 								"owner": { | ||||||
| 									"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": 0, | 									"is_deleted": false, | ||||||
| 									"is_disabled": 0, | 									"is_disabled": false, | ||||||
| 									"email": "admin@example.com", | 									"email": "admin@example.com", | ||||||
| 									"name": "Administrator", | 									"name": "Administrator", | ||||||
| 									"nickname": "Admin", | 									"nickname": "Admin", | ||||||
|   | |||||||
| @@ -36,21 +36,21 @@ | |||||||
| 									"forward_port": 8989, | 									"forward_port": 8989, | ||||||
| 									"access_list_id": 0, | 									"access_list_id": 0, | ||||||
| 									"certificate_id": 0, | 									"certificate_id": 0, | ||||||
| 									"ssl_forced": 0, | 									"ssl_forced": false, | ||||||
| 									"caching_enabled": 0, | 									"caching_enabled": false, | ||||||
| 									"block_exploits": 0, | 									"block_exploits": false, | ||||||
| 									"advanced_config": "", | 									"advanced_config": "", | ||||||
| 									"meta": { | 									"meta": { | ||||||
| 										"nginx_online": true, | 										"nginx_online": true, | ||||||
| 										"nginx_err": null | 										"nginx_err": null | ||||||
| 									}, | 									}, | ||||||
| 									"allow_websocket_upgrade": 0, | 									"allow_websocket_upgrade": false, | ||||||
| 									"http2_support": 0, | 									"http2_support": false, | ||||||
| 									"forward_scheme": "http", | 									"forward_scheme": "http", | ||||||
| 									"enabled": 1, | 									"enabled": true, | ||||||
| 									"locations": null, | 									"locations": null, | ||||||
| 									"hsts_enabled": 0, | 									"hsts_enabled": false, | ||||||
| 									"hsts_subdomains": 0 | 									"hsts_subdomains": false | ||||||
| 								} | 								} | ||||||
| 							] | 							] | ||||||
| 						} | 						} | ||||||
|   | |||||||
| @@ -36,21 +36,21 @@ | |||||||
| 								"forward_port": 8989, | 								"forward_port": 8989, | ||||||
| 								"access_list_id": 0, | 								"access_list_id": 0, | ||||||
| 								"certificate_id": 0, | 								"certificate_id": 0, | ||||||
| 								"ssl_forced": 0, | 								"ssl_forced": false, | ||||||
| 								"caching_enabled": 0, | 								"caching_enabled": false, | ||||||
| 								"block_exploits": 0, | 								"block_exploits": false, | ||||||
| 								"advanced_config": "", | 								"advanced_config": "", | ||||||
| 								"meta": { | 								"meta": { | ||||||
| 									"nginx_online": true, | 									"nginx_online": true, | ||||||
| 									"nginx_err": null | 									"nginx_err": null | ||||||
| 								}, | 								}, | ||||||
| 								"allow_websocket_upgrade": 0, | 								"allow_websocket_upgrade": false, | ||||||
| 								"http2_support": 0, | 								"http2_support": false, | ||||||
| 								"forward_scheme": "http", | 								"forward_scheme": "http", | ||||||
| 								"enabled": 1, | 								"enabled": true, | ||||||
| 								"locations": null, | 								"locations": null, | ||||||
| 								"hsts_enabled": 0, | 								"hsts_enabled": false, | ||||||
| 								"hsts_subdomains": 0 | 								"hsts_subdomains": false | ||||||
| 							} | 							} | ||||||
| 						} | 						} | ||||||
| 					}, | 					}, | ||||||
|   | |||||||
| @@ -102,26 +102,26 @@ | |||||||
| 								"forward_port": 8989, | 								"forward_port": 8989, | ||||||
| 								"access_list_id": 0, | 								"access_list_id": 0, | ||||||
| 								"certificate_id": 0, | 								"certificate_id": 0, | ||||||
| 								"ssl_forced": 0, | 								"ssl_forced": false, | ||||||
| 								"caching_enabled": 0, | 								"caching_enabled": false, | ||||||
| 								"block_exploits": 0, | 								"block_exploits": false, | ||||||
| 								"advanced_config": "", | 								"advanced_config": "", | ||||||
| 								"meta": { | 								"meta": { | ||||||
| 									"nginx_online": true, | 									"nginx_online": true, | ||||||
| 									"nginx_err": null | 									"nginx_err": null | ||||||
| 								}, | 								}, | ||||||
| 								"allow_websocket_upgrade": 0, | 								"allow_websocket_upgrade": false, | ||||||
| 								"http2_support": 0, | 								"http2_support": false, | ||||||
| 								"forward_scheme": "http", | 								"forward_scheme": "http", | ||||||
| 								"enabled": 1, | 								"enabled": true, | ||||||
| 								"hsts_enabled": 0, | 								"hsts_enabled": false, | ||||||
| 								"hsts_subdomains": 0, | 								"hsts_subdomains": false, | ||||||
| 								"owner": { | 								"owner": { | ||||||
| 									"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": 0, | 									"is_deleted": false, | ||||||
| 									"is_disabled": 0, | 									"is_disabled": false, | ||||||
| 									"email": "admin@example.com", | 									"email": "admin@example.com", | ||||||
| 									"name": "Administrator", | 									"name": "Administrator", | ||||||
| 									"nickname": "some guy", | 									"nickname": "some guy", | ||||||
|   | |||||||
| @@ -90,24 +90,24 @@ | |||||||
| 								"forward_port": 8989, | 								"forward_port": 8989, | ||||||
| 								"access_list_id": 0, | 								"access_list_id": 0, | ||||||
| 								"certificate_id": 0, | 								"certificate_id": 0, | ||||||
| 								"ssl_forced": 0, | 								"ssl_forced": false, | ||||||
| 								"caching_enabled": 0, | 								"caching_enabled": false, | ||||||
| 								"block_exploits": 0, | 								"block_exploits": false, | ||||||
| 								"advanced_config": "", | 								"advanced_config": "", | ||||||
| 								"meta": {}, | 								"meta": {}, | ||||||
| 								"allow_websocket_upgrade": 0, | 								"allow_websocket_upgrade": false, | ||||||
| 								"http2_support": 0, | 								"http2_support": false, | ||||||
| 								"forward_scheme": "http", | 								"forward_scheme": "http", | ||||||
| 								"enabled": 1, | 								"enabled": true, | ||||||
| 								"hsts_enabled": 0, | 								"hsts_enabled": false, | ||||||
| 								"hsts_subdomains": 0, | 								"hsts_subdomains": false, | ||||||
| 								"certificate": null, | 								"certificate": null, | ||||||
| 								"owner": { | 								"owner": { | ||||||
| 									"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": 0, | 									"is_deleted": false, | ||||||
| 									"is_disabled": 0, | 									"is_disabled": false, | ||||||
| 									"email": "admin@example.com", | 									"email": "admin@example.com", | ||||||
| 									"name": "Administrator", | 									"name": "Administrator", | ||||||
| 									"nickname": "some guy", | 									"nickname": "some guy", | ||||||
|   | |||||||
| @@ -33,19 +33,19 @@ | |||||||
| 									"owner_user_id": 1, | 									"owner_user_id": 1, | ||||||
| 									"domain_names": ["test.example.com"], | 									"domain_names": ["test.example.com"], | ||||||
| 									"forward_domain_name": "something-else.com", | 									"forward_domain_name": "something-else.com", | ||||||
| 									"preserve_path": 0, | 									"preserve_path": false, | ||||||
| 									"certificate_id": 0, | 									"certificate_id": 0, | ||||||
| 									"ssl_forced": 0, | 									"ssl_forced": false, | ||||||
| 									"block_exploits": 0, | 									"block_exploits": false, | ||||||
| 									"advanced_config": "", | 									"advanced_config": "", | ||||||
| 									"meta": { | 									"meta": { | ||||||
| 										"nginx_online": true, | 										"nginx_online": true, | ||||||
| 										"nginx_err": null | 										"nginx_err": null | ||||||
| 									}, | 									}, | ||||||
| 									"http2_support": 0, | 									"http2_support": false, | ||||||
| 									"enabled": 1, | 									"enabled": true, | ||||||
| 									"hsts_enabled": 0, | 									"hsts_enabled": false, | ||||||
| 									"hsts_subdomains": 0, | 									"hsts_subdomains": false, | ||||||
| 									"forward_scheme": "http", | 									"forward_scheme": "http", | ||||||
| 									"forward_http_code": 301 | 									"forward_http_code": 301 | ||||||
| 								} | 								} | ||||||
|   | |||||||
| @@ -33,19 +33,19 @@ | |||||||
| 								"owner_user_id": 1, | 								"owner_user_id": 1, | ||||||
| 								"domain_names": ["test.example.com"], | 								"domain_names": ["test.example.com"], | ||||||
| 								"forward_domain_name": "something-else.com", | 								"forward_domain_name": "something-else.com", | ||||||
| 								"preserve_path": 0, | 								"preserve_path": false, | ||||||
| 								"certificate_id": 0, | 								"certificate_id": 0, | ||||||
| 								"ssl_forced": 0, | 								"ssl_forced": false, | ||||||
| 								"block_exploits": 0, | 								"block_exploits": false, | ||||||
| 								"advanced_config": "", | 								"advanced_config": "", | ||||||
| 								"meta": { | 								"meta": { | ||||||
| 									"nginx_online": true, | 									"nginx_online": true, | ||||||
| 									"nginx_err": null | 									"nginx_err": null | ||||||
| 								}, | 								}, | ||||||
| 								"http2_support": 0, | 								"http2_support": false, | ||||||
| 								"enabled": 1, | 								"enabled": true, | ||||||
| 								"hsts_enabled": 0, | 								"hsts_enabled": false, | ||||||
| 								"hsts_subdomains": 0, | 								"hsts_subdomains": false, | ||||||
| 								"forward_scheme": "http", | 								"forward_scheme": "http", | ||||||
| 								"forward_http_code": 301 | 								"forward_http_code": 301 | ||||||
| 							} | 							} | ||||||
|   | |||||||
| @@ -87,27 +87,27 @@ | |||||||
| 								"owner_user_id": 1, | 								"owner_user_id": 1, | ||||||
| 								"domain_names": ["test.example.com"], | 								"domain_names": ["test.example.com"], | ||||||
| 								"forward_domain_name": "something-else.com", | 								"forward_domain_name": "something-else.com", | ||||||
| 								"preserve_path": 0, | 								"preserve_path": false, | ||||||
| 								"certificate_id": 0, | 								"certificate_id": 0, | ||||||
| 								"ssl_forced": 0, | 								"ssl_forced": false, | ||||||
| 								"block_exploits": 0, | 								"block_exploits": false, | ||||||
| 								"advanced_config": "", | 								"advanced_config": "", | ||||||
| 								"meta": { | 								"meta": { | ||||||
| 									"nginx_online": true, | 									"nginx_online": true, | ||||||
| 									"nginx_err": null | 									"nginx_err": null | ||||||
| 								}, | 								}, | ||||||
| 								"http2_support": 0, | 								"http2_support": false, | ||||||
| 								"enabled": 1, | 								"enabled": true, | ||||||
| 								"hsts_enabled": 0, | 								"hsts_enabled": false, | ||||||
| 								"hsts_subdomains": 0, | 								"hsts_subdomains": false, | ||||||
| 								"forward_scheme": "http", | 								"forward_scheme": "http", | ||||||
| 								"forward_http_code": 301, | 								"forward_http_code": 301, | ||||||
| 								"owner": { | 								"owner": { | ||||||
| 									"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": 0, | 									"is_deleted": false, | ||||||
| 									"is_disabled": 0, | 									"is_disabled": false, | ||||||
| 									"email": "admin@example.com", | 									"email": "admin@example.com", | ||||||
| 									"name": "Administrator", | 									"name": "Administrator", | ||||||
| 									"nickname": "Admin", | 									"nickname": "Admin", | ||||||
|   | |||||||
| @@ -75,16 +75,16 @@ | |||||||
| 								"owner_user_id": 1, | 								"owner_user_id": 1, | ||||||
| 								"domain_names": ["test.example.com"], | 								"domain_names": ["test.example.com"], | ||||||
| 								"forward_domain_name": "something-else.com", | 								"forward_domain_name": "something-else.com", | ||||||
| 								"preserve_path": 0, | 								"preserve_path": false, | ||||||
| 								"certificate_id": 0, | 								"certificate_id": 0, | ||||||
| 								"ssl_forced": 0, | 								"ssl_forced": false, | ||||||
| 								"block_exploits": 0, | 								"block_exploits": false, | ||||||
| 								"advanced_config": "", | 								"advanced_config": "", | ||||||
| 								"meta": {}, | 								"meta": {}, | ||||||
| 								"http2_support": 0, | 								"http2_support": false, | ||||||
| 								"enabled": 1, | 								"enabled": true, | ||||||
| 								"hsts_enabled": 0, | 								"hsts_enabled": false, | ||||||
| 								"hsts_subdomains": 0, | 								"hsts_subdomains": false, | ||||||
| 								"forward_scheme": "http", | 								"forward_scheme": "http", | ||||||
| 								"forward_http_code": 301, | 								"forward_http_code": 301, | ||||||
| 								"certificate": null, | 								"certificate": null, | ||||||
| @@ -92,8 +92,8 @@ | |||||||
| 									"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": 0, | 									"is_deleted": false, | ||||||
| 									"is_disabled": 0, | 									"is_disabled": false, | ||||||
| 									"email": "admin@example.com", | 									"email": "admin@example.com", | ||||||
| 									"name": "Administrator", | 									"name": "Administrator", | ||||||
| 									"nickname": "Admin", | 									"nickname": "Admin", | ||||||
|   | |||||||
| @@ -34,13 +34,13 @@ | |||||||
| 									"incoming_port": 9090, | 									"incoming_port": 9090, | ||||||
| 									"forwarding_host": "router.internal", | 									"forwarding_host": "router.internal", | ||||||
| 									"forwarding_port": 80, | 									"forwarding_port": 80, | ||||||
| 									"tcp_forwarding": 0, | 									"tcp_forwarding": true, | ||||||
| 									"udp_forwarding": 0, | 									"udp_forwarding": false, | ||||||
| 									"meta": { | 									"meta": { | ||||||
| 										"nginx_online": true, | 										"nginx_online": true, | ||||||
| 										"nginx_err": null | 										"nginx_err": null | ||||||
| 									}, | 									}, | ||||||
| 									"enabled": 1 | 									"enabled": true | ||||||
| 								} | 								} | ||||||
| 							] | 							] | ||||||
| 						} | 						} | ||||||
|   | |||||||
| @@ -55,19 +55,19 @@ | |||||||
| 								"incoming_port": 9090, | 								"incoming_port": 9090, | ||||||
| 								"forwarding_host": "router.internal", | 								"forwarding_host": "router.internal", | ||||||
| 								"forwarding_port": 80, | 								"forwarding_port": 80, | ||||||
| 								"tcp_forwarding": 0, | 								"tcp_forwarding": true, | ||||||
| 								"udp_forwarding": 0, | 								"udp_forwarding": false, | ||||||
| 								"meta": { | 								"meta": { | ||||||
| 									"nginx_online": true, | 									"nginx_online": true, | ||||||
| 									"nginx_err": null | 									"nginx_err": null | ||||||
| 								}, | 								}, | ||||||
| 								"enabled": 1, | 								"enabled": true, | ||||||
| 								"owner": { | 								"owner": { | ||||||
| 									"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": 0, | 									"is_deleted": false, | ||||||
| 									"is_disabled": 0, | 									"is_disabled": false, | ||||||
| 									"email": "admin@example.com", | 									"email": "admin@example.com", | ||||||
| 									"name": "Administrator", | 									"name": "Administrator", | ||||||
| 									"nickname": "Admin", | 									"nickname": "Admin", | ||||||
|   | |||||||
| @@ -34,13 +34,13 @@ | |||||||
| 								"incoming_port": 9090, | 								"incoming_port": 9090, | ||||||
| 								"forwarding_host": "router.internal", | 								"forwarding_host": "router.internal", | ||||||
| 								"forwarding_port": 80, | 								"forwarding_port": 80, | ||||||
| 								"tcp_forwarding": 0, | 								"tcp_forwarding": true, | ||||||
| 								"udp_forwarding": 0, | 								"udp_forwarding": false, | ||||||
| 								"meta": { | 								"meta": { | ||||||
| 									"nginx_online": true, | 									"nginx_online": true, | ||||||
| 									"nginx_err": null | 									"nginx_err": null | ||||||
| 								}, | 								}, | ||||||
| 								"enabled": 1 | 								"enabled": true | ||||||
| 							} | 							} | ||||||
| 						} | 						} | ||||||
| 					}, | 					}, | ||||||
|   | |||||||
| @@ -102,26 +102,26 @@ | |||||||
| 								"forward_port": 8989, | 								"forward_port": 8989, | ||||||
| 								"access_list_id": 0, | 								"access_list_id": 0, | ||||||
| 								"certificate_id": 0, | 								"certificate_id": 0, | ||||||
| 								"ssl_forced": 0, | 								"ssl_forced": false, | ||||||
| 								"caching_enabled": 0, | 								"caching_enabled": false, | ||||||
| 								"block_exploits": 0, | 								"block_exploits": false, | ||||||
| 								"advanced_config": "", | 								"advanced_config": "", | ||||||
| 								"meta": { | 								"meta": { | ||||||
| 									"nginx_online": true, | 									"nginx_online": true, | ||||||
| 									"nginx_err": null | 									"nginx_err": null | ||||||
| 								}, | 								}, | ||||||
| 								"allow_websocket_upgrade": 0, | 								"allow_websocket_upgrade": false, | ||||||
| 								"http2_support": 0, | 								"http2_support": false, | ||||||
| 								"forward_scheme": "http", | 								"forward_scheme": "http", | ||||||
| 								"enabled": 1, | 								"enabled": true, | ||||||
| 								"hsts_enabled": 0, | 								"hsts_enabled": false, | ||||||
| 								"hsts_subdomains": 0, | 								"hsts_subdomains": false, | ||||||
| 								"owner": { | 								"owner": { | ||||||
| 									"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": 0, | 									"is_deleted": false, | ||||||
| 									"is_disabled": 0, | 									"is_disabled": false, | ||||||
| 									"email": "admin@example.com", | 									"email": "admin@example.com", | ||||||
| 									"name": "Administrator", | 									"name": "Administrator", | ||||||
| 									"nickname": "some guy", | 									"nickname": "some guy", | ||||||
|   | |||||||
| @@ -30,7 +30,7 @@ | |||||||
| 									"id": 1, | 									"id": 1, | ||||||
| 									"created_on": "2020-01-30T09:36:08.000Z", | 									"created_on": "2020-01-30T09:36:08.000Z", | ||||||
| 									"modified_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", | 									"email": "jc@jc21.com", | ||||||
| 									"name": "Jamie Curnow", | 									"name": "Jamie Curnow", | ||||||
| 									"nickname": "James", | 									"nickname": "James", | ||||||
| @@ -45,7 +45,7 @@ | |||||||
| 									"id": 1, | 									"id": 1, | ||||||
| 									"created_on": "2020-01-30T09:36:08.000Z", | 									"created_on": "2020-01-30T09:36:08.000Z", | ||||||
| 									"modified_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", | 									"email": "jc@jc21.com", | ||||||
| 									"name": "Jamie Curnow", | 									"name": "Jamie Curnow", | ||||||
| 									"nickname": "James", | 									"nickname": "James", | ||||||
|   | |||||||
| @@ -56,7 +56,7 @@ | |||||||
| 								"id": 2, | 								"id": 2, | ||||||
| 								"created_on": "2020-01-30T09:41:04.000Z", | 								"created_on": "2020-01-30T09:41:04.000Z", | ||||||
| 								"modified_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", | 								"email": "jc@jc21.com", | ||||||
| 								"name": "Jamie Curnow", | 								"name": "Jamie Curnow", | ||||||
| 								"nickname": "James", | 								"nickname": "James", | ||||||
|   | |||||||
| @@ -39,7 +39,7 @@ | |||||||
| 								"id": 1, | 								"id": 1, | ||||||
| 								"created_on": "2020-01-30T09:36:08.000Z", | 								"created_on": "2020-01-30T09:36:08.000Z", | ||||||
| 								"modified_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", | 								"email": "jc@jc21.com", | ||||||
| 								"name": "Jamie Curnow", | 								"name": "Jamie Curnow", | ||||||
| 								"nickname": "James", | 								"nickname": "James", | ||||||
|   | |||||||
| @@ -34,7 +34,7 @@ | |||||||
| 									"id": 1, | 									"id": 1, | ||||||
| 									"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": 0, | 									"is_disabled": false, | ||||||
| 									"email": "jc@jc21.com", | 									"email": "jc@jc21.com", | ||||||
| 									"name": "Jamie Curnow", | 									"name": "Jamie Curnow", | ||||||
| 									"nickname": "James", | 									"nickname": "James", | ||||||
|   | |||||||
| @@ -69,7 +69,7 @@ | |||||||
| 								"id": 2, | 								"id": 2, | ||||||
| 								"created_on": "2020-01-30T09:36:08.000Z", | 								"created_on": "2020-01-30T09:36:08.000Z", | ||||||
| 								"modified_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", | 								"email": "jc@jc21.com", | ||||||
| 								"name": "Jamie Curnow", | 								"name": "Jamie Curnow", | ||||||
| 								"nickname": "James", | 								"nickname": "James", | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| { | { | ||||||
| 	"openapi": "3.0.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" | ||||||
|   | |||||||
							
								
								
									
										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 | # yarn lockfile v1 | ||||||
|  |  | ||||||
|  |  | ||||||
| "@apidevtools/json-schema-ref-parser@8.0.0": | "@apidevtools/json-schema-ref-parser@9.0.6": | ||||||
|   version "8.0.0" |   version "9.0.6" | ||||||
|   resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-8.0.0.tgz#9eb749499b3f8d919e90bb141e4b6f67aee4692d" |   resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.6.tgz#5d9000a3ac1fd25404da886da6b266adcd99cf1c" | ||||||
|   integrity sha512-n4YBtwQhdpLto1BaUCyAeflizmIbaloGShsPyRtFf5qdFJxfssj+GgLavczgKJFa3Bq+3St2CKcpRJdjtB4EBw== |   integrity sha512-M3YgsLjI0lZxvrpeGVk9Ap032W6TPQkH6pRAZz81Ac3WUNF79VQooAFnp8umjvVzUmD93NkogxEwbSce7qMsUg== | ||||||
|   dependencies: |   dependencies: | ||||||
|     "@jsdevtools/ono" "^7.1.0" |     "@jsdevtools/ono" "^7.1.3" | ||||||
|     call-me-maybe "^1.0.1" |     call-me-maybe "^1.0.1" | ||||||
|     js-yaml "^3.13.1" |     js-yaml "^3.13.1" | ||||||
|  |  | ||||||
| @@ -20,6 +20,29 @@ | |||||||
|     "@types/json-schema" "^7.0.15" |     "@types/json-schema" "^7.0.15" | ||||||
|     js-yaml "^4.1.0" |     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": | "@eslint-community/eslint-utils@^4.2.0": | ||||||
|   version "4.3.0" |   version "4.3.0" | ||||||
|   resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.3.0.tgz#a556790523a351b4e47e9d385f47265eaaf9780a" |   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" |   resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" | ||||||
|   integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== |   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" |   version "7.1.3" | ||||||
|   resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796" |   resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796" | ||||||
|   integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg== |   integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg== | ||||||
| @@ -207,7 +230,12 @@ aggregate-error@^3.0.0: | |||||||
|     clean-stack "^2.0.0" |     clean-stack "^2.0.0" | ||||||
|     indent-string "^4.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" |   version "6.12.6" | ||||||
|   resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" |   resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" | ||||||
|   integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== |   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" |     json-schema-traverse "^0.4.1" | ||||||
|     uri-js "^4.2.2" |     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: | ajv@^8.6.2: | ||||||
|   version "8.12.0" |   version "8.12.0" | ||||||
|   resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" |   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" |   resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" | ||||||
|   integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== |   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: | chalk@^2.3.2: | ||||||
|   version "2.4.2" |   version "2.4.2" | ||||||
|   resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" |   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" |     ansi-styles "^4.1.0" | ||||||
|     supports-color "^7.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: | chokidar@^3.2.2: | ||||||
|   version "3.4.1" |   version "3.4.1" | ||||||
|   resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.1.tgz#e905bdecf10eaa0a0b1db0c664481cc4cbc22ba1" |   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" |   resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" | ||||||
|   integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== |   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: | fastq@^1.6.0: | ||||||
|   version "1.15.0" |   version "1.15.0" | ||||||
|   resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" |   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" |   resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" | ||||||
|   integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== |   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: | json-schema-traverse@^0.4.1: | ||||||
|   version "0.4.1" |   version "0.4.1" | ||||||
|   resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" |   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', { | 		cy.task('backendApiGet', { | ||||||
| 			path: '/api/schema', | 			path: '/api/schema', | ||||||
| 		}).then((data) => { | 		}).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).to.have.property('id'); | ||||||
| 			expect(data.id).to.be.greaterThan(0); | 			expect(data.id).to.be.greaterThan(0); | ||||||
| 			expect(data).to.have.property('enabled'); | 			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(data).to.have.property('meta'); | ||||||
| 			expect(typeof data.meta.nginx_online).to.be.equal('undefined'); | 			expect(typeof data.meta.nginx_online).to.be.equal('undefined'); | ||||||
| 		}); | 		}); | ||||||
|   | |||||||
| @@ -1,12 +1,7 @@ | |||||||
| const _ = require("lodash"); | const _ = require("lodash"); | ||||||
| const chalk = require("chalk"); |  | ||||||
|  |  | ||||||
| module.exports = function() { | module.exports = function() { | ||||||
| 	var arr = _.values(arguments); | 	let arr = _.values(arguments); | ||||||
| 	arr.unshift( | 	arr.unshift('[Backend API]'); | ||||||
| 		chalk.blue.bold("[") + |  | ||||||
| 			chalk.yellow.bold("Backend API") + |  | ||||||
| 			chalk.blue.bold("]"), |  | ||||||
| 	); |  | ||||||
| 	console.log.apply(null, arr); | 	console.log.apply(null, arr); | ||||||
| }; | }; | ||||||
|   | |||||||
| @@ -6,21 +6,20 @@ | |||||||
| 	"dependencies": { | 	"dependencies": { | ||||||
| 		"@jc21/cypress-swagger-validation": "^0.2.6", | 		"@jc21/cypress-swagger-validation": "^0.2.6", | ||||||
| 		"@jc21/restler": "^3.4.0", | 		"@jc21/restler": "^3.4.0", | ||||||
| 		"chalk": "^4.1.0", | 		"cypress": "^13.15.0", | ||||||
| 		"cypress": "^13.9.0", |  | ||||||
| 		"cypress-multi-reporters": "^1.6.4", | 		"cypress-multi-reporters": "^1.6.4", | ||||||
| 		"cypress-wait-until": "^3.0.1", | 		"cypress-wait-until": "^3.0.2", | ||||||
| 		"eslint": "^9.3.0", | 		"eslint": "^9.12.0", | ||||||
| 		"eslint-plugin-align-assignments": "^1.1.2", | 		"eslint-plugin-align-assignments": "^1.1.2", | ||||||
| 		"eslint-plugin-chai-friendly": "^0.7.4", | 		"eslint-plugin-chai-friendly": "^1.0.1", | ||||||
| 		"eslint-plugin-cypress": "^3.2.0", | 		"eslint-plugin-cypress": "^3.5.0", | ||||||
| 		"lodash": "^4.17.21", | 		"lodash": "^4.17.21", | ||||||
| 		"mocha": "^10.4.0", | 		"mocha": "^10.7.3", | ||||||
| 		"mocha-junit-reporter": "^2.2.1" | 		"mocha-junit-reporter": "^2.2.1" | ||||||
| 	}, | 	}, | ||||||
| 	"scripts": { | 	"scripts": { | ||||||
| 		"cypress": "cypress open --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.json --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": "", | 	"author": "", | ||||||
| 	"license": "ISC" | 	"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