mirror of
				https://github.com/NginxProxyManager/nginx-proxy-manager.git
				synced 2025-10-31 07:43:33 +00:00 
			
		
		
		
	Refactor API Schema and validation
- /schema now returns full openapi/swagger schema - That schema is used to validate incoming requests - And used as a contract in future integration tests - Moved route files up one level - Fixed incorrect 404 reponses when getting objects - Fixed saving new objects and passing jsonschemavalidation
This commit is contained in:
		
							
								
								
									
										53
									
								
								backend/schema/components/access-list-object.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								backend/schema/components/access-list-object.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,53 @@ | ||||
| { | ||||
| 	"type": "object", | ||||
| 	"description": "Access List object", | ||||
| 	"required": ["id", "created_on", "modified_on", "owner_user_id", "name", "directive", "address", "satisfy_any", "pass_auth", "meta"], | ||||
| 	"additionalProperties": false, | ||||
| 	"properties": { | ||||
| 		"id": { | ||||
| 			"$ref": "../common.json#/definitions/id" | ||||
| 		}, | ||||
| 		"created_on": { | ||||
| 			"$ref": "../common.json#/definitions/created_on" | ||||
| 		}, | ||||
| 		"modified_on": { | ||||
| 			"$ref": "../common.json#/definitions/modified_on" | ||||
| 		}, | ||||
| 		"owner_user_id": { | ||||
| 			"$ref": "../common.json#/definitions/user_id" | ||||
| 		}, | ||||
| 		"name": { | ||||
| 			"type": "string", | ||||
| 			"minLength": 1 | ||||
| 		}, | ||||
| 		"directive": { | ||||
| 			"type": "string", | ||||
| 			"enum": ["allow", "deny"] | ||||
| 		}, | ||||
| 		"address": { | ||||
| 			"oneOf": [ | ||||
| 				{ | ||||
| 					"type": "string", | ||||
| 					"pattern": "^([0-9]{1,3}\\.){3}[0-9]{1,3}(/([0-9]|[1-2][0-9]|3[0-2]))?$" | ||||
| 				}, | ||||
| 				{ | ||||
| 					"type": "string", | ||||
| 					"pattern": "^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8]))?$" | ||||
| 				}, | ||||
| 				{ | ||||
| 					"type": "string", | ||||
| 					"pattern": "^all$" | ||||
| 				} | ||||
| 			] | ||||
| 		}, | ||||
| 		"satisfy_any": { | ||||
| 			"type": "boolean" | ||||
| 		}, | ||||
| 		"pass_auth": { | ||||
| 			"type": "boolean" | ||||
| 		}, | ||||
| 		"meta": { | ||||
| 			"type": "object" | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										32
									
								
								backend/schema/components/audit-log-object.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								backend/schema/components/audit-log-object.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| { | ||||
| 	"type": "object", | ||||
| 	"description": "Audit Log object", | ||||
| 	"required": ["id", "created_on", "modified_on", "user_id", "object_type", "object_id", "action", "meta"], | ||||
| 	"additionalProperties": false, | ||||
| 	"properties": { | ||||
| 		"id": { | ||||
| 			"$ref": "../common.json#/definitions/id" | ||||
| 		}, | ||||
| 		"created_on": { | ||||
| 			"$ref": "../common.json#/definitions/created_on" | ||||
| 		}, | ||||
| 		"modified_on": { | ||||
| 			"$ref": "../common.json#/definitions/modified_on" | ||||
| 		}, | ||||
| 		"user_id": { | ||||
| 			"$ref": "../common.json#/definitions/user_id" | ||||
| 		}, | ||||
| 		"object_type": { | ||||
| 			"type": "string" | ||||
| 		}, | ||||
| 		"object_id": { | ||||
| 			"$ref": "../common.json#/definitions/id" | ||||
| 		}, | ||||
| 		"action": { | ||||
| 			"type": "string" | ||||
| 		}, | ||||
| 		"meta": { | ||||
| 			"type": "object" | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										7
									
								
								backend/schema/components/certificate-list.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								backend/schema/components/certificate-list.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| { | ||||
| 	"type": "array", | ||||
| 	"description": "Certificates list", | ||||
| 	"items": { | ||||
| 		"$ref": "./certificate-object.json" | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										66
									
								
								backend/schema/components/certificate-object.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								backend/schema/components/certificate-object.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,66 @@ | ||||
| { | ||||
| 	"type": "object", | ||||
| 	"description": "Certificate object", | ||||
| 	"required": ["id", "created_on", "modified_on", "owner_user_id", "provider", "nice_name", "domain_names", "expires_on", "meta"], | ||||
| 	"additionalProperties": false, | ||||
| 	"properties": { | ||||
| 		"id": { | ||||
| 			"$ref": "../common.json#/definitions/id" | ||||
| 		}, | ||||
| 		"created_on": { | ||||
| 			"$ref": "../common.json#/definitions/created_on" | ||||
| 		}, | ||||
| 		"modified_on": { | ||||
| 			"$ref": "../common.json#/definitions/modified_on" | ||||
| 		}, | ||||
| 		"owner_user_id": { | ||||
| 			"$ref": "../common.json#/definitions/user_id" | ||||
| 		}, | ||||
| 		"provider": { | ||||
| 			"$ref": "../common.json#/definitions/ssl_provider" | ||||
| 		}, | ||||
| 		"nice_name": { | ||||
| 			"type": "string", | ||||
| 			"description": "Nice Name for the custom certificate" | ||||
| 		}, | ||||
| 		"domain_names": { | ||||
| 			"$ref": "../common.json#/definitions/domain_names" | ||||
| 		}, | ||||
| 		"expires_on": { | ||||
| 			"description": "Date and time of expiration", | ||||
| 			"format": "date-time", | ||||
| 			"readOnly": true, | ||||
| 			"type": "string" | ||||
| 		}, | ||||
| 		"meta": { | ||||
| 			"type": "object", | ||||
| 			"additionalProperties": false, | ||||
| 			"properties": { | ||||
| 				"letsencrypt_email": { | ||||
| 					"type": "string", | ||||
| 					"format": "email" | ||||
| 				}, | ||||
| 				"letsencrypt_agree": { | ||||
| 					"type": "boolean" | ||||
| 				}, | ||||
| 				"dns_challenge": { | ||||
| 					"type": "boolean" | ||||
| 				}, | ||||
| 				"dns_provider": { | ||||
| 					"type": "string" | ||||
| 				}, | ||||
| 				"dns_provider_credentials": { | ||||
| 					"type": "string" | ||||
| 				}, | ||||
| 				"propagation_seconds": { | ||||
| 					"anyOf": [ | ||||
| 						{ | ||||
| 							"type": "integer", | ||||
| 							"minimum": 0 | ||||
| 						} | ||||
| 					] | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										7
									
								
								backend/schema/components/dead-host-list.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								backend/schema/components/dead-host-list.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| { | ||||
| 	"type": "array", | ||||
| 	"description": "404 Hosts list", | ||||
| 	"items": { | ||||
| 		"$ref": "./dead-host-object.json" | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										47
									
								
								backend/schema/components/dead-host-object.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								backend/schema/components/dead-host-object.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,47 @@ | ||||
| { | ||||
| 	"type": "object", | ||||
| 	"description": "404 Host object", | ||||
| 	"required": ["id", "created_on", "modified_on", "owner_user_id", "domain_names", "certificate_id", "ssl_forced", "hsts_enabled", "hsts_subdomains", "http2_support", "advanced_config", "enabled", "meta"], | ||||
| 	"additionalProperties": false, | ||||
| 	"properties": { | ||||
| 		"id": { | ||||
| 			"$ref": "../common.json#/definitions/id" | ||||
| 		}, | ||||
| 		"created_on": { | ||||
| 			"$ref": "../common.json#/definitions/created_on" | ||||
| 		}, | ||||
| 		"modified_on": { | ||||
| 			"$ref": "../common.json#/definitions/modified_on" | ||||
| 		}, | ||||
| 		"owner_user_id": { | ||||
| 			"$ref": "../common.json#/definitions/user_id" | ||||
| 		}, | ||||
| 		"domain_names": { | ||||
| 			"$ref": "../common.json#/definitions/domain_names" | ||||
| 		}, | ||||
| 		"certificate_id": { | ||||
| 			"$ref": "../common.json#/definitions/certificate_id" | ||||
| 		}, | ||||
| 		"ssl_forced": { | ||||
| 			"$ref": "../common.json#/definitions/ssl_forced" | ||||
| 		}, | ||||
| 		"hsts_enabled": { | ||||
| 			"$ref": "../common.json#/definitions/hsts_enabled" | ||||
| 		}, | ||||
| 		"hsts_subdomains": { | ||||
| 			"$ref": "../common.json#/definitions/hsts_subdomains" | ||||
| 		}, | ||||
| 		"http2_support": { | ||||
| 			"$ref": "../common.json#/definitions/http2_support" | ||||
| 		}, | ||||
| 		"advanced_config": { | ||||
| 			"type": "string" | ||||
| 		}, | ||||
| 		"enabled": { | ||||
| 			"$ref": "../common.json#/definitions/enabled" | ||||
| 		}, | ||||
| 		"meta": { | ||||
| 			"type": "object" | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										14
									
								
								backend/schema/components/error-object.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								backend/schema/components/error-object.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| { | ||||
| 	"type": "object", | ||||
| 	"description": "Error object", | ||||
| 	"additionalProperties": false, | ||||
| 	"required": ["code", "message"], | ||||
| 	"properties": { | ||||
| 		"code": { | ||||
| 			"type": "integer" | ||||
| 		}, | ||||
| 		"message": { | ||||
| 			"type": "string" | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										38
									
								
								backend/schema/components/health-object.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								backend/schema/components/health-object.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | ||||
| { | ||||
| 	"type": "object", | ||||
| 	"description": "Health object", | ||||
| 	"additionalProperties": false, | ||||
| 	"required": ["status", "version"], | ||||
| 	"properties": { | ||||
| 		"status": { | ||||
| 			"type": "string", | ||||
| 			"description": "Healthy", | ||||
| 			"example": "OK" | ||||
| 		}, | ||||
| 		"version": { | ||||
| 			"type": "object", | ||||
| 			"description": "The version object", | ||||
| 			"example": { | ||||
| 				"major": 2, | ||||
| 				"minor": 0, | ||||
| 				"revision": 0 | ||||
| 			}, | ||||
| 			"additionalProperties": false, | ||||
| 			"required": ["major", "minor", "revision"], | ||||
| 			"properties": { | ||||
| 				"major": { | ||||
| 					"type": "integer", | ||||
| 					"minimum": 0 | ||||
| 				}, | ||||
| 				"minor": { | ||||
| 					"type": "integer", | ||||
| 					"minimum": 0 | ||||
| 				}, | ||||
| 				"revision": { | ||||
| 					"type": "integer", | ||||
| 					"minimum": 0 | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										41
									
								
								backend/schema/components/permission-object.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								backend/schema/components/permission-object.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,41 @@ | ||||
| { | ||||
| 	"type": "object", | ||||
| 	"minProperties": 1, | ||||
| 	"properties": { | ||||
| 		"visibility": { | ||||
| 			"type": "string", | ||||
| 			"description": "Visibility Type", | ||||
| 			"enum": ["all", "user"] | ||||
| 		}, | ||||
| 		"access_lists": { | ||||
| 			"type": "string", | ||||
| 			"description": "Access Lists Permissions", | ||||
| 			"enum": ["hidden", "view", "manage"] | ||||
| 		}, | ||||
| 		"dead_hosts": { | ||||
| 			"type": "string", | ||||
| 			"description": "404 Hosts Permissions", | ||||
| 			"enum": ["hidden", "view", "manage"] | ||||
| 		}, | ||||
| 		"proxy_hosts": { | ||||
| 			"type": "string", | ||||
| 			"description": "Proxy Hosts Permissions", | ||||
| 			"enum": ["hidden", "view", "manage"] | ||||
| 		}, | ||||
| 		"redirection_hosts": { | ||||
| 			"type": "string", | ||||
| 			"description": "Redirection Permissions", | ||||
| 			"enum": ["hidden", "view", "manage"] | ||||
| 		}, | ||||
| 		"streams": { | ||||
| 			"type": "string", | ||||
| 			"description": "Streams Permissions", | ||||
| 			"enum": ["hidden", "view", "manage"] | ||||
| 		}, | ||||
| 		"certificates": { | ||||
| 			"type": "string", | ||||
| 			"description": "Certificates Permissions", | ||||
| 			"enum": ["hidden", "view", "manage"] | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										7
									
								
								backend/schema/components/proxy-host-list.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								backend/schema/components/proxy-host-list.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| { | ||||
| 	"type": "array", | ||||
| 	"description": "Proxy Hosts list", | ||||
| 	"items": { | ||||
| 		"$ref": "./proxy-host-object.json" | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										148
									
								
								backend/schema/components/proxy-host-object.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										148
									
								
								backend/schema/components/proxy-host-object.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,148 @@ | ||||
| { | ||||
| 	"type": "object", | ||||
| 	"description": "Proxy Host object", | ||||
| 	"required": [ | ||||
| 		"id", | ||||
| 		"created_on", | ||||
| 		"modified_on", | ||||
| 		"owner_user_id", | ||||
| 		"domain_names", | ||||
| 		"forward_host", | ||||
| 		"forward_port", | ||||
| 		"access_list_id", | ||||
| 		"certificate_id", | ||||
| 		"ssl_forced", | ||||
| 		"caching_enabled", | ||||
| 		"block_exploits", | ||||
| 		"advanced_config", | ||||
| 		"meta", | ||||
| 		"allow_websocket_upgrade", | ||||
| 		"http2_support", | ||||
| 		"forward_scheme", | ||||
| 		"enabled", | ||||
| 		"locations", | ||||
| 		"hsts_enabled", | ||||
| 		"hsts_subdomains", | ||||
| 		"certificate", | ||||
| 		"use_default_location", | ||||
| 		"ipv6" | ||||
| 	], | ||||
| 	"additionalProperties": false, | ||||
| 	"properties": { | ||||
| 		"id": { | ||||
| 			"$ref": "../common.json#/definitions/id" | ||||
| 		}, | ||||
| 		"created_on": { | ||||
| 			"$ref": "../common.json#/definitions/created_on" | ||||
| 		}, | ||||
| 		"modified_on": { | ||||
| 			"$ref": "../common.json#/definitions/modified_on" | ||||
| 		}, | ||||
| 		"owner_user_id": { | ||||
| 			"$ref": "../common.json#/definitions/user_id" | ||||
| 		}, | ||||
| 		"domain_names": { | ||||
| 			"$ref": "../common.json#/definitions/domain_names" | ||||
| 		}, | ||||
| 		"forward_host": { | ||||
| 			"type": "string", | ||||
| 			"minLength": 1, | ||||
| 			"maxLength": 255 | ||||
| 		}, | ||||
| 		"forward_port": { | ||||
| 			"type": "integer", | ||||
| 			"minimum": 1, | ||||
| 			"maximum": 65535 | ||||
| 		}, | ||||
| 		"access_list_id": { | ||||
| 			"$ref": "../common.json#/definitions/access_list_id" | ||||
| 		}, | ||||
| 		"certificate_id": { | ||||
| 			"$ref": "../common.json#/definitions/certificate_id" | ||||
| 		}, | ||||
| 		"ssl_forced": { | ||||
| 			"$ref": "../common.json#/definitions/ssl_forced" | ||||
| 		}, | ||||
| 		"caching_enabled": { | ||||
| 			"$ref": "../common.json#/definitions/caching_enabled" | ||||
| 		}, | ||||
| 		"block_exploits": { | ||||
| 			"$ref": "../common.json#/definitions/block_exploits" | ||||
| 		}, | ||||
| 		"advanced_config": { | ||||
| 			"type": "string" | ||||
| 		}, | ||||
| 		"meta": { | ||||
| 			"type": "object" | ||||
| 		}, | ||||
| 		"allow_websocket_upgrade": { | ||||
| 			"description": "Allow Websocket Upgrade for all paths", | ||||
| 			"example": true, | ||||
| 			"type": "boolean" | ||||
| 		}, | ||||
| 		"http2_support": { | ||||
| 			"$ref": "../common.json#/definitions/http2_support" | ||||
| 		}, | ||||
| 		"forward_scheme": { | ||||
| 			"type": "string", | ||||
| 			"enum": ["http", "https"] | ||||
| 		}, | ||||
| 		"enabled": { | ||||
| 			"$ref": "../common.json#/definitions/enabled" | ||||
| 		}, | ||||
| 		"locations": { | ||||
| 			"type": "array", | ||||
| 			"minItems": 0, | ||||
| 			"items": { | ||||
| 				"type": "object", | ||||
| 				"required": ["forward_scheme", "forward_host", "forward_port", "path"], | ||||
| 				"additionalProperties": false, | ||||
| 				"properties": { | ||||
| 					"id": { | ||||
| 						"type": ["integer", "null"] | ||||
| 					}, | ||||
| 					"path": { | ||||
| 						"type": "string", | ||||
| 						"minLength": 1 | ||||
| 					}, | ||||
| 					"forward_scheme": { | ||||
| 						"$ref": "#/properties/forward_scheme" | ||||
| 					}, | ||||
| 					"forward_host": { | ||||
| 						"$ref": "#/properties/forward_host" | ||||
| 					}, | ||||
| 					"forward_port": { | ||||
| 						"$ref": "#/properties/forward_port" | ||||
| 					}, | ||||
| 					"forward_path": { | ||||
| 						"type": "string" | ||||
| 					}, | ||||
| 					"advanced_config": { | ||||
| 						"type": "string" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		}, | ||||
| 		"hsts_enabled": { | ||||
| 			"$ref": "../common.json#/definitions/hsts_enabled" | ||||
| 		}, | ||||
| 		"hsts_subdomains": { | ||||
| 			"$ref": "../common.json#/definitions/hsts_subdomains" | ||||
| 		}, | ||||
| 		"certificate": { | ||||
| 			"$ref": "./certificate-object.json" | ||||
| 		}, | ||||
| 		"owner": { | ||||
| 			"$ref": "./user-object.json" | ||||
| 		}, | ||||
| 		"access_list": { | ||||
| 			"$ref": "./access-list-object.json" | ||||
| 		}, | ||||
| 		"use_default_location": { | ||||
| 			"type": "boolean" | ||||
| 		}, | ||||
| 		"ipv6": { | ||||
| 			"type": "boolean" | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										7
									
								
								backend/schema/components/redirection-host-list.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								backend/schema/components/redirection-host-list.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| { | ||||
| 	"type": "array", | ||||
| 	"description": "Redirection Hosts list", | ||||
| 	"items": { | ||||
| 		"$ref": "./redirection-host-object.json" | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										72
									
								
								backend/schema/components/redirection-host-object.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								backend/schema/components/redirection-host-object.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,72 @@ | ||||
| { | ||||
| 	"type": "object", | ||||
| 	"description": "Redirection Host object", | ||||
| 	"required": ["id", "created_on", "modified_on", "owner_user_id", "domain_names", "forward_http_code", "forward_scheme", "forward_domain_name", "preserve_path", "certificate_id", "ssl_forced", "hsts_enabled", "hsts_subdomains", "http2_support", "block_exploits", "advanced_config", "enabled", "meta"], | ||||
| 	"additionalProperties": false, | ||||
| 	"properties": { | ||||
| 		"id": { | ||||
| 			"$ref": "../common.json#/definitions/id" | ||||
| 		}, | ||||
| 		"created_on": { | ||||
| 			"$ref": "../common.json#/definitions/created_on" | ||||
| 		}, | ||||
| 		"modified_on": { | ||||
| 			"$ref": "../common.json#/definitions/modified_on" | ||||
| 		}, | ||||
| 		"owner_user_id": { | ||||
| 			"$ref": "../common.json#/definitions/user_id" | ||||
| 		}, | ||||
| 		"domain_names": { | ||||
| 			"$ref": "../common.json#/definitions/domain_names" | ||||
| 		}, | ||||
| 		"forward_http_code": { | ||||
| 			"description": "Redirect HTTP Status Code", | ||||
| 			"example": 302, | ||||
| 			"type": "integer", | ||||
| 			"minimum": 300, | ||||
| 			"maximum": 308 | ||||
| 		}, | ||||
| 		"forward_scheme": { | ||||
| 			"type": "string", | ||||
| 			"enum": ["http", "https"] | ||||
| 		}, | ||||
| 		"forward_domain_name": { | ||||
| 			"description": "Domain Name", | ||||
| 			"example": "jc21.com", | ||||
| 			"type": "string", | ||||
| 			"pattern": "^(?:[^.*]+\\.?)+[^.]$" | ||||
| 		}, | ||||
| 		"preserve_path": { | ||||
| 			"description": "Should the path be preserved", | ||||
| 			"example": true, | ||||
| 			"type": "boolean" | ||||
| 		}, | ||||
| 		"certificate_id": { | ||||
| 			"$ref": "../common.json#/definitions/certificate_id" | ||||
| 		}, | ||||
| 		"ssl_forced": { | ||||
| 			"$ref": "../common.json#/definitions/ssl_forced" | ||||
| 		}, | ||||
| 		"hsts_enabled": { | ||||
| 			"$ref": "../common.json#/definitions/hsts_enabled" | ||||
| 		}, | ||||
| 		"hsts_subdomains": { | ||||
| 			"$ref": "../common.json#/definitions/hsts_subdomains" | ||||
| 		}, | ||||
| 		"http2_support": { | ||||
| 			"$ref": "../common.json#/definitions/http2_support" | ||||
| 		}, | ||||
| 		"block_exploits": { | ||||
| 			"$ref": "../common.json#/definitions/block_exploits" | ||||
| 		}, | ||||
| 		"advanced_config": { | ||||
| 			"type": "string" | ||||
| 		}, | ||||
| 		"enabled": { | ||||
| 			"$ref": "../common.json#/definitions/enabled" | ||||
| 		}, | ||||
| 		"meta": { | ||||
| 			"type": "object" | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										6
									
								
								backend/schema/components/security-schemes.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								backend/schema/components/security-schemes.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| { | ||||
| 	"BearerAuth": { | ||||
| 		"type": "http", | ||||
| 		"scheme": "bearer" | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										7
									
								
								backend/schema/components/setting-list.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								backend/schema/components/setting-list.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| { | ||||
| 	"type": "array", | ||||
| 	"description": "Setting list", | ||||
| 	"items": { | ||||
| 		"$ref": "./setting-object.json" | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										53
									
								
								backend/schema/components/setting-object.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								backend/schema/components/setting-object.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,53 @@ | ||||
| { | ||||
| 	"type": "object", | ||||
| 	"description": "Setting object", | ||||
| 	"required": ["id", "name", "description", "value", "meta"], | ||||
| 	"additionalProperties": false, | ||||
| 	"properties": { | ||||
| 		"id": { | ||||
| 			"type": "string", | ||||
| 			"description": "Setting ID", | ||||
| 			"minLength": 1, | ||||
| 			"example": "default-site" | ||||
| 		}, | ||||
| 		"name": { | ||||
| 			"type": "string", | ||||
| 			"description": "Setting Display Name", | ||||
| 			"minLength": 1, | ||||
| 			"example": "Default Site" | ||||
| 		}, | ||||
| 		"description": { | ||||
| 			"type": "string", | ||||
| 			"description": "Meaningful description", | ||||
| 			"minLength": 1, | ||||
| 			"example": "What to show when Nginx is hit with an unknown Host" | ||||
| 		}, | ||||
| 		"value": { | ||||
| 			"description": "Value in almost any form", | ||||
| 			"example": "congratulations", | ||||
| 			"oneOf": [ | ||||
| 				{ | ||||
| 					"type": "string", | ||||
| 					"minLength": 1 | ||||
| 				}, | ||||
| 				{ | ||||
| 					"type": "integer" | ||||
| 				}, | ||||
| 				{ | ||||
| 					"type": "object" | ||||
| 				}, | ||||
| 				{ | ||||
| 					"type": "number" | ||||
| 				}, | ||||
| 				{ | ||||
| 					"type": "array" | ||||
| 				} | ||||
| 			] | ||||
| 		}, | ||||
| 		"meta": { | ||||
| 			"description": "Extra metadata", | ||||
| 			"example": {}, | ||||
| 			"type": "object" | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										7
									
								
								backend/schema/components/stream-list.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								backend/schema/components/stream-list.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| { | ||||
| 	"type": "array", | ||||
| 	"description": "Proxy Hosts list", | ||||
| 	"items": { | ||||
| 		"$ref": "./proxy-host-object.json" | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										60
									
								
								backend/schema/components/stream-object.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								backend/schema/components/stream-object.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,60 @@ | ||||
| { | ||||
| 	"type": "object", | ||||
| 	"description": "Stream object", | ||||
| 	"required": ["id", "created_on", "modified_on", "owner_user_id", "incoming_port", "forwarding_host", "forwarding_port", "tcp_forwarding", "udp_forwarding", "enabled", "meta"], | ||||
| 	"additionalProperties": false, | ||||
| 	"properties": { | ||||
| 		"id": { | ||||
| 			"$ref": "../common.json#/definitions/id" | ||||
| 		}, | ||||
| 		"created_on": { | ||||
| 			"$ref": "../common.json#/definitions/created_on" | ||||
| 		}, | ||||
| 		"modified_on": { | ||||
| 			"$ref": "../common.json#/definitions/modified_on" | ||||
| 		}, | ||||
| 		"owner_user_id": { | ||||
| 			"$ref": "../common.json#/definitions/user_id" | ||||
| 		}, | ||||
| 		"incoming_port": { | ||||
| 			"type": "integer", | ||||
| 			"minimum": 1, | ||||
| 			"maximum": 65535 | ||||
| 		}, | ||||
| 		"forwarding_host": { | ||||
| 			"anyOf": [ | ||||
| 				{ | ||||
| 					"description": "Domain Name", | ||||
| 					"example": "jc21.com", | ||||
| 					"type": "string", | ||||
| 					"pattern": "^(?:[^.*]+\\.?)+[^.]$" | ||||
| 				}, | ||||
| 				{ | ||||
| 					"type": "string", | ||||
| 					"format": "ipv4" | ||||
| 				}, | ||||
| 				{ | ||||
| 					"type": "string", | ||||
| 					"format": "ipv6" | ||||
| 				} | ||||
| 			] | ||||
| 		}, | ||||
| 		"forwarding_port": { | ||||
| 			"type": "integer", | ||||
| 			"minimum": 1, | ||||
| 			"maximum": 65535 | ||||
| 		}, | ||||
| 		"tcp_forwarding": { | ||||
| 			"type": "boolean" | ||||
| 		}, | ||||
| 		"udp_forwarding": { | ||||
| 			"type": "boolean" | ||||
| 		}, | ||||
| 		"enabled": { | ||||
| 			"$ref": "../common.json#/definitions/enabled" | ||||
| 		}, | ||||
| 		"meta": { | ||||
| 			"type": "object" | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										19
									
								
								backend/schema/components/token-object.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								backend/schema/components/token-object.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| { | ||||
| 	"type": "object", | ||||
| 	"description": "Token object", | ||||
| 	"required": ["expires", "token"], | ||||
| 	"additionalProperties": false, | ||||
| 	"properties": { | ||||
| 		"expires": { | ||||
| 			"description": "Token Expiry Unix Time", | ||||
| 			"example": 1566540249, | ||||
| 			"minimum": 1, | ||||
| 			"type": "number" | ||||
| 		}, | ||||
| 		"token": { | ||||
| 			"description": "JWT Token", | ||||
| 			"example": "eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCJ9.ey...xaHKYr3Kk6MvkUjcC4", | ||||
| 			"type": "string" | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										7
									
								
								backend/schema/components/user-list.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								backend/schema/components/user-list.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| { | ||||
| 	"type": "array", | ||||
| 	"description": "User list", | ||||
| 	"items": { | ||||
| 		"$ref": "./user-object.json" | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										61
									
								
								backend/schema/components/user-object.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								backend/schema/components/user-object.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,61 @@ | ||||
| { | ||||
| 	"type": "object", | ||||
| 	"description": "User object", | ||||
| 	"required": ["id", "created_on", "modified_on", "is_disabled", "email", "name", "nickname", "avatar", "roles"], | ||||
| 	"additionalProperties": false, | ||||
| 	"properties": { | ||||
| 		"id": { | ||||
| 			"type": "integer", | ||||
| 			"description": "User ID", | ||||
| 			"minimum": 1, | ||||
| 			"example": 1 | ||||
| 		}, | ||||
| 		"created_on": { | ||||
| 			"type": "string", | ||||
| 			"description": "Created Date", | ||||
| 			"example": "2020-01-30T09:36:08.000Z" | ||||
| 		}, | ||||
| 		"modified_on": { | ||||
| 			"type": "string", | ||||
| 			"description": "Modified Date", | ||||
| 			"example": "2020-01-30T09:41:04.000Z" | ||||
| 		}, | ||||
| 		"is_disabled": { | ||||
| 			"type": "integer", | ||||
| 			"minimum": 0, | ||||
| 			"maximum": 1, | ||||
| 			"description": "Is user Disabled (0 = false, 1 = true)", | ||||
| 			"example": 0 | ||||
| 		}, | ||||
| 		"email": { | ||||
| 			"type": "string", | ||||
| 			"description": "Email", | ||||
| 			"minLength": 3, | ||||
| 			"example": "jc@jc21.com" | ||||
| 		}, | ||||
| 		"name": { | ||||
| 			"type": "string", | ||||
| 			"description": "Name", | ||||
| 			"minLength": 1, | ||||
| 			"example": "Jamie Curnow" | ||||
| 		}, | ||||
| 		"nickname": { | ||||
| 			"type": "string", | ||||
| 			"description": "Nickname", | ||||
| 			"example": "James" | ||||
| 		}, | ||||
| 		"avatar": { | ||||
| 			"type": "string", | ||||
| 			"description": "Gravatar URL based on email, without scheme", | ||||
| 			"example": "//www.gravatar.com/avatar/6193176330f8d38747f038c170ddb193?default=mm" | ||||
| 		}, | ||||
| 		"roles": { | ||||
| 			"description": "Roles applied", | ||||
| 			"example": ["admin"], | ||||
| 			"type": "array", | ||||
| 			"items": { | ||||
| 				"type": "string" | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user