mirror of
				https://github.com/NginxProxyManager/nginx-proxy-manager.git
				synced 2025-10-31 15:53: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:
		
							
								
								
									
										128
									
								
								backend/schema/common.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										128
									
								
								backend/schema/common.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,128 @@ | ||||
| { | ||||
| 	"$schema": "http://json-schema.org/draft-07/schema#", | ||||
| 	"$id": "common", | ||||
| 	"definitions": { | ||||
| 		"id": { | ||||
| 			"description": "Unique identifier", | ||||
| 			"example": 123456, | ||||
| 			"readOnly": true, | ||||
| 			"type": "integer", | ||||
| 			"minimum": 1 | ||||
| 		}, | ||||
| 		"expand": { | ||||
| 			"anyOf": [ | ||||
| 				{ | ||||
| 					"type": "null" | ||||
| 				}, | ||||
| 				{ | ||||
| 					"type": "array", | ||||
| 					"minItems": 1, | ||||
| 					"items": { | ||||
| 						"type": "string" | ||||
| 					} | ||||
| 				} | ||||
| 			] | ||||
| 		}, | ||||
| 		"query": { | ||||
| 			"anyOf": [ | ||||
| 				{ | ||||
| 					"type": "null" | ||||
| 				}, | ||||
| 				{ | ||||
| 					"type": "string", | ||||
| 					"minLength": 1, | ||||
| 					"maxLength": 255 | ||||
| 				} | ||||
| 			] | ||||
| 		}, | ||||
| 		"created_on": { | ||||
| 			"description": "Date and time of creation", | ||||
| 			"format": "date-time", | ||||
| 			"readOnly": true, | ||||
| 			"type": "string" | ||||
| 		}, | ||||
| 		"modified_on": { | ||||
| 			"description": "Date and time of last update", | ||||
| 			"format": "date-time", | ||||
| 			"readOnly": true, | ||||
| 			"type": "string" | ||||
| 		}, | ||||
| 		"user_id": { | ||||
| 			"description": "User ID", | ||||
| 			"example": 1234, | ||||
| 			"type": "integer", | ||||
| 			"minimum": 1 | ||||
| 		}, | ||||
| 		"certificate_id": { | ||||
| 			"description": "Certificate ID", | ||||
| 			"example": 1234, | ||||
| 			"anyOf": [ | ||||
| 				{ | ||||
| 					"type": "integer", | ||||
| 					"minimum": 0 | ||||
| 				}, | ||||
| 				{ | ||||
| 					"type": "string", | ||||
| 					"pattern": "^new$" | ||||
| 				} | ||||
| 			] | ||||
| 		}, | ||||
| 		"access_list_id": { | ||||
| 			"description": "Access List ID", | ||||
| 			"example": 1234, | ||||
| 			"type": "integer", | ||||
| 			"minimum": 0 | ||||
| 		}, | ||||
| 		"domain_names": { | ||||
| 			"description": "Domain Names separated by a comma", | ||||
| 			"example": "*.jc21.com,blog.jc21.com", | ||||
| 			"type": "array", | ||||
| 			"minItems": 1, | ||||
| 			"maxItems": 100, | ||||
| 			"uniqueItems": true, | ||||
| 			"items": { | ||||
| 				"type": "string", | ||||
| 				"pattern": "^(?:\\*\\.)?(?:[^.*]+\\.?)+[^.]$" | ||||
| 			} | ||||
| 		}, | ||||
| 		"enabled": { | ||||
| 			"description": "Is Enabled", | ||||
| 			"example": true, | ||||
| 			"type": "boolean" | ||||
| 		}, | ||||
| 		"ssl_forced": { | ||||
| 			"description": "Is SSL Forced", | ||||
| 			"example": false, | ||||
| 			"type": "boolean" | ||||
| 		}, | ||||
| 		"hsts_enabled": { | ||||
| 			"description": "Is HSTS Enabled", | ||||
| 			"example": false, | ||||
| 			"type": "boolean" | ||||
| 		}, | ||||
| 		"hsts_subdomains": { | ||||
| 			"description": "Is HSTS applicable to all subdomains", | ||||
| 			"example": false, | ||||
| 			"type": "boolean" | ||||
| 		}, | ||||
| 		"ssl_provider": { | ||||
| 			"type": "string", | ||||
| 			"pattern": "^(letsencrypt|other)$" | ||||
| 		}, | ||||
| 		"http2_support": { | ||||
| 			"description": "HTTP2 Protocol Support", | ||||
| 			"example": false, | ||||
| 			"type": "boolean" | ||||
| 		}, | ||||
| 		"block_exploits": { | ||||
| 			"description": "Should we block common exploits", | ||||
| 			"example": true, | ||||
| 			"type": "boolean" | ||||
| 		}, | ||||
| 		"caching_enabled": { | ||||
| 			"description": "Should we cache assets", | ||||
| 			"example": true, | ||||
| 			"type": "boolean" | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										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" | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @@ -1,240 +0,0 @@ | ||||
| { | ||||
|   "$schema": "http://json-schema.org/draft-07/schema#", | ||||
|   "$id": "definitions", | ||||
|   "definitions": { | ||||
|     "id": { | ||||
|       "description": "Unique identifier", | ||||
|       "example": 123456, | ||||
|       "readOnly": true, | ||||
|       "type": "integer", | ||||
|       "minimum": 1 | ||||
|     }, | ||||
|     "setting_id": { | ||||
|       "description": "Unique identifier for a Setting", | ||||
|       "example": "default-site", | ||||
|       "readOnly": true, | ||||
|       "type": "string", | ||||
|       "minLength": 2 | ||||
|     }, | ||||
|     "token": { | ||||
|       "type": "string", | ||||
|       "minLength": 10 | ||||
|     }, | ||||
|     "expand": { | ||||
|       "anyOf": [ | ||||
|         { | ||||
|           "type": "null" | ||||
|         }, | ||||
|         { | ||||
|           "type": "array", | ||||
|           "minItems": 1, | ||||
|           "items": { | ||||
|             "type": "string" | ||||
|           } | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     "sort": { | ||||
|       "type": "array", | ||||
|       "minItems": 1, | ||||
|       "items": { | ||||
|         "type": "object", | ||||
|         "required": [ | ||||
|           "field", | ||||
|           "dir" | ||||
|         ], | ||||
|         "additionalProperties": false, | ||||
|         "properties": { | ||||
|           "field": { | ||||
|             "type": "string" | ||||
|           }, | ||||
|           "dir": { | ||||
|             "type": "string", | ||||
|             "pattern": "^(asc|desc)$" | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "query": { | ||||
|       "anyOf": [ | ||||
|         { | ||||
|           "type": "null" | ||||
|         }, | ||||
|         { | ||||
|           "type": "string", | ||||
|           "minLength": 1, | ||||
|           "maxLength": 255 | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     "criteria": { | ||||
|       "anyOf": [ | ||||
|         { | ||||
|           "type": "null" | ||||
|         }, | ||||
|         { | ||||
|           "type": "object" | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     "fields": { | ||||
|       "anyOf": [ | ||||
|         { | ||||
|           "type": "null" | ||||
|         }, | ||||
|         { | ||||
|           "type": "array", | ||||
|           "minItems": 1, | ||||
|           "items": { | ||||
|             "type": "string" | ||||
|           } | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     "omit": { | ||||
|       "anyOf": [ | ||||
|         { | ||||
|           "type": "null" | ||||
|         }, | ||||
|         { | ||||
|           "type": "array", | ||||
|           "minItems": 1, | ||||
|           "items": { | ||||
|             "type": "string" | ||||
|           } | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     "created_on": { | ||||
|       "description": "Date and time of creation", | ||||
|       "format": "date-time", | ||||
|       "readOnly": true, | ||||
|       "type": "string" | ||||
|     }, | ||||
|     "modified_on": { | ||||
|       "description": "Date and time of last update", | ||||
|       "format": "date-time", | ||||
|       "readOnly": true, | ||||
|       "type": "string" | ||||
|     }, | ||||
|     "user_id": { | ||||
|       "description": "User ID", | ||||
|       "example": 1234, | ||||
|       "type": "integer", | ||||
|       "minimum": 1 | ||||
|     }, | ||||
|     "certificate_id": { | ||||
|       "description": "Certificate ID", | ||||
|       "example": 1234, | ||||
|       "anyOf": [ | ||||
|         { | ||||
|           "type": "integer", | ||||
|           "minimum": 0 | ||||
|         }, | ||||
|         { | ||||
|           "type": "string", | ||||
|           "pattern": "^new$" | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     "access_list_id": { | ||||
|       "description": "Access List ID", | ||||
|       "example": 1234, | ||||
|       "type": "integer", | ||||
|       "minimum": 0 | ||||
|     }, | ||||
|     "name": { | ||||
|       "type": "string", | ||||
|       "minLength": 1, | ||||
|       "maxLength": 255 | ||||
|     }, | ||||
|     "email": { | ||||
|       "description": "Email Address", | ||||
|       "example": "john@example.com", | ||||
|       "format": "email", | ||||
|       "type": "string", | ||||
|       "minLength": 6, | ||||
|       "maxLength": 100 | ||||
|     }, | ||||
|     "password": { | ||||
|       "description": "Password", | ||||
|       "type": "string", | ||||
|       "minLength": 8, | ||||
|       "maxLength": 255 | ||||
|     }, | ||||
|     "domain_name": { | ||||
|       "description": "Domain Name", | ||||
|       "example": "jc21.com", | ||||
|       "type": "string", | ||||
|       "pattern": "^(?:[^.*]+\\.?)+[^.]$" | ||||
|     }, | ||||
|     "domain_names": { | ||||
|       "description": "Domain Names separated by a comma", | ||||
|       "example": "*.jc21.com,blog.jc21.com", | ||||
|       "type": "array", | ||||
|       "maxItems": 100, | ||||
|       "uniqueItems": true, | ||||
|       "items": { | ||||
|         "type": "string", | ||||
|         "pattern": "^(?:\\*\\.)?(?:[^.*]+\\.?)+[^.]$" | ||||
|       } | ||||
|     }, | ||||
|     "http_code": { | ||||
|       "description": "Redirect HTTP Status Code", | ||||
|       "example": 302, | ||||
|       "type": "integer", | ||||
|       "minimum": 300, | ||||
|       "maximum": 308 | ||||
|     }, | ||||
|     "scheme": { | ||||
|       "description": "RFC Protocol", | ||||
|       "example": "HTTPS or $scheme", | ||||
|       "type": "string", | ||||
|       "minLength": 4 | ||||
|     }, | ||||
|     "enabled": { | ||||
|       "description": "Is Enabled", | ||||
|       "example": true, | ||||
|       "type": "boolean" | ||||
|     }, | ||||
|     "ssl_enabled": { | ||||
|       "description": "Is SSL Enabled", | ||||
|       "example": true, | ||||
|       "type": "boolean" | ||||
|     }, | ||||
|     "ssl_forced": { | ||||
|       "description": "Is SSL Forced", | ||||
|       "example": false, | ||||
|       "type": "boolean" | ||||
|     }, | ||||
|     "hsts_enabled": { | ||||
|       "description": "Is HSTS Enabled", | ||||
|       "example": false, | ||||
|       "type": "boolean" | ||||
|     }, | ||||
|     "hsts_subdomains": { | ||||
|       "description": "Is HSTS applicable to all subdomains", | ||||
|       "example": false, | ||||
|       "type": "boolean" | ||||
|     }, | ||||
|     "ssl_provider": { | ||||
|       "type": "string", | ||||
|       "pattern": "^(letsencrypt|other)$" | ||||
|     }, | ||||
|     "http2_support": { | ||||
|       "description": "HTTP2 Protocol Support", | ||||
|       "example": false, | ||||
|       "type": "boolean" | ||||
|     }, | ||||
|     "block_exploits": { | ||||
|       "description": "Should we block common exploits", | ||||
|       "example": true, | ||||
|       "type": "boolean" | ||||
|     }, | ||||
|     "caching_enabled": { | ||||
|       "description": "Should we cache assets", | ||||
|       "example": true, | ||||
|       "type": "boolean" | ||||
|     } | ||||
|   } | ||||
| } | ||||
| @@ -1,236 +0,0 @@ | ||||
| { | ||||
| 	"$schema": "http://json-schema.org/draft-07/schema#", | ||||
| 	"$id": "endpoints/access-lists", | ||||
| 	"title": "Access Lists", | ||||
| 	"description": "Endpoints relating to Access Lists", | ||||
| 	"stability": "stable", | ||||
| 	"type": "object", | ||||
| 	"definitions": { | ||||
| 		"id": { | ||||
| 			"$ref": "../definitions.json#/definitions/id" | ||||
| 		}, | ||||
| 		"created_on": { | ||||
| 			"$ref": "../definitions.json#/definitions/created_on" | ||||
| 		}, | ||||
| 		"modified_on": { | ||||
| 			"$ref": "../definitions.json#/definitions/modified_on" | ||||
| 		}, | ||||
| 		"name": { | ||||
| 			"type": "string", | ||||
| 			"description": "Name of the Access List" | ||||
| 		}, | ||||
| 		"directive": { | ||||
| 			"type": "string", | ||||
| 			"enum": ["allow", "deny"] | ||||
| 		}, | ||||
| 		"address": { | ||||
| 			"oneOf": [ | ||||
| 				{ | ||||
| 					"type": "string", | ||||
| 					"pattern": "^([0-9]{1,3}\\.){3}[0-9]{1,3}(/([0-9]|[1-2][0-9]|3[0-2]))?$" | ||||
| 				}, | ||||
| 				{ | ||||
| 					"type": "string", | ||||
| 					"pattern": "^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8]))?$" | ||||
| 				}, | ||||
| 				{ | ||||
| 					"type": "string", | ||||
| 					"pattern": "^all$" | ||||
| 				} | ||||
| 			] | ||||
| 		}, | ||||
| 		"satisfy_any": { | ||||
| 			"type": "boolean" | ||||
| 		}, | ||||
| 		"pass_auth": { | ||||
| 			"type": "boolean" | ||||
| 		}, | ||||
| 		"meta": { | ||||
| 			"type": "object" | ||||
| 		} | ||||
| 	}, | ||||
| 	"properties": { | ||||
| 		"id": { | ||||
| 			"$ref": "#/definitions/id" | ||||
| 		}, | ||||
| 		"created_on": { | ||||
| 			"$ref": "#/definitions/created_on" | ||||
| 		}, | ||||
| 		"modified_on": { | ||||
| 			"$ref": "#/definitions/modified_on" | ||||
| 		}, | ||||
| 		"name": { | ||||
| 			"$ref": "#/definitions/name" | ||||
| 		}, | ||||
| 		"meta": { | ||||
| 			"$ref": "#/definitions/meta" | ||||
| 		} | ||||
| 	}, | ||||
| 	"links": [ | ||||
| 		{ | ||||
| 			"title": "List", | ||||
| 			"description": "Returns a list of Access Lists", | ||||
| 			"href": "/nginx/access-lists", | ||||
| 			"access": "private", | ||||
| 			"method": "GET", | ||||
| 			"rel": "self", | ||||
| 			"http_header": { | ||||
| 				"$ref": "../examples.json#/definitions/auth_header" | ||||
| 			}, | ||||
| 			"targetSchema": { | ||||
| 				"type": "array", | ||||
| 				"items": { | ||||
| 					"$ref": "#/properties" | ||||
| 				} | ||||
| 			} | ||||
| 		}, | ||||
| 		{ | ||||
| 			"title": "Create", | ||||
| 			"description": "Creates a new Access List", | ||||
| 			"href": "/nginx/access-list", | ||||
| 			"access": "private", | ||||
| 			"method": "POST", | ||||
| 			"rel": "create", | ||||
| 			"http_header": { | ||||
| 				"$ref": "../examples.json#/definitions/auth_header" | ||||
| 			}, | ||||
| 			"schema": { | ||||
| 				"type": "object", | ||||
| 				"additionalProperties": false, | ||||
| 				"required": ["name"], | ||||
| 				"properties": { | ||||
| 					"name": { | ||||
| 						"$ref": "#/definitions/name" | ||||
| 					}, | ||||
| 					"satisfy_any": { | ||||
| 						"$ref": "#/definitions/satisfy_any" | ||||
| 					}, | ||||
| 					"pass_auth": { | ||||
| 						"$ref": "#/definitions/pass_auth" | ||||
| 					}, | ||||
| 					"items": { | ||||
| 						"type": "array", | ||||
| 						"minItems": 0, | ||||
| 						"items": { | ||||
| 							"type": "object", | ||||
| 							"additionalProperties": false, | ||||
| 							"properties": { | ||||
| 								"username": { | ||||
| 									"type": "string", | ||||
| 									"minLength": 1 | ||||
| 								}, | ||||
| 								"password": { | ||||
| 									"type": "string", | ||||
| 									"minLength": 1 | ||||
| 								} | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"clients": { | ||||
| 						"type": "array", | ||||
| 						"minItems": 0, | ||||
| 						"items": { | ||||
| 							"type": "object", | ||||
| 							"additionalProperties": false, | ||||
| 							"properties": { | ||||
| 								"address": { | ||||
| 									"$ref": "#/definitions/address" | ||||
| 								}, | ||||
| 								"directive": { | ||||
| 									"$ref": "#/definitions/directive" | ||||
| 								} | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"meta": { | ||||
| 						"$ref": "#/definitions/meta" | ||||
| 					} | ||||
| 				} | ||||
| 			}, | ||||
| 			"targetSchema": { | ||||
| 				"properties": { | ||||
| 					"$ref": "#/properties" | ||||
| 				} | ||||
| 			} | ||||
| 		}, | ||||
| 		{ | ||||
| 			"title": "Update", | ||||
| 			"description": "Updates a existing Access List", | ||||
| 			"href": "/nginx/access-list/{definitions.identity.example}", | ||||
| 			"access": "private", | ||||
| 			"method": "PUT", | ||||
| 			"rel": "update", | ||||
| 			"http_header": { | ||||
| 				"$ref": "../examples.json#/definitions/auth_header" | ||||
| 			}, | ||||
| 			"schema": { | ||||
| 				"type": "object", | ||||
| 				"additionalProperties": false, | ||||
| 				"properties": { | ||||
| 					"name": { | ||||
| 						"$ref": "#/definitions/name" | ||||
| 					}, | ||||
| 					"satisfy_any": { | ||||
| 						"$ref": "#/definitions/satisfy_any" | ||||
| 					}, | ||||
| 					"pass_auth": { | ||||
| 						"$ref": "#/definitions/pass_auth" | ||||
| 					}, | ||||
| 					"items": { | ||||
| 						"type": "array", | ||||
| 						"minItems": 0, | ||||
| 						"items": { | ||||
| 							"type": "object", | ||||
| 							"additionalProperties": false, | ||||
| 							"properties": { | ||||
| 								"username": { | ||||
| 									"type": "string", | ||||
| 									"minLength": 1 | ||||
| 								}, | ||||
| 								"password": { | ||||
| 									"type": "string", | ||||
| 									"minLength": 0 | ||||
| 								} | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"clients": { | ||||
| 						"type": "array", | ||||
| 						"minItems": 0, | ||||
| 						"items": { | ||||
| 							"type": "object", | ||||
| 							"additionalProperties": false, | ||||
| 							"properties": { | ||||
| 								"address": { | ||||
| 									"$ref": "#/definitions/address" | ||||
| 								}, | ||||
| 								"directive": { | ||||
| 									"$ref": "#/definitions/directive" | ||||
| 								} | ||||
| 							} | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			}, | ||||
| 			"targetSchema": { | ||||
| 				"properties": { | ||||
| 					"$ref": "#/properties" | ||||
| 				} | ||||
| 			} | ||||
| 		}, | ||||
| 		{ | ||||
| 			"title": "Delete", | ||||
| 			"description": "Deletes a existing Access List", | ||||
| 			"href": "/nginx/access-list/{definitions.identity.example}", | ||||
| 			"access": "private", | ||||
| 			"method": "DELETE", | ||||
| 			"rel": "delete", | ||||
| 			"http_header": { | ||||
| 				"$ref": "../examples.json#/definitions/auth_header" | ||||
| 			}, | ||||
| 			"targetSchema": { | ||||
| 				"type": "boolean" | ||||
| 			} | ||||
| 		} | ||||
| 	] | ||||
| } | ||||
| @@ -1,173 +0,0 @@ | ||||
| { | ||||
|   "$schema": "http://json-schema.org/draft-07/schema#", | ||||
|   "$id": "endpoints/certificates", | ||||
|   "title": "Certificates", | ||||
|   "description": "Endpoints relating to Certificates", | ||||
|   "stability": "stable", | ||||
|   "type": "object", | ||||
|   "definitions": { | ||||
|     "id": { | ||||
|       "$ref": "../definitions.json#/definitions/id" | ||||
|     }, | ||||
|     "created_on": { | ||||
|       "$ref": "../definitions.json#/definitions/created_on" | ||||
|     }, | ||||
|     "modified_on": { | ||||
|       "$ref": "../definitions.json#/definitions/modified_on" | ||||
|     }, | ||||
|     "provider": { | ||||
|       "$ref": "../definitions.json#/definitions/ssl_provider" | ||||
|     }, | ||||
|     "nice_name": { | ||||
|       "type": "string", | ||||
|       "description": "Nice Name for the custom certificate" | ||||
|     }, | ||||
|     "domain_names": { | ||||
|       "$ref": "../definitions.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  | ||||
|             } | ||||
|           ] | ||||
|            | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   "properties": { | ||||
|     "id": { | ||||
|       "$ref": "#/definitions/id" | ||||
|     }, | ||||
|     "created_on": { | ||||
|       "$ref": "#/definitions/created_on" | ||||
|     }, | ||||
|     "modified_on": { | ||||
|       "$ref": "#/definitions/modified_on" | ||||
|     }, | ||||
|     "provider": { | ||||
|       "$ref": "#/definitions/provider" | ||||
|     }, | ||||
|     "nice_name": { | ||||
|       "$ref": "#/definitions/nice_name" | ||||
|     }, | ||||
|     "domain_names": { | ||||
|       "$ref": "#/definitions/domain_names" | ||||
|     }, | ||||
|     "expires_on": { | ||||
|       "$ref": "#/definitions/expires_on" | ||||
|     }, | ||||
|     "meta": { | ||||
|       "$ref": "#/definitions/meta" | ||||
|     } | ||||
|   }, | ||||
|   "links": [ | ||||
|     { | ||||
|       "title": "List", | ||||
|       "description": "Returns a list of Certificates", | ||||
|       "href": "/nginx/certificates", | ||||
|       "access": "private", | ||||
|       "method": "GET", | ||||
|       "rel": "self", | ||||
|       "http_header": { | ||||
|         "$ref": "../examples.json#/definitions/auth_header" | ||||
|       }, | ||||
|       "targetSchema": { | ||||
|         "type": "array", | ||||
|         "items": { | ||||
|           "$ref": "#/properties" | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "title": "Create", | ||||
|       "description": "Creates a new Certificate", | ||||
|       "href": "/nginx/certificates", | ||||
|       "access": "private", | ||||
|       "method": "POST", | ||||
|       "rel": "create", | ||||
|       "http_header": { | ||||
|         "$ref": "../examples.json#/definitions/auth_header" | ||||
|       }, | ||||
|       "schema": { | ||||
|         "type": "object", | ||||
|         "additionalProperties": false, | ||||
|         "required": [ | ||||
|           "provider" | ||||
|         ], | ||||
|         "properties": { | ||||
|           "provider": { | ||||
|             "$ref": "#/definitions/provider" | ||||
|           }, | ||||
|           "nice_name": { | ||||
|             "$ref": "#/definitions/nice_name" | ||||
|           }, | ||||
|           "domain_names": { | ||||
|             "$ref": "#/definitions/domain_names" | ||||
|           }, | ||||
|           "meta": { | ||||
|             "$ref": "#/definitions/meta" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "targetSchema": { | ||||
|         "properties": { | ||||
|           "$ref": "#/properties" | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "title": "Delete", | ||||
|       "description": "Deletes a existing Certificate", | ||||
|       "href": "/nginx/certificates/{definitions.identity.example}", | ||||
|       "access": "private", | ||||
|       "method": "DELETE", | ||||
|       "rel": "delete", | ||||
|       "http_header": { | ||||
|         "$ref": "../examples.json#/definitions/auth_header" | ||||
|       }, | ||||
|       "targetSchema": { | ||||
|         "type": "boolean" | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "title": "Test HTTP Challenge", | ||||
|       "description": "Tests whether the HTTP challenge should work", | ||||
|       "href": "/nginx/certificates/{definitions.identity.example}/test-http", | ||||
|       "access": "private", | ||||
|       "method": "GET", | ||||
|       "rel": "info", | ||||
|       "http_header": { | ||||
|         "$ref": "../examples.json#/definitions/auth_header" | ||||
|       } | ||||
|     } | ||||
|   ] | ||||
| } | ||||
| @@ -1,240 +0,0 @@ | ||||
| { | ||||
|   "$schema": "http://json-schema.org/draft-07/schema#", | ||||
|   "$id": "endpoints/dead-hosts", | ||||
|   "title": "404 Hosts", | ||||
|   "description": "Endpoints relating to 404 Hosts", | ||||
|   "stability": "stable", | ||||
|   "type": "object", | ||||
|   "definitions": { | ||||
|     "id": { | ||||
|       "$ref": "../definitions.json#/definitions/id" | ||||
|     }, | ||||
|     "created_on": { | ||||
|       "$ref": "../definitions.json#/definitions/created_on" | ||||
|     }, | ||||
|     "modified_on": { | ||||
|       "$ref": "../definitions.json#/definitions/modified_on" | ||||
|     }, | ||||
|     "domain_names": { | ||||
|       "$ref": "../definitions.json#/definitions/domain_names" | ||||
|     }, | ||||
|     "certificate_id": { | ||||
|       "$ref": "../definitions.json#/definitions/certificate_id" | ||||
|     }, | ||||
|     "ssl_forced": { | ||||
|       "$ref": "../definitions.json#/definitions/ssl_forced" | ||||
|     }, | ||||
|     "hsts_enabled": { | ||||
|       "$ref": "../definitions.json#/definitions/hsts_enabled" | ||||
|     }, | ||||
|     "hsts_subdomains": { | ||||
|       "$ref": "../definitions.json#/definitions/hsts_subdomains" | ||||
|     }, | ||||
|     "http2_support": { | ||||
|       "$ref": "../definitions.json#/definitions/http2_support" | ||||
|     }, | ||||
|     "advanced_config": { | ||||
|       "type": "string" | ||||
|     }, | ||||
|     "enabled": { | ||||
|       "$ref": "../definitions.json#/definitions/enabled" | ||||
|     }, | ||||
|     "meta": { | ||||
|       "type": "object" | ||||
|     } | ||||
|   }, | ||||
|   "properties": { | ||||
|     "id": { | ||||
|       "$ref": "#/definitions/id" | ||||
|     }, | ||||
|     "created_on": { | ||||
|       "$ref": "#/definitions/created_on" | ||||
|     }, | ||||
|     "modified_on": { | ||||
|       "$ref": "#/definitions/modified_on" | ||||
|     }, | ||||
|     "domain_names": { | ||||
|       "$ref": "#/definitions/domain_names" | ||||
|     }, | ||||
|     "certificate_id": { | ||||
|       "$ref": "#/definitions/certificate_id" | ||||
|     }, | ||||
|     "ssl_forced": { | ||||
|       "$ref": "#/definitions/ssl_forced" | ||||
|     }, | ||||
|     "hsts_enabled": { | ||||
|       "$ref": "#/definitions/hsts_enabled" | ||||
|     }, | ||||
|     "hsts_subdomains": { | ||||
|       "$ref": "#/definitions/hsts_subdomains" | ||||
|     }, | ||||
|     "http2_support": { | ||||
|       "$ref": "#/definitions/http2_support" | ||||
|     }, | ||||
|     "advanced_config": { | ||||
|       "$ref": "#/definitions/advanced_config" | ||||
|     }, | ||||
|     "enabled": { | ||||
|       "$ref": "#/definitions/enabled" | ||||
|     }, | ||||
|     "meta": { | ||||
|       "$ref": "#/definitions/meta" | ||||
|     } | ||||
|   }, | ||||
|   "links": [ | ||||
|     { | ||||
|       "title": "List", | ||||
|       "description": "Returns a list of 404 Hosts", | ||||
|       "href": "/nginx/dead-hosts", | ||||
|       "access": "private", | ||||
|       "method": "GET", | ||||
|       "rel": "self", | ||||
|       "http_header": { | ||||
|         "$ref": "../examples.json#/definitions/auth_header" | ||||
|       }, | ||||
|       "targetSchema": { | ||||
|         "type": "array", | ||||
|         "items": { | ||||
|           "$ref": "#/properties" | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "title": "Create", | ||||
|       "description": "Creates a new 404 Host", | ||||
|       "href": "/nginx/dead-hosts", | ||||
|       "access": "private", | ||||
|       "method": "POST", | ||||
|       "rel": "create", | ||||
|       "http_header": { | ||||
|         "$ref": "../examples.json#/definitions/auth_header" | ||||
|       }, | ||||
|       "schema": { | ||||
|         "type": "object", | ||||
|         "additionalProperties": false, | ||||
|         "required": [ | ||||
|           "domain_names" | ||||
|         ], | ||||
|         "properties": { | ||||
|           "domain_names": { | ||||
|             "$ref": "#/definitions/domain_names" | ||||
|           }, | ||||
|           "certificate_id": { | ||||
|             "$ref": "#/definitions/certificate_id" | ||||
|           }, | ||||
|           "ssl_forced": { | ||||
|             "$ref": "#/definitions/ssl_forced" | ||||
|           }, | ||||
|           "hsts_enabled": { | ||||
|             "$ref": "#/definitions/hsts_enabled" | ||||
|           }, | ||||
|           "hsts_subdomains": { | ||||
|             "$ref": "#/definitions/hsts_enabled" | ||||
|           }, | ||||
|           "http2_support": { | ||||
|             "$ref": "#/definitions/http2_support" | ||||
|           }, | ||||
|           "advanced_config": { | ||||
|             "$ref": "#/definitions/advanced_config" | ||||
|           }, | ||||
|           "meta": { | ||||
|             "$ref": "#/definitions/meta" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "targetSchema": { | ||||
|         "properties": { | ||||
|           "$ref": "#/properties" | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "title": "Update", | ||||
|       "description": "Updates a existing 404 Host", | ||||
|       "href": "/nginx/dead-hosts/{definitions.identity.example}", | ||||
|       "access": "private", | ||||
|       "method": "PUT", | ||||
|       "rel": "update", | ||||
|       "http_header": { | ||||
|         "$ref": "../examples.json#/definitions/auth_header" | ||||
|       }, | ||||
|       "schema": { | ||||
|         "type": "object", | ||||
|         "additionalProperties": false, | ||||
|         "properties": { | ||||
|           "domain_names": { | ||||
|             "$ref": "#/definitions/domain_names" | ||||
|           }, | ||||
|           "certificate_id": { | ||||
|             "$ref": "#/definitions/certificate_id" | ||||
|           }, | ||||
|           "ssl_forced": { | ||||
|             "$ref": "#/definitions/ssl_forced" | ||||
|           }, | ||||
|           "hsts_enabled": { | ||||
|             "$ref": "#/definitions/hsts_enabled" | ||||
|           }, | ||||
|           "hsts_subdomains": { | ||||
|             "$ref": "#/definitions/hsts_enabled" | ||||
|           }, | ||||
|           "http2_support": { | ||||
|             "$ref": "#/definitions/http2_support" | ||||
|           }, | ||||
|           "advanced_config": { | ||||
|             "$ref": "#/definitions/advanced_config" | ||||
|           }, | ||||
|           "meta": { | ||||
|             "$ref": "#/definitions/meta" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "targetSchema": { | ||||
|         "properties": { | ||||
|           "$ref": "#/properties" | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "title": "Delete", | ||||
|       "description": "Deletes a existing 404 Host", | ||||
|       "href": "/nginx/dead-hosts/{definitions.identity.example}", | ||||
|       "access": "private", | ||||
|       "method": "DELETE", | ||||
|       "rel": "delete", | ||||
|       "http_header": { | ||||
|         "$ref": "../examples.json#/definitions/auth_header" | ||||
|       }, | ||||
|       "targetSchema": { | ||||
|         "type": "boolean" | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "title": "Enable", | ||||
|       "description": "Enables a existing 404 Host", | ||||
|       "href": "/nginx/dead-hosts/{definitions.identity.example}/enable", | ||||
|       "access": "private", | ||||
|       "method": "POST", | ||||
|       "rel": "update", | ||||
|       "http_header": { | ||||
|         "$ref": "../examples.json#/definitions/auth_header" | ||||
|       }, | ||||
|       "targetSchema": { | ||||
|         "type": "boolean" | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "title": "Disable", | ||||
|       "description": "Disables a existing 404 Host", | ||||
|       "href": "/nginx/dead-hosts/{definitions.identity.example}/disable", | ||||
|       "access": "private", | ||||
|       "method": "POST", | ||||
|       "rel": "update", | ||||
|       "http_header": { | ||||
|         "$ref": "../examples.json#/definitions/auth_header" | ||||
|       }, | ||||
|       "targetSchema": { | ||||
|         "type": "boolean" | ||||
|       } | ||||
|     } | ||||
|   ] | ||||
| } | ||||
| @@ -1,387 +0,0 @@ | ||||
| { | ||||
|   "$schema": "http://json-schema.org/draft-07/schema#", | ||||
|   "$id": "endpoints/proxy-hosts", | ||||
|   "title": "Proxy Hosts", | ||||
|   "description": "Endpoints relating to Proxy Hosts", | ||||
|   "stability": "stable", | ||||
|   "type": "object", | ||||
|   "definitions": { | ||||
|     "id": { | ||||
|       "$ref": "../definitions.json#/definitions/id" | ||||
|     }, | ||||
|     "created_on": { | ||||
|       "$ref": "../definitions.json#/definitions/created_on" | ||||
|     }, | ||||
|     "modified_on": { | ||||
|       "$ref": "../definitions.json#/definitions/modified_on" | ||||
|     }, | ||||
|     "domain_names": { | ||||
|       "$ref": "../definitions.json#/definitions/domain_names" | ||||
|     }, | ||||
|     "forward_scheme": { | ||||
|       "type": "string", | ||||
|       "enum": ["http", "https"] | ||||
|     }, | ||||
|     "forward_host": { | ||||
|       "type": "string", | ||||
|       "minLength": 1, | ||||
|       "maxLength": 255 | ||||
|     }, | ||||
|     "forward_port": { | ||||
|       "type": "integer", | ||||
|       "minimum": 1, | ||||
|       "maximum": 65535 | ||||
|     }, | ||||
|     "certificate_id": { | ||||
|       "$ref": "../definitions.json#/definitions/certificate_id" | ||||
|     }, | ||||
|     "ssl_forced": { | ||||
|       "$ref": "../definitions.json#/definitions/ssl_forced" | ||||
|     }, | ||||
|     "hsts_enabled": { | ||||
|       "$ref": "../definitions.json#/definitions/hsts_enabled" | ||||
|     }, | ||||
|     "hsts_subdomains": { | ||||
|       "$ref": "../definitions.json#/definitions/hsts_subdomains" | ||||
|     }, | ||||
|     "http2_support": { | ||||
|       "$ref": "../definitions.json#/definitions/http2_support" | ||||
|     }, | ||||
|     "block_exploits": { | ||||
|       "$ref": "../definitions.json#/definitions/block_exploits" | ||||
|     }, | ||||
|     "caching_enabled": { | ||||
|       "$ref": "../definitions.json#/definitions/caching_enabled" | ||||
|     }, | ||||
|     "allow_websocket_upgrade": { | ||||
|       "description": "Allow Websocket Upgrade for all paths", | ||||
|       "example": true, | ||||
|       "type": "boolean" | ||||
|     }, | ||||
|     "access_list_id": { | ||||
|       "$ref": "../definitions.json#/definitions/access_list_id" | ||||
|     }, | ||||
|     "advanced_config": { | ||||
|       "type": "string" | ||||
|     }, | ||||
|     "enabled": { | ||||
|       "$ref": "../definitions.json#/definitions/enabled" | ||||
|     }, | ||||
|     "meta": { | ||||
|       "type": "object" | ||||
|     }, | ||||
|     "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": "#/definitions/forward_scheme" | ||||
|           }, | ||||
|           "forward_host": { | ||||
|             "$ref": "#/definitions/forward_host" | ||||
|           }, | ||||
|           "forward_port": { | ||||
|             "$ref": "#/definitions/forward_port" | ||||
|           }, | ||||
|           "forward_path": { | ||||
|             "type": "string" | ||||
|           }, | ||||
|           "advanced_config": { | ||||
|             "type": "string" | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   "properties": { | ||||
|     "id": { | ||||
|       "$ref": "#/definitions/id" | ||||
|     }, | ||||
|     "created_on": { | ||||
|       "$ref": "#/definitions/created_on" | ||||
|     }, | ||||
|     "modified_on": { | ||||
|       "$ref": "#/definitions/modified_on" | ||||
|     }, | ||||
|     "domain_names": { | ||||
|       "$ref": "#/definitions/domain_names" | ||||
|     }, | ||||
|     "forward_scheme": { | ||||
|       "$ref": "#/definitions/forward_scheme" | ||||
|     }, | ||||
|     "forward_host": { | ||||
|       "$ref": "#/definitions/forward_host" | ||||
|     }, | ||||
|     "forward_port": { | ||||
|       "$ref": "#/definitions/forward_port" | ||||
|     }, | ||||
|     "certificate_id": { | ||||
|       "$ref": "#/definitions/certificate_id" | ||||
|     }, | ||||
|     "ssl_forced": { | ||||
|       "$ref": "#/definitions/ssl_forced" | ||||
|     }, | ||||
|     "hsts_enabled": { | ||||
|       "$ref": "#/definitions/hsts_enabled" | ||||
|     }, | ||||
|     "hsts_subdomains": { | ||||
|       "$ref": "#/definitions/hsts_subdomains" | ||||
|     }, | ||||
|     "http2_support": { | ||||
|       "$ref": "#/definitions/http2_support" | ||||
|     }, | ||||
|     "block_exploits": { | ||||
|       "$ref": "#/definitions/block_exploits" | ||||
|     }, | ||||
|     "caching_enabled": { | ||||
|       "$ref": "#/definitions/caching_enabled" | ||||
|     }, | ||||
|     "allow_websocket_upgrade": { | ||||
|       "$ref": "#/definitions/allow_websocket_upgrade" | ||||
|     }, | ||||
|     "access_list_id": { | ||||
|       "$ref": "#/definitions/access_list_id" | ||||
|     }, | ||||
|     "advanced_config": { | ||||
|       "$ref": "#/definitions/advanced_config" | ||||
|     }, | ||||
|     "enabled": { | ||||
|       "$ref": "#/definitions/enabled" | ||||
|     }, | ||||
|     "meta": { | ||||
|       "$ref": "#/definitions/meta" | ||||
|     }, | ||||
|     "locations": { | ||||
|       "$ref": "#/definitions/locations" | ||||
|     } | ||||
|   }, | ||||
|   "links": [ | ||||
|     { | ||||
|       "title": "List", | ||||
|       "description": "Returns a list of Proxy Hosts", | ||||
|       "href": "/nginx/proxy-hosts", | ||||
|       "access": "private", | ||||
|       "method": "GET", | ||||
|       "rel": "self", | ||||
|       "http_header": { | ||||
|         "$ref": "../examples.json#/definitions/auth_header" | ||||
|       }, | ||||
|       "targetSchema": { | ||||
|         "type": "array", | ||||
|         "items": { | ||||
|           "$ref": "#/properties" | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "title": "Create", | ||||
|       "description": "Creates a new Proxy Host", | ||||
|       "href": "/nginx/proxy-hosts", | ||||
|       "access": "private", | ||||
|       "method": "POST", | ||||
|       "rel": "create", | ||||
|       "http_header": { | ||||
|         "$ref": "../examples.json#/definitions/auth_header" | ||||
|       }, | ||||
|       "schema": { | ||||
|         "type": "object", | ||||
|         "additionalProperties": false, | ||||
|         "required": [ | ||||
|           "domain_names", | ||||
|           "forward_scheme", | ||||
|           "forward_host", | ||||
|           "forward_port" | ||||
|         ], | ||||
|         "properties": { | ||||
|           "domain_names": { | ||||
|             "$ref": "#/definitions/domain_names" | ||||
|           }, | ||||
|           "forward_scheme": { | ||||
|             "$ref": "#/definitions/forward_scheme" | ||||
|           }, | ||||
|           "forward_host": { | ||||
|             "$ref": "#/definitions/forward_host" | ||||
|           }, | ||||
|           "forward_port": { | ||||
|             "$ref": "#/definitions/forward_port" | ||||
|           }, | ||||
|           "certificate_id": { | ||||
|             "$ref": "#/definitions/certificate_id" | ||||
|           }, | ||||
|           "ssl_forced": { | ||||
|             "$ref": "#/definitions/ssl_forced" | ||||
|           }, | ||||
|           "hsts_enabled": { | ||||
|             "$ref": "#/definitions/hsts_enabled" | ||||
|           }, | ||||
|           "hsts_subdomains": { | ||||
|             "$ref": "#/definitions/hsts_enabled" | ||||
|           }, | ||||
|           "http2_support": { | ||||
|             "$ref": "#/definitions/http2_support" | ||||
|           }, | ||||
|           "block_exploits": { | ||||
|             "$ref": "#/definitions/block_exploits" | ||||
|           }, | ||||
|           "caching_enabled": { | ||||
|             "$ref": "#/definitions/caching_enabled" | ||||
|           }, | ||||
|           "allow_websocket_upgrade": { | ||||
|             "$ref": "#/definitions/allow_websocket_upgrade" | ||||
|           }, | ||||
|           "access_list_id": { | ||||
|             "$ref": "#/definitions/access_list_id" | ||||
|           }, | ||||
|           "advanced_config": { | ||||
|             "$ref": "#/definitions/advanced_config" | ||||
|           }, | ||||
|           "enabled": { | ||||
|             "$ref": "#/definitions/enabled" | ||||
|           }, | ||||
|           "meta": { | ||||
|             "$ref": "#/definitions/meta" | ||||
|           }, | ||||
|           "locations": { | ||||
|             "$ref": "#/definitions/locations" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "targetSchema": { | ||||
|         "properties": { | ||||
|           "$ref": "#/properties" | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "title": "Update", | ||||
|       "description": "Updates a existing Proxy Host", | ||||
|       "href": "/nginx/proxy-hosts/{definitions.identity.example}", | ||||
|       "access": "private", | ||||
|       "method": "PUT", | ||||
|       "rel": "update", | ||||
|       "http_header": { | ||||
|         "$ref": "../examples.json#/definitions/auth_header" | ||||
|       }, | ||||
|       "schema": { | ||||
|         "type": "object", | ||||
|         "additionalProperties": false, | ||||
|         "properties": { | ||||
|           "domain_names": { | ||||
|             "$ref": "#/definitions/domain_names" | ||||
|           }, | ||||
|           "forward_scheme": { | ||||
|             "$ref": "#/definitions/forward_scheme" | ||||
|           }, | ||||
|           "forward_host": { | ||||
|             "$ref": "#/definitions/forward_host" | ||||
|           }, | ||||
|           "forward_port": { | ||||
|             "$ref": "#/definitions/forward_port" | ||||
|           }, | ||||
|           "certificate_id": { | ||||
|             "$ref": "#/definitions/certificate_id" | ||||
|           }, | ||||
|           "ssl_forced": { | ||||
|             "$ref": "#/definitions/ssl_forced" | ||||
|           }, | ||||
|           "hsts_enabled": { | ||||
|             "$ref": "#/definitions/hsts_enabled" | ||||
|           }, | ||||
|           "hsts_subdomains": { | ||||
|             "$ref": "#/definitions/hsts_enabled" | ||||
|           }, | ||||
|           "http2_support": { | ||||
|             "$ref": "#/definitions/http2_support" | ||||
|           }, | ||||
|           "block_exploits": { | ||||
|             "$ref": "#/definitions/block_exploits" | ||||
|           }, | ||||
|           "caching_enabled": { | ||||
|             "$ref": "#/definitions/caching_enabled" | ||||
|           }, | ||||
|           "allow_websocket_upgrade": { | ||||
|             "$ref": "#/definitions/allow_websocket_upgrade" | ||||
|           }, | ||||
|           "access_list_id": { | ||||
|             "$ref": "#/definitions/access_list_id" | ||||
|           }, | ||||
|           "advanced_config": { | ||||
|             "$ref": "#/definitions/advanced_config" | ||||
|           }, | ||||
|           "enabled": { | ||||
|             "$ref": "#/definitions/enabled" | ||||
|           }, | ||||
|           "meta": { | ||||
|             "$ref": "#/definitions/meta" | ||||
|           }, | ||||
|           "locations": { | ||||
|             "$ref": "#/definitions/locations" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "targetSchema": { | ||||
|         "properties": { | ||||
|           "$ref": "#/properties" | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "title": "Delete", | ||||
|       "description": "Deletes a existing Proxy Host", | ||||
|       "href": "/nginx/proxy-hosts/{definitions.identity.example}", | ||||
|       "access": "private", | ||||
|       "method": "DELETE", | ||||
|       "rel": "delete", | ||||
|       "http_header": { | ||||
|         "$ref": "../examples.json#/definitions/auth_header" | ||||
|       }, | ||||
|       "targetSchema": { | ||||
|         "type": "boolean" | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "title": "Enable", | ||||
|       "description": "Enables a existing Proxy Host", | ||||
|       "href": "/nginx/proxy-hosts/{definitions.identity.example}/enable", | ||||
|       "access": "private", | ||||
|       "method": "POST", | ||||
|       "rel": "update", | ||||
|       "http_header": { | ||||
|         "$ref": "../examples.json#/definitions/auth_header" | ||||
|       }, | ||||
|       "targetSchema": { | ||||
|         "type": "boolean" | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "title": "Disable", | ||||
|       "description": "Disables a existing Proxy Host", | ||||
|       "href": "/nginx/proxy-hosts/{definitions.identity.example}/disable", | ||||
|       "access": "private", | ||||
|       "method": "POST", | ||||
|       "rel": "update", | ||||
|       "http_header": { | ||||
|         "$ref": "../examples.json#/definitions/auth_header" | ||||
|       }, | ||||
|       "targetSchema": { | ||||
|         "type": "boolean" | ||||
|       } | ||||
|     } | ||||
|   ] | ||||
| } | ||||
| @@ -1,305 +0,0 @@ | ||||
| { | ||||
|   "$schema": "http://json-schema.org/draft-07/schema#", | ||||
|   "$id": "endpoints/redirection-hosts", | ||||
|   "title": "Redirection Hosts", | ||||
|   "description": "Endpoints relating to Redirection Hosts", | ||||
|   "stability": "stable", | ||||
|   "type": "object", | ||||
|   "definitions": { | ||||
|     "id": { | ||||
|       "$ref": "../definitions.json#/definitions/id" | ||||
|     }, | ||||
|     "created_on": { | ||||
|       "$ref": "../definitions.json#/definitions/created_on" | ||||
|     }, | ||||
|     "modified_on": { | ||||
|       "$ref": "../definitions.json#/definitions/modified_on" | ||||
|     }, | ||||
|     "domain_names": { | ||||
|       "$ref": "../definitions.json#/definitions/domain_names" | ||||
|     }, | ||||
|     "forward_http_code": { | ||||
|       "$ref": "../definitions.json#/definitions/http_code" | ||||
|     }, | ||||
|     "forward_scheme": { | ||||
|       "$ref": "../definitions.json#/definitions/scheme" | ||||
|     }, | ||||
|     "forward_domain_name": { | ||||
|       "$ref": "../definitions.json#/definitions/domain_name" | ||||
|     }, | ||||
|     "preserve_path": { | ||||
|       "description": "Should the path be preserved", | ||||
|       "example": true, | ||||
|       "type": "boolean" | ||||
|     }, | ||||
|     "certificate_id": { | ||||
|       "$ref": "../definitions.json#/definitions/certificate_id" | ||||
|     }, | ||||
|     "ssl_forced": { | ||||
|       "$ref": "../definitions.json#/definitions/ssl_forced" | ||||
|     }, | ||||
|     "hsts_enabled": { | ||||
|       "$ref": "../definitions.json#/definitions/hsts_enabled" | ||||
|     }, | ||||
|     "hsts_subdomains": { | ||||
|       "$ref": "../definitions.json#/definitions/hsts_subdomains" | ||||
|     }, | ||||
|     "http2_support": { | ||||
|       "$ref": "../definitions.json#/definitions/http2_support" | ||||
|     }, | ||||
|     "block_exploits": { | ||||
|       "$ref": "../definitions.json#/definitions/block_exploits" | ||||
|     }, | ||||
|     "advanced_config": { | ||||
|       "type": "string" | ||||
|     }, | ||||
|     "enabled": { | ||||
|       "$ref": "../definitions.json#/definitions/enabled" | ||||
|     }, | ||||
|     "meta": { | ||||
|       "type": "object" | ||||
|     } | ||||
|   }, | ||||
|   "properties": { | ||||
|     "id": { | ||||
|       "$ref": "#/definitions/id" | ||||
|     }, | ||||
|     "created_on": { | ||||
|       "$ref": "#/definitions/created_on" | ||||
|     }, | ||||
|     "modified_on": { | ||||
|       "$ref": "#/definitions/modified_on" | ||||
|     }, | ||||
|     "domain_names": { | ||||
|       "$ref": "#/definitions/domain_names" | ||||
|     }, | ||||
|     "forward_http_code": { | ||||
|       "$ref": "#/definitions/forward_http_code" | ||||
|     }, | ||||
|     "forward_scheme": { | ||||
|       "$ref": "#/definitions/forward_scheme" | ||||
|     }, | ||||
|     "forward_domain_name": { | ||||
|       "$ref": "#/definitions/forward_domain_name" | ||||
|     }, | ||||
|     "preserve_path": { | ||||
|       "$ref": "#/definitions/preserve_path" | ||||
|     }, | ||||
|     "certificate_id": { | ||||
|       "$ref": "#/definitions/certificate_id" | ||||
|     }, | ||||
|     "ssl_forced": { | ||||
|       "$ref": "#/definitions/ssl_forced" | ||||
|     }, | ||||
|     "hsts_enabled": { | ||||
|       "$ref": "#/definitions/hsts_enabled" | ||||
|     }, | ||||
|     "hsts_subdomains": { | ||||
|       "$ref": "#/definitions/hsts_subdomains" | ||||
|     }, | ||||
|     "http2_support": { | ||||
|       "$ref": "#/definitions/http2_support" | ||||
|     }, | ||||
|     "block_exploits": { | ||||
|       "$ref": "#/definitions/block_exploits" | ||||
|     }, | ||||
|     "advanced_config": { | ||||
|       "$ref": "#/definitions/advanced_config" | ||||
|     }, | ||||
|     "enabled": { | ||||
|       "$ref": "#/definitions/enabled" | ||||
|     }, | ||||
|     "meta": { | ||||
|       "$ref": "#/definitions/meta" | ||||
|     } | ||||
|   }, | ||||
|   "links": [ | ||||
|     { | ||||
|       "title": "List", | ||||
|       "description": "Returns a list of Redirection Hosts", | ||||
|       "href": "/nginx/redirection-hosts", | ||||
|       "access": "private", | ||||
|       "method": "GET", | ||||
|       "rel": "self", | ||||
|       "http_header": { | ||||
|         "$ref": "../examples.json#/definitions/auth_header" | ||||
|       }, | ||||
|       "targetSchema": { | ||||
|         "type": "array", | ||||
|         "items": { | ||||
|           "$ref": "#/properties" | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "title": "Create", | ||||
|       "description": "Creates a new Redirection Host", | ||||
|       "href": "/nginx/redirection-hosts", | ||||
|       "access": "private", | ||||
|       "method": "POST", | ||||
|       "rel": "create", | ||||
|       "http_header": { | ||||
|         "$ref": "../examples.json#/definitions/auth_header" | ||||
|       }, | ||||
|       "schema": { | ||||
|         "type": "object", | ||||
|         "additionalProperties": false, | ||||
|         "required": [ | ||||
|           "domain_names", | ||||
|           "forward_scheme", | ||||
|           "forward_http_code", | ||||
|           "forward_domain_name" | ||||
|         ], | ||||
|         "properties": { | ||||
|           "domain_names": { | ||||
|             "$ref": "#/definitions/domain_names" | ||||
|           }, | ||||
|           "forward_http_code": { | ||||
|             "$ref": "#/definitions/forward_http_code" | ||||
|           }, | ||||
|           "forward_scheme": { | ||||
|             "$ref": "#/definitions/forward_scheme" | ||||
|           }, | ||||
|           "forward_domain_name": { | ||||
|             "$ref": "#/definitions/forward_domain_name" | ||||
|           }, | ||||
|           "preserve_path": { | ||||
|             "$ref": "#/definitions/preserve_path" | ||||
|           }, | ||||
|           "certificate_id": { | ||||
|             "$ref": "#/definitions/certificate_id" | ||||
|           }, | ||||
|           "ssl_forced": { | ||||
|             "$ref": "#/definitions/ssl_forced" | ||||
|           }, | ||||
|           "hsts_enabled": { | ||||
|             "$ref": "#/definitions/hsts_enabled" | ||||
|           }, | ||||
|           "hsts_subdomains": { | ||||
|             "$ref": "#/definitions/hsts_enabled" | ||||
|           }, | ||||
|           "http2_support": { | ||||
|             "$ref": "#/definitions/http2_support" | ||||
|           }, | ||||
|           "block_exploits": { | ||||
|             "$ref": "#/definitions/block_exploits" | ||||
|           }, | ||||
|           "advanced_config": { | ||||
|             "$ref": "#/definitions/advanced_config" | ||||
|           }, | ||||
|           "meta": { | ||||
|             "$ref": "#/definitions/meta" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "targetSchema": { | ||||
|         "properties": { | ||||
|           "$ref": "#/properties" | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "title": "Update", | ||||
|       "description": "Updates a existing Redirection Host", | ||||
|       "href": "/nginx/redirection-hosts/{definitions.identity.example}", | ||||
|       "access": "private", | ||||
|       "method": "PUT", | ||||
|       "rel": "update", | ||||
|       "http_header": { | ||||
|         "$ref": "../examples.json#/definitions/auth_header" | ||||
|       }, | ||||
|       "schema": { | ||||
|         "type": "object", | ||||
|         "additionalProperties": false, | ||||
|         "properties": { | ||||
|           "domain_names": { | ||||
|             "$ref": "#/definitions/domain_names" | ||||
|           }, | ||||
|           "forward_http_code": { | ||||
|             "$ref": "#/definitions/forward_http_code" | ||||
|           }, | ||||
|           "forward_scheme": { | ||||
|             "$ref": "#/definitions/forward_scheme" | ||||
|           }, | ||||
|           "forward_domain_name": { | ||||
|             "$ref": "#/definitions/forward_domain_name" | ||||
|           }, | ||||
|           "preserve_path": { | ||||
|             "$ref": "#/definitions/preserve_path" | ||||
|           }, | ||||
|           "certificate_id": { | ||||
|             "$ref": "#/definitions/certificate_id" | ||||
|           }, | ||||
|           "ssl_forced": { | ||||
|             "$ref": "#/definitions/ssl_forced" | ||||
|           }, | ||||
|           "hsts_enabled": { | ||||
|             "$ref": "#/definitions/hsts_enabled" | ||||
|           }, | ||||
|           "hsts_subdomains": { | ||||
|             "$ref": "#/definitions/hsts_enabled" | ||||
|           }, | ||||
|           "http2_support": { | ||||
|             "$ref": "#/definitions/http2_support" | ||||
|           }, | ||||
|           "block_exploits": { | ||||
|             "$ref": "#/definitions/block_exploits" | ||||
|           }, | ||||
|           "advanced_config": { | ||||
|             "$ref": "#/definitions/advanced_config" | ||||
|           }, | ||||
|           "meta": { | ||||
|             "$ref": "#/definitions/meta" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "targetSchema": { | ||||
|         "properties": { | ||||
|           "$ref": "#/properties" | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "title": "Delete", | ||||
|       "description": "Deletes a existing Redirection Host", | ||||
|       "href": "/nginx/redirection-hosts/{definitions.identity.example}", | ||||
|       "access": "private", | ||||
|       "method": "DELETE", | ||||
|       "rel": "delete", | ||||
|       "http_header": { | ||||
|         "$ref": "../examples.json#/definitions/auth_header" | ||||
|       }, | ||||
|       "targetSchema": { | ||||
|         "type": "boolean" | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "title": "Enable", | ||||
|       "description": "Enables a existing Redirection Host", | ||||
|       "href": "/nginx/redirection-hosts/{definitions.identity.example}/enable", | ||||
|       "access": "private", | ||||
|       "method": "POST", | ||||
|       "rel": "update", | ||||
|       "http_header": { | ||||
|         "$ref": "../examples.json#/definitions/auth_header" | ||||
|       }, | ||||
|       "targetSchema": { | ||||
|         "type": "boolean" | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "title": "Disable", | ||||
|       "description": "Disables a existing Redirection Host", | ||||
|       "href": "/nginx/redirection-hosts/{definitions.identity.example}/disable", | ||||
|       "access": "private", | ||||
|       "method": "POST", | ||||
|       "rel": "update", | ||||
|       "http_header": { | ||||
|         "$ref": "../examples.json#/definitions/auth_header" | ||||
|       }, | ||||
|       "targetSchema": { | ||||
|         "type": "boolean" | ||||
|       } | ||||
|     } | ||||
|   ] | ||||
| } | ||||
| @@ -1,99 +0,0 @@ | ||||
| { | ||||
|   "$schema": "http://json-schema.org/draft-07/schema#", | ||||
|   "$id": "endpoints/settings", | ||||
|   "title": "Settings", | ||||
|   "description": "Endpoints relating to Settings", | ||||
|   "stability": "stable", | ||||
|   "type": "object", | ||||
|   "definitions": { | ||||
|     "id": { | ||||
|       "$ref": "../definitions.json#/definitions/setting_id" | ||||
|     }, | ||||
|     "name": { | ||||
|       "description": "Name", | ||||
|       "example": "Default Site", | ||||
|       "type": "string", | ||||
|       "minLength": 2, | ||||
|       "maxLength": 100 | ||||
|     }, | ||||
|     "description": { | ||||
|       "description": "Description", | ||||
|       "example": "Default Site", | ||||
|       "type": "string", | ||||
|       "minLength": 2, | ||||
|       "maxLength": 255 | ||||
|     }, | ||||
|     "value": { | ||||
|       "description": "Value", | ||||
|       "example": "404", | ||||
|       "type": "string", | ||||
|       "maxLength": 255 | ||||
|     }, | ||||
|     "meta": { | ||||
|       "type": "object" | ||||
|     } | ||||
|   }, | ||||
|   "links": [ | ||||
|     { | ||||
|       "title": "List", | ||||
|       "description": "Returns a list of Settings", | ||||
|       "href": "/settings", | ||||
|       "access": "private", | ||||
|       "method": "GET", | ||||
|       "rel": "self", | ||||
|       "http_header": { | ||||
|         "$ref": "../examples.json#/definitions/auth_header" | ||||
|       }, | ||||
|       "targetSchema": { | ||||
|         "type": "array", | ||||
|         "items": { | ||||
|           "$ref": "#/properties" | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "title": "Update", | ||||
|       "description": "Updates a existing Setting", | ||||
|       "href": "/settings/{definitions.identity.example}", | ||||
|       "access": "private", | ||||
|       "method": "PUT", | ||||
|       "rel": "update", | ||||
|       "http_header": { | ||||
|         "$ref": "../examples.json#/definitions/auth_header" | ||||
|       }, | ||||
|       "schema": { | ||||
|         "type": "object", | ||||
|         "properties": { | ||||
|           "value": { | ||||
|             "$ref": "#/definitions/value" | ||||
|           }, | ||||
|           "meta": { | ||||
|             "$ref": "#/definitions/meta" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "targetSchema": { | ||||
|         "properties": { | ||||
|           "$ref": "#/properties" | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   ], | ||||
|   "properties": { | ||||
|     "id": { | ||||
|       "$ref": "#/definitions/id" | ||||
|     }, | ||||
|     "name": { | ||||
|       "$ref": "#/definitions/description" | ||||
|     }, | ||||
|     "description": { | ||||
|       "$ref": "#/definitions/description" | ||||
|     }, | ||||
|     "value": { | ||||
|       "$ref": "#/definitions/value" | ||||
|     }, | ||||
|     "meta": { | ||||
|       "$ref": "#/definitions/meta" | ||||
|     } | ||||
|   } | ||||
| } | ||||
| @@ -1,234 +0,0 @@ | ||||
| { | ||||
|   "$schema": "http://json-schema.org/draft-07/schema#", | ||||
|   "$id": "endpoints/streams", | ||||
|   "title": "Streams", | ||||
|   "description": "Endpoints relating to Streams", | ||||
|   "stability": "stable", | ||||
|   "type": "object", | ||||
|   "definitions": { | ||||
|     "id": { | ||||
|       "$ref": "../definitions.json#/definitions/id" | ||||
|     }, | ||||
|     "created_on": { | ||||
|       "$ref": "../definitions.json#/definitions/created_on" | ||||
|     }, | ||||
|     "modified_on": { | ||||
|       "$ref": "../definitions.json#/definitions/modified_on" | ||||
|     }, | ||||
|     "incoming_port": { | ||||
|       "type": "integer", | ||||
|       "minimum": 1, | ||||
|       "maximum": 65535 | ||||
|     }, | ||||
|     "forwarding_host": { | ||||
|       "anyOf": [ | ||||
|         { | ||||
|           "$ref": "../definitions.json#/definitions/domain_name" | ||||
|         }, | ||||
|         { | ||||
|           "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": "../definitions.json#/definitions/enabled" | ||||
|     }, | ||||
|     "meta": { | ||||
|       "type": "object" | ||||
|     } | ||||
|   }, | ||||
|   "properties": { | ||||
|     "id": { | ||||
|       "$ref": "#/definitions/id" | ||||
|     }, | ||||
|     "created_on": { | ||||
|       "$ref": "#/definitions/created_on" | ||||
|     }, | ||||
|     "modified_on": { | ||||
|       "$ref": "#/definitions/modified_on" | ||||
|     }, | ||||
|     "incoming_port": { | ||||
|       "$ref": "#/definitions/incoming_port" | ||||
|     }, | ||||
|     "forwarding_host": { | ||||
|       "$ref": "#/definitions/forwarding_host" | ||||
|     }, | ||||
|     "forwarding_port": { | ||||
|       "$ref": "#/definitions/forwarding_port" | ||||
|     }, | ||||
|     "tcp_forwarding": { | ||||
|       "$ref": "#/definitions/tcp_forwarding" | ||||
|     }, | ||||
|     "udp_forwarding": { | ||||
|       "$ref": "#/definitions/udp_forwarding" | ||||
|     }, | ||||
|     "enabled": { | ||||
|       "$ref": "#/definitions/enabled" | ||||
|     }, | ||||
|     "meta": { | ||||
|       "$ref": "#/definitions/meta" | ||||
|     } | ||||
|   }, | ||||
|   "links": [ | ||||
|     { | ||||
|       "title": "List", | ||||
|       "description": "Returns a list of Steams", | ||||
|       "href": "/nginx/streams", | ||||
|       "access": "private", | ||||
|       "method": "GET", | ||||
|       "rel": "self", | ||||
|       "http_header": { | ||||
|         "$ref": "../examples.json#/definitions/auth_header" | ||||
|       }, | ||||
|       "targetSchema": { | ||||
|         "type": "array", | ||||
|         "items": { | ||||
|           "$ref": "#/properties" | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "title": "Create", | ||||
|       "description": "Creates a new Stream", | ||||
|       "href": "/nginx/streams", | ||||
|       "access": "private", | ||||
|       "method": "POST", | ||||
|       "rel": "create", | ||||
|       "http_header": { | ||||
|         "$ref": "../examples.json#/definitions/auth_header" | ||||
|       }, | ||||
|       "schema": { | ||||
|         "type": "object", | ||||
|         "additionalProperties": false, | ||||
|         "required": [ | ||||
|           "incoming_port", | ||||
|           "forwarding_host", | ||||
|           "forwarding_port" | ||||
|         ], | ||||
|         "properties": { | ||||
|           "incoming_port": { | ||||
|             "$ref": "#/definitions/incoming_port" | ||||
|           }, | ||||
|           "forwarding_host": { | ||||
|             "$ref": "#/definitions/forwarding_host" | ||||
|           }, | ||||
|           "forwarding_port": { | ||||
|             "$ref": "#/definitions/forwarding_port" | ||||
|           }, | ||||
|           "tcp_forwarding": { | ||||
|             "$ref": "#/definitions/tcp_forwarding" | ||||
|           }, | ||||
|           "udp_forwarding": { | ||||
|             "$ref": "#/definitions/udp_forwarding" | ||||
|           }, | ||||
|           "meta": { | ||||
|             "$ref": "#/definitions/meta" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "targetSchema": { | ||||
|         "properties": { | ||||
|           "$ref": "#/properties" | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "title": "Update", | ||||
|       "description": "Updates a existing Stream", | ||||
|       "href": "/nginx/streams/{definitions.identity.example}", | ||||
|       "access": "private", | ||||
|       "method": "PUT", | ||||
|       "rel": "update", | ||||
|       "http_header": { | ||||
|         "$ref": "../examples.json#/definitions/auth_header" | ||||
|       }, | ||||
|       "schema": { | ||||
|         "type": "object", | ||||
|         "additionalProperties": false, | ||||
|         "properties": { | ||||
|           "incoming_port": { | ||||
|             "$ref": "#/definitions/incoming_port" | ||||
|           }, | ||||
|           "forwarding_host": { | ||||
|             "$ref": "#/definitions/forwarding_host" | ||||
|           }, | ||||
|           "forwarding_port": { | ||||
|             "$ref": "#/definitions/forwarding_port" | ||||
|           }, | ||||
|           "tcp_forwarding": { | ||||
|             "$ref": "#/definitions/tcp_forwarding" | ||||
|           }, | ||||
|           "udp_forwarding": { | ||||
|             "$ref": "#/definitions/udp_forwarding" | ||||
|           }, | ||||
|           "meta": { | ||||
|             "$ref": "#/definitions/meta" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "targetSchema": { | ||||
|         "properties": { | ||||
|           "$ref": "#/properties" | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "title": "Delete", | ||||
|       "description": "Deletes a existing Stream", | ||||
|       "href": "/nginx/streams/{definitions.identity.example}", | ||||
|       "access": "private", | ||||
|       "method": "DELETE", | ||||
|       "rel": "delete", | ||||
|       "http_header": { | ||||
|         "$ref": "../examples.json#/definitions/auth_header" | ||||
|       }, | ||||
|       "targetSchema": { | ||||
|         "type": "boolean" | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "title": "Enable", | ||||
|       "description": "Enables a existing Stream", | ||||
|       "href": "/nginx/streams/{definitions.identity.example}/enable", | ||||
|       "access": "private", | ||||
|       "method": "POST", | ||||
|       "rel": "update", | ||||
|       "http_header": { | ||||
|         "$ref": "../examples.json#/definitions/auth_header" | ||||
|       }, | ||||
|       "targetSchema": { | ||||
|         "type": "boolean" | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "title": "Disable", | ||||
|       "description": "Disables a existing Stream", | ||||
|       "href": "/nginx/streams/{definitions.identity.example}/disable", | ||||
|       "access": "private", | ||||
|       "method": "POST", | ||||
|       "rel": "update", | ||||
|       "http_header": { | ||||
|         "$ref": "../examples.json#/definitions/auth_header" | ||||
|       }, | ||||
|       "targetSchema": { | ||||
|         "type": "boolean" | ||||
|       } | ||||
|     } | ||||
|   ] | ||||
| } | ||||
| @@ -1,100 +0,0 @@ | ||||
| { | ||||
|   "$schema": "http://json-schema.org/draft-07/schema#", | ||||
|   "$id": "endpoints/tokens", | ||||
|   "title": "Token", | ||||
|   "description": "Tokens are required to authenticate against the API", | ||||
|   "stability": "stable", | ||||
|   "type": "object", | ||||
|   "definitions": { | ||||
|     "identity": { | ||||
|       "description": "Email Address or other 3rd party providers identifier", | ||||
|       "example": "john@example.com", | ||||
|       "type": "string" | ||||
|     }, | ||||
|     "secret": { | ||||
|       "description": "A password or key", | ||||
|       "example": "correct horse battery staple", | ||||
|       "type": "string" | ||||
|     }, | ||||
|     "token": { | ||||
|       "description": "JWT", | ||||
|       "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.e30.O_frfYM8RzmRsUNigHtu0_jZ_utSejyr1axMGa8rlsk", | ||||
|       "type": "string" | ||||
|     }, | ||||
|     "expires": { | ||||
|       "description": "Token expiry time", | ||||
|       "format": "date-time", | ||||
|       "type": "string" | ||||
|     }, | ||||
|     "scope": { | ||||
|       "description": "Scope of the Token, defaults to 'user'", | ||||
|       "example": "user", | ||||
|       "type": "string" | ||||
|     } | ||||
|   }, | ||||
|   "links": [ | ||||
|     { | ||||
|       "title": "Create", | ||||
|       "description": "Creates a new token.", | ||||
|       "href": "/tokens", | ||||
|       "access": "public", | ||||
|       "method": "POST", | ||||
|       "rel": "create", | ||||
|       "schema": { | ||||
|         "type": "object", | ||||
|         "required": [ | ||||
|           "identity", | ||||
|           "secret" | ||||
|         ], | ||||
|         "properties": { | ||||
|           "identity": { | ||||
|             "$ref": "#/definitions/identity" | ||||
|           }, | ||||
|           "secret": { | ||||
|             "$ref": "#/definitions/secret" | ||||
|           }, | ||||
|           "scope": { | ||||
|             "$ref": "#/definitions/scope" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "targetSchema": { | ||||
|         "type": "object", | ||||
|         "properties": { | ||||
|           "token": { | ||||
|             "$ref": "#/definitions/token" | ||||
|           }, | ||||
|           "expires": { | ||||
|             "$ref": "#/definitions/expires" | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "title": "Refresh", | ||||
|       "description": "Returns a new token.", | ||||
|       "href": "/tokens", | ||||
|       "access": "private", | ||||
|       "method": "GET", | ||||
|       "rel": "self", | ||||
|       "http_header": { | ||||
|         "$ref": "../examples.json#/definitions/auth_header" | ||||
|       }, | ||||
|       "schema": {}, | ||||
|       "targetSchema": { | ||||
|         "type": "object", | ||||
|         "properties": { | ||||
|           "token": { | ||||
|             "$ref": "#/definitions/token" | ||||
|           }, | ||||
|           "expires": { | ||||
|             "$ref": "#/definitions/expires" | ||||
|           }, | ||||
|           "scope": { | ||||
|             "$ref": "#/definitions/scope" | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   ] | ||||
| } | ||||
| @@ -1,287 +0,0 @@ | ||||
| { | ||||
|   "$schema": "http://json-schema.org/draft-07/schema#", | ||||
|   "$id": "endpoints/users", | ||||
|   "title": "Users", | ||||
|   "description": "Endpoints relating to Users", | ||||
|   "stability": "stable", | ||||
|   "type": "object", | ||||
|   "definitions": { | ||||
|     "id": { | ||||
|       "$ref": "../definitions.json#/definitions/id" | ||||
|     }, | ||||
|     "created_on": { | ||||
|       "$ref": "../definitions.json#/definitions/created_on" | ||||
|     }, | ||||
|     "modified_on": { | ||||
|       "$ref": "../definitions.json#/definitions/modified_on" | ||||
|     }, | ||||
|     "name": { | ||||
|       "description": "Name", | ||||
|       "example": "Jamie Curnow", | ||||
|       "type": "string", | ||||
|       "minLength": 2, | ||||
|       "maxLength": 100 | ||||
|     }, | ||||
|     "nickname": { | ||||
|       "description": "Nickname", | ||||
|       "example": "Jamie", | ||||
|       "type": "string", | ||||
|       "minLength": 2, | ||||
|       "maxLength": 50 | ||||
|     }, | ||||
|     "email": { | ||||
|       "$ref": "../definitions.json#/definitions/email" | ||||
|     }, | ||||
|     "avatar": { | ||||
|       "description": "Avatar", | ||||
|       "example": "http://somewhere.jpg", | ||||
|       "type": "string", | ||||
|       "minLength": 2, | ||||
|       "maxLength": 150, | ||||
|       "readOnly": true | ||||
|     }, | ||||
|     "roles": { | ||||
|       "description": "Roles", | ||||
|       "example": [ | ||||
|         "admin" | ||||
|       ], | ||||
|       "type": "array" | ||||
|     }, | ||||
|     "is_disabled": { | ||||
|       "description": "Is Disabled", | ||||
|       "example": false, | ||||
|       "type": "boolean" | ||||
|     } | ||||
|   }, | ||||
|   "links": [ | ||||
|     { | ||||
|       "title": "List", | ||||
|       "description": "Returns a list of Users", | ||||
|       "href": "/users", | ||||
|       "access": "private", | ||||
|       "method": "GET", | ||||
|       "rel": "self", | ||||
|       "http_header": { | ||||
|         "$ref": "../examples.json#/definitions/auth_header" | ||||
|       }, | ||||
|       "targetSchema": { | ||||
|         "type": "array", | ||||
|         "items": { | ||||
|           "$ref": "#/properties" | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "title": "Create", | ||||
|       "description": "Creates a new User", | ||||
|       "href": "/users", | ||||
|       "access": "private", | ||||
|       "method": "POST", | ||||
|       "rel": "create", | ||||
|       "http_header": { | ||||
|         "$ref": "../examples.json#/definitions/auth_header" | ||||
|       }, | ||||
|       "schema": { | ||||
|         "type": "object", | ||||
|         "required": [ | ||||
|           "name", | ||||
|           "nickname", | ||||
|           "email" | ||||
|         ], | ||||
|         "properties": { | ||||
|           "name": { | ||||
|             "$ref": "#/definitions/name" | ||||
|           }, | ||||
|           "nickname": { | ||||
|             "$ref": "#/definitions/nickname" | ||||
|           }, | ||||
|           "email": { | ||||
|             "$ref": "#/definitions/email" | ||||
|           }, | ||||
|           "roles": { | ||||
|             "$ref": "#/definitions/roles" | ||||
|           }, | ||||
|           "is_disabled": { | ||||
|             "$ref": "#/definitions/is_disabled" | ||||
|           }, | ||||
|           "auth": { | ||||
|             "type": "object", | ||||
|             "description": "Auth Credentials", | ||||
|             "example": { | ||||
|               "type": "password", | ||||
|               "secret": "bigredhorsebanana" | ||||
|             } | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "targetSchema": { | ||||
|         "properties": { | ||||
|           "$ref": "#/properties" | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "title": "Update", | ||||
|       "description": "Updates a existing User", | ||||
|       "href": "/users/{definitions.identity.example}", | ||||
|       "access": "private", | ||||
|       "method": "PUT", | ||||
|       "rel": "update", | ||||
|       "http_header": { | ||||
|         "$ref": "../examples.json#/definitions/auth_header" | ||||
|       }, | ||||
|       "schema": { | ||||
|         "type": "object", | ||||
|         "properties": { | ||||
|           "name": { | ||||
|             "$ref": "#/definitions/name" | ||||
|           }, | ||||
|           "nickname": { | ||||
|             "$ref": "#/definitions/nickname" | ||||
|           }, | ||||
|           "email": { | ||||
|             "$ref": "#/definitions/email" | ||||
|           }, | ||||
|           "roles": { | ||||
|             "$ref": "#/definitions/roles" | ||||
|           }, | ||||
|           "is_disabled": { | ||||
|             "$ref": "#/definitions/is_disabled" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "targetSchema": { | ||||
|         "properties": { | ||||
|           "$ref": "#/properties" | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "title": "Delete", | ||||
|       "description": "Deletes a existing User", | ||||
|       "href": "/users/{definitions.identity.example}", | ||||
|       "access": "private", | ||||
|       "method": "DELETE", | ||||
|       "rel": "delete", | ||||
|       "http_header": { | ||||
|         "$ref": "../examples.json#/definitions/auth_header" | ||||
|       }, | ||||
|       "targetSchema": { | ||||
|         "type": "boolean" | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "title": "Set Password", | ||||
|       "description": "Sets a password for an existing User", | ||||
|       "href": "/users/{definitions.identity.example}/auth", | ||||
|       "access": "private", | ||||
|       "method": "PUT", | ||||
|       "rel": "update", | ||||
|       "http_header": { | ||||
|         "$ref": "../examples.json#/definitions/auth_header" | ||||
|       }, | ||||
|       "schema": { | ||||
|         "type": "object", | ||||
|         "required": [ | ||||
|           "type", | ||||
|           "secret" | ||||
|         ], | ||||
|         "properties": { | ||||
|           "type": { | ||||
|             "type": "string", | ||||
|             "pattern": "^password$" | ||||
|           }, | ||||
|           "current": { | ||||
|             "type": "string", | ||||
|             "minLength": 1, | ||||
|             "maxLength": 64 | ||||
|           }, | ||||
|           "secret": { | ||||
|             "type": "string", | ||||
|             "minLength": 8, | ||||
|             "maxLength": 64 | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "targetSchema": { | ||||
|         "type": "boolean" | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "title": "Set Permissions", | ||||
|       "description": "Sets Permissions for a User", | ||||
|       "href": "/users/{definitions.identity.example}/permissions", | ||||
|       "access": "private", | ||||
|       "method": "PUT", | ||||
|       "rel": "update", | ||||
|       "http_header": { | ||||
|         "$ref": "../examples.json#/definitions/auth_header" | ||||
|       }, | ||||
|       "schema": { | ||||
|         "type": "object", | ||||
|         "properties": { | ||||
|           "visibility": { | ||||
|             "type": "string", | ||||
|             "pattern": "^(all|user)$" | ||||
|           }, | ||||
|           "access_lists": { | ||||
|             "type": "string", | ||||
|             "pattern": "^(hidden|view|manage)$" | ||||
|           }, | ||||
|           "dead_hosts": { | ||||
|             "type": "string", | ||||
|             "pattern": "^(hidden|view|manage)$" | ||||
|           }, | ||||
|           "proxy_hosts": { | ||||
|             "type": "string", | ||||
|             "pattern": "^(hidden|view|manage)$" | ||||
|           }, | ||||
|           "redirection_hosts": { | ||||
|             "type": "string", | ||||
|             "pattern": "^(hidden|view|manage)$" | ||||
|           }, | ||||
|           "streams": { | ||||
|             "type": "string", | ||||
|             "pattern": "^(hidden|view|manage)$" | ||||
|           }, | ||||
|           "certificates": { | ||||
|             "type": "string", | ||||
|             "pattern": "^(hidden|view|manage)$" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       "targetSchema": { | ||||
|         "type": "boolean" | ||||
|       } | ||||
|     } | ||||
|   ], | ||||
|   "properties": { | ||||
|     "id": { | ||||
|       "$ref": "#/definitions/id" | ||||
|     }, | ||||
|     "created_on": { | ||||
|       "$ref": "#/definitions/created_on" | ||||
|     }, | ||||
|     "modified_on": { | ||||
|       "$ref": "#/definitions/modified_on" | ||||
|     }, | ||||
|     "name": { | ||||
|       "$ref": "#/definitions/name" | ||||
|     }, | ||||
|     "nickname": { | ||||
|       "$ref": "#/definitions/nickname" | ||||
|     }, | ||||
|     "email": { | ||||
|       "$ref": "#/definitions/email" | ||||
|     }, | ||||
|     "avatar": { | ||||
|       "$ref": "#/definitions/avatar" | ||||
|     }, | ||||
|     "roles": { | ||||
|       "$ref": "#/definitions/roles" | ||||
|     }, | ||||
|     "is_disabled": { | ||||
|       "$ref": "#/definitions/is_disabled" | ||||
|     } | ||||
|   } | ||||
| } | ||||
| @@ -1,23 +0,0 @@ | ||||
| { | ||||
|   "$schema": "http://json-schema.org/draft-07/schema#", | ||||
|   "$id": "examples", | ||||
|   "type": "object", | ||||
|   "definitions": { | ||||
|     "name": { | ||||
|       "description": "Name", | ||||
|       "example": "John Smith", | ||||
|       "type": "string", | ||||
|       "minLength": 1, | ||||
|       "maxLength": 255 | ||||
|     }, | ||||
|     "auth_header": { | ||||
|       "Authorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.e30.O_frfYM8RzmRsUNigHtu0_jZ_utSejyr1axMGa8rlsk", | ||||
|       "X-API-Version": "next" | ||||
|     }, | ||||
|     "token": { | ||||
|       "type": "string", | ||||
|       "description": "JWT", | ||||
|       "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.e30.O_frfYM8RzmRsUNigHtu0_jZ_utSejyr1axMGa8rlsk" | ||||
|     } | ||||
|   } | ||||
| } | ||||
							
								
								
									
										41
									
								
								backend/schema/index.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								backend/schema/index.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,41 @@ | ||||
| const refParser = require('@apidevtools/json-schema-ref-parser'); | ||||
|  | ||||
| let compiledSchema = null; | ||||
|  | ||||
| module.exports = { | ||||
|  | ||||
| 	/** | ||||
| 	 * Compiles the schema, by dereferencing it, only once | ||||
| 	 * and returns the memory cached value | ||||
| 	 */ | ||||
| 	getCompiledSchema: async () => { | ||||
| 		if (compiledSchema === null) { | ||||
| 			compiledSchema = await refParser.dereference(__dirname + '/swagger.json', { | ||||
| 				mutateInputSchema: false, | ||||
| 			}); | ||||
| 		} | ||||
| 		return compiledSchema; | ||||
| 	}, | ||||
|  | ||||
| 	/** | ||||
| 	 * Scans the schema for the validation schema for the given path and method | ||||
| 	 * and returns it. | ||||
| 	 * | ||||
| 	 * @param {string} path | ||||
| 	 * @param {string} method | ||||
| 	 * @returns string|null | ||||
| 	 */ | ||||
| 	getValidationSchema: (path, method) => { | ||||
| 		if (compiledSchema !== null && | ||||
| 			typeof compiledSchema.paths[path] !== 'undefined' && | ||||
| 			typeof compiledSchema.paths[path][method] !== 'undefined' && | ||||
| 			typeof compiledSchema.paths[path][method].requestBody !== 'undefined' && | ||||
| 			typeof compiledSchema.paths[path][method].requestBody.content !== 'undefined' && | ||||
| 			typeof compiledSchema.paths[path][method].requestBody.content['application/json'] !== 'undefined' && | ||||
| 			typeof compiledSchema.paths[path][method].requestBody.content['application/json'].schema !== 'undefined' | ||||
| 		) { | ||||
| 			return compiledSchema.paths[path][method].requestBody.content['application/json'].schema; | ||||
| 		} | ||||
| 		return null; | ||||
| 	} | ||||
| }; | ||||
| @@ -1,42 +0,0 @@ | ||||
| { | ||||
|   "$schema": "http://json-schema.org/draft-07/schema#", | ||||
|   "$id": "root", | ||||
|   "title": "Nginx Proxy Manager REST API", | ||||
|   "description": "This is the Nginx Proxy Manager REST API", | ||||
|   "version": "2.0.0", | ||||
|   "links": [ | ||||
|     { | ||||
|       "href": "http://npm.example.com/api", | ||||
|       "rel": "self" | ||||
|     } | ||||
|   ], | ||||
|   "properties": { | ||||
|     "tokens": { | ||||
|       "$ref": "endpoints/tokens.json" | ||||
|     }, | ||||
|     "users": { | ||||
|       "$ref": "endpoints/users.json" | ||||
|     }, | ||||
|     "proxy-hosts": { | ||||
|       "$ref": "endpoints/proxy-hosts.json" | ||||
|     }, | ||||
|     "redirection-hosts": { | ||||
|       "$ref": "endpoints/redirection-hosts.json" | ||||
|     }, | ||||
|     "dead-hosts": { | ||||
|       "$ref": "endpoints/dead-hosts.json" | ||||
|     }, | ||||
|     "streams": { | ||||
|       "$ref": "endpoints/streams.json" | ||||
|     }, | ||||
|     "certificates": { | ||||
|       "$ref": "endpoints/certificates.json" | ||||
|     }, | ||||
|     "access-lists": { | ||||
|       "$ref": "endpoints/access-lists.json" | ||||
|     }, | ||||
|     "settings": { | ||||
|       "$ref": "endpoints/settings.json" | ||||
|     } | ||||
|   } | ||||
| } | ||||
							
								
								
									
										53
									
								
								backend/schema/paths/audit-log/get.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								backend/schema/paths/audit-log/get.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,53 @@ | ||||
| { | ||||
| 	"operationId": "getAuditLog", | ||||
| 	"summary": "Get Audit Log", | ||||
| 	"tags": ["Audit Log"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["audit-log"] | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": [ | ||||
| 								{ | ||||
| 									"id": 7, | ||||
| 									"created_on": "2024-10-08T13:09:54.000Z", | ||||
| 									"modified_on": "2024-10-08T13:09:54.000Z", | ||||
| 									"user_id": 1, | ||||
| 									"object_type": "user", | ||||
| 									"object_id": 3, | ||||
| 									"action": "updated", | ||||
| 									"meta": { | ||||
| 										"name": "John Doe", | ||||
| 										"permissions": { | ||||
| 											"user_id": 3, | ||||
| 											"visibility": "all", | ||||
| 											"access_lists": "manage", | ||||
| 											"dead_hosts": "hidden", | ||||
| 											"proxy_hosts": "manage", | ||||
| 											"redirection_hosts": "view", | ||||
| 											"streams": "hidden", | ||||
| 											"certificates": "manage", | ||||
| 											"id": 3, | ||||
| 											"modified_on": "2024-10-08T13:09:54.000Z", | ||||
| 											"created_on": "2024-10-08T13:09:51.000Z" | ||||
| 										} | ||||
| 									} | ||||
| 								} | ||||
| 							] | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../components/audit-log-object.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										29
									
								
								backend/schema/paths/get.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								backend/schema/paths/get.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| { | ||||
| 	"operationId": "health", | ||||
| 	"summary": "Returns the API health status", | ||||
| 	"tags": ["Public"], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"status": "OK", | ||||
| 								"version": { | ||||
| 									"major": 2, | ||||
| 									"minor": 1, | ||||
| 									"revision": 0 | ||||
| 								} | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../components/health-object.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										50
									
								
								backend/schema/paths/nginx/access-lists/get.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								backend/schema/paths/nginx/access-lists/get.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,50 @@ | ||||
| { | ||||
| 	"operationId": "getAccessLists", | ||||
| 	"summary": "Get all access lists", | ||||
| 	"tags": ["Access Lists"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["access_lists"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "query", | ||||
| 			"name": "expand", | ||||
| 			"description": "Expansions", | ||||
| 			"schema": { | ||||
| 				"type": "string", | ||||
| 				"enum": ["owner", "items", "clients", "proxy_hosts"] | ||||
| 			} | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": [ | ||||
| 								{ | ||||
| 									"id": 1, | ||||
| 									"created_on": "2024-10-08T22:15:40.000Z", | ||||
| 									"modified_on": "2024-10-08T22:15:40.000Z", | ||||
| 									"owner_user_id": 1, | ||||
| 									"name": "test1234", | ||||
| 									"meta": {}, | ||||
| 									"satisfy_any": 1, | ||||
| 									"pass_auth": 0, | ||||
| 									"proxy_host_count": 0 | ||||
| 								} | ||||
| 							] | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../../components/access-list-object.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										39
									
								
								backend/schema/paths/nginx/access-lists/listID/delete.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								backend/schema/paths/nginx/access-lists/listID/delete.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | ||||
| { | ||||
| 	"operationId": "deleteAccessList", | ||||
| 	"summary": "Delete a Access List", | ||||
| 	"tags": ["Access Lists"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["access_lists"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "path", | ||||
| 			"name": "listID", | ||||
| 			"schema": { | ||||
| 				"type": "integer", | ||||
| 				"minimum": 1 | ||||
| 			}, | ||||
| 			"required": true, | ||||
| 			"example": 2 | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": true | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"type": "boolean" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										49
									
								
								backend/schema/paths/nginx/access-lists/listID/get.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								backend/schema/paths/nginx/access-lists/listID/get.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,49 @@ | ||||
| { | ||||
| 	"operationId": "getAccessList", | ||||
| 	"summary": "Get a access List", | ||||
| 	"tags": ["Access Lists"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["access_lists"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "path", | ||||
| 			"name": "listID", | ||||
| 			"schema": { | ||||
| 				"type": "integer", | ||||
| 				"minimum": 1 | ||||
| 			}, | ||||
| 			"required": true, | ||||
| 			"example": 1 | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"id": 1, | ||||
| 								"created_on": "2020-01-30T09:36:08.000Z", | ||||
| 								"modified_on": "2020-01-30T09:41:04.000Z", | ||||
| 								"is_disabled": 0, | ||||
| 								"email": "jc@jc21.com", | ||||
| 								"name": "Jamie Curnow", | ||||
| 								"nickname": "James", | ||||
| 								"avatar": "//www.gravatar.com/avatar/6193176330f8d38747f038c170ddb193?default=mm", | ||||
| 								"roles": ["admin"] | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../../../components/access-list-object.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										164
									
								
								backend/schema/paths/nginx/access-lists/listID/put.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										164
									
								
								backend/schema/paths/nginx/access-lists/listID/put.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,164 @@ | ||||
| { | ||||
| 	"operationId": "updateAccessList", | ||||
| 	"summary": "Update a Access List", | ||||
| 	"tags": ["Access Lists"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["access_lists"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "path", | ||||
| 			"name": "listID", | ||||
| 			"schema": { | ||||
| 				"type": "integer", | ||||
| 				"minimum": 1 | ||||
| 			}, | ||||
| 			"required": true, | ||||
| 			"example": 2 | ||||
| 		} | ||||
| 	], | ||||
| 	"requestBody": { | ||||
| 		"description": "Access List Payload", | ||||
| 		"required": true, | ||||
| 		"content": { | ||||
| 			"application/json": { | ||||
| 				"schema": { | ||||
| 					"type": "object", | ||||
| 					"additionalProperties": false, | ||||
| 					"minProperties": 1, | ||||
| 					"properties": { | ||||
| 						"name": { | ||||
| 							"$ref": "../../../../components/access-list-object.json#/properties/name" | ||||
| 						}, | ||||
| 						"satisfy_any": { | ||||
| 							"$ref": "../../../../components/access-list-object.json#/properties/satisfy_any" | ||||
| 						}, | ||||
| 						"pass_auth": { | ||||
| 							"$ref": "../../../../components/access-list-object.json#/properties/pass_auth" | ||||
| 						}, | ||||
| 						"items": { | ||||
| 							"type": "array", | ||||
| 							"items": { | ||||
| 								"type": "object", | ||||
| 								"additionalProperties": false, | ||||
| 								"properties": { | ||||
| 									"username": { | ||||
| 										"type": "string", | ||||
| 										"minLength": 1 | ||||
| 									}, | ||||
| 									"password": { | ||||
| 										"type": "string", | ||||
| 										"minLength": 1 | ||||
| 									} | ||||
| 								} | ||||
| 							} | ||||
| 						}, | ||||
| 						"clients": { | ||||
| 							"type": "array", | ||||
| 							"items": { | ||||
| 								"type": "object", | ||||
| 								"additionalProperties": false, | ||||
| 								"properties": { | ||||
| 									"address": { | ||||
| 										"oneOf": [ | ||||
| 											{ | ||||
| 												"type": "string", | ||||
| 												"pattern": "^([0-9]{1,3}\\.){3}[0-9]{1,3}(/([0-9]|[1-2][0-9]|3[0-2]))?$" | ||||
| 											}, | ||||
| 											{ | ||||
| 												"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$" | ||||
| 											} | ||||
| 										] | ||||
| 									}, | ||||
| 									"directive": { | ||||
| 										"$ref": "../../../../components/access-list-object.json#/properties/directive" | ||||
| 									} | ||||
| 								} | ||||
| 							} | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	}, | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"id": 1, | ||||
| 								"created_on": "2024-10-08T22:15:40.000Z", | ||||
| 								"modified_on": "2024-10-08T22:34:34.000Z", | ||||
| 								"owner_user_id": 1, | ||||
| 								"name": "test123!!", | ||||
| 								"meta": {}, | ||||
| 								"satisfy_any": 1, | ||||
| 								"pass_auth": 0, | ||||
| 								"proxy_host_count": 0, | ||||
| 								"owner": { | ||||
| 									"id": 1, | ||||
| 									"created_on": "2024-10-07T22:43:55.000Z", | ||||
| 									"modified_on": "2024-10-08T12:52:54.000Z", | ||||
| 									"is_deleted": 0, | ||||
| 									"is_disabled": 0, | ||||
| 									"email": "admin@example.com", | ||||
| 									"name": "Administrator", | ||||
| 									"nickname": "some guy", | ||||
| 									"avatar": "//www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?default=mm", | ||||
| 									"roles": ["admin"] | ||||
| 								}, | ||||
| 								"items": [ | ||||
| 									{ | ||||
| 										"id": 1, | ||||
| 										"created_on": "2024-10-08T22:15:40.000Z", | ||||
| 										"modified_on": "2024-10-08T22:15:40.000Z", | ||||
| 										"access_list_id": 1, | ||||
| 										"username": "admin", | ||||
| 										"password": "", | ||||
| 										"meta": {}, | ||||
| 										"hint": "a****" | ||||
| 									}, | ||||
| 									{ | ||||
| 										"id": 2, | ||||
| 										"created_on": "2024-10-08T22:15:40.000Z", | ||||
| 										"modified_on": "2024-10-08T22:15:40.000Z", | ||||
| 										"access_list_id": 1, | ||||
| 										"username": "asdad", | ||||
| 										"password": "", | ||||
| 										"meta": {}, | ||||
| 										"hint": "a*****" | ||||
| 									} | ||||
| 								], | ||||
| 								"clients": [ | ||||
| 									{ | ||||
| 										"id": 1, | ||||
| 										"created_on": "2024-10-08T22:15:40.000Z", | ||||
| 										"modified_on": "2024-10-08T22:15:40.000Z", | ||||
| 										"access_list_id": 1, | ||||
| 										"address": "127.0.0.1", | ||||
| 										"directive": "allow", | ||||
| 										"meta": {} | ||||
| 									} | ||||
| 								], | ||||
| 								"proxy_hosts": [] | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../../../components/access-list-object.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										155
									
								
								backend/schema/paths/nginx/access-lists/post.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										155
									
								
								backend/schema/paths/nginx/access-lists/post.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,155 @@ | ||||
| { | ||||
| 	"operationId": "createAccessList", | ||||
| 	"summary": "Create a Access List", | ||||
| 	"tags": ["Access Lists"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["access_lists"] | ||||
| 		} | ||||
| 	], | ||||
| 	"requestBody": { | ||||
| 		"description": "Access List Payload", | ||||
| 		"required": true, | ||||
| 		"content": { | ||||
| 			"application/json": { | ||||
| 				"schema": { | ||||
| 					"type": "object", | ||||
| 					"additionalProperties": false, | ||||
| 					"required": ["name"], | ||||
| 					"properties": { | ||||
| 						"name": { | ||||
| 							"$ref": "../../../components/access-list-object.json#/properties/name" | ||||
| 						}, | ||||
| 						"satisfy_any": { | ||||
| 							"$ref": "../../../components/access-list-object.json#/properties/satisfy_any" | ||||
| 						}, | ||||
| 						"pass_auth": { | ||||
| 							"$ref": "../../../components/access-list-object.json#/properties/pass_auth" | ||||
| 						}, | ||||
| 						"items": { | ||||
| 							"type": "array", | ||||
| 							"items": { | ||||
| 								"type": "object", | ||||
| 								"additionalProperties": false, | ||||
| 								"properties": { | ||||
| 									"username": { | ||||
| 										"type": "string", | ||||
| 										"minLength": 1 | ||||
| 									}, | ||||
| 									"password": { | ||||
| 										"type": "string", | ||||
| 										"minLength": 1 | ||||
| 									} | ||||
| 								} | ||||
| 							} | ||||
| 						}, | ||||
| 						"clients": { | ||||
| 							"type": "array", | ||||
| 							"items": { | ||||
| 								"type": "object", | ||||
| 								"additionalProperties": false, | ||||
| 								"properties": { | ||||
| 									"address": { | ||||
| 										"oneOf": [ | ||||
| 											{ | ||||
| 												"type": "string", | ||||
| 												"pattern": "^([0-9]{1,3}\\.){3}[0-9]{1,3}(/([0-9]|[1-2][0-9]|3[0-2]))?$" | ||||
| 											}, | ||||
| 											{ | ||||
| 												"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$" | ||||
| 											} | ||||
| 										] | ||||
| 									}, | ||||
| 									"directive": { | ||||
| 										"$ref": "../../../components/access-list-object.json#/properties/directive" | ||||
| 									} | ||||
| 								} | ||||
| 							} | ||||
| 						}, | ||||
| 						"meta": { | ||||
| 							"$ref": "../../../components/access-list-object.json#/properties/meta" | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	}, | ||||
| 	"responses": { | ||||
| 		"201": { | ||||
| 			"description": "201 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"id": 1, | ||||
| 								"created_on": "2024-10-08T22:15:40.000Z", | ||||
| 								"modified_on": "2024-10-08T22:15:40.000Z", | ||||
| 								"owner_user_id": 1, | ||||
| 								"name": "test1234", | ||||
| 								"meta": {}, | ||||
| 								"satisfy_any": 1, | ||||
| 								"pass_auth": 0, | ||||
| 								"proxy_host_count": 0, | ||||
| 								"owner": { | ||||
| 									"id": 1, | ||||
| 									"created_on": "2024-10-07T22:43:55.000Z", | ||||
| 									"modified_on": "2024-10-08T12:52:54.000Z", | ||||
| 									"is_deleted": 0, | ||||
| 									"is_disabled": 0, | ||||
| 									"email": "admin@example.com", | ||||
| 									"name": "Administrator", | ||||
| 									"nickname": "some guy", | ||||
| 									"avatar": "//www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?default=mm", | ||||
| 									"roles": ["admin"] | ||||
| 								}, | ||||
| 								"items": [ | ||||
| 									{ | ||||
| 										"id": 1, | ||||
| 										"created_on": "2024-10-08T22:15:40.000Z", | ||||
| 										"modified_on": "2024-10-08T22:15:40.000Z", | ||||
| 										"access_list_id": 1, | ||||
| 										"username": "admin", | ||||
| 										"password": "", | ||||
| 										"meta": {}, | ||||
| 										"hint": "a****" | ||||
| 									}, | ||||
| 									{ | ||||
| 										"id": 2, | ||||
| 										"created_on": "2024-10-08T22:15:40.000Z", | ||||
| 										"modified_on": "2024-10-08T22:15:40.000Z", | ||||
| 										"access_list_id": 1, | ||||
| 										"username": "asdad", | ||||
| 										"password": "", | ||||
| 										"meta": {}, | ||||
| 										"hint": "a*****" | ||||
| 									} | ||||
| 								], | ||||
| 								"proxy_hosts": [], | ||||
| 								"clients": [ | ||||
| 									{ | ||||
| 										"id": 1, | ||||
| 										"created_on": "2024-10-08T22:15:40.000Z", | ||||
| 										"modified_on": "2024-10-08T22:15:40.000Z", | ||||
| 										"access_list_id": 1, | ||||
| 										"address": "127.0.0.1", | ||||
| 										"directive": "allow", | ||||
| 										"meta": {} | ||||
| 									} | ||||
| 								] | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../../components/access-list-object.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										39
									
								
								backend/schema/paths/nginx/certificates/certID/delete.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								backend/schema/paths/nginx/certificates/certID/delete.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | ||||
| { | ||||
| 	"operationId": "deleteCertificate", | ||||
| 	"summary": "Delete a Certificate", | ||||
| 	"tags": ["Certificates"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["certificates"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "path", | ||||
| 			"name": "certID", | ||||
| 			"schema": { | ||||
| 				"type": "integer", | ||||
| 				"minimum": 1 | ||||
| 			}, | ||||
| 			"required": true, | ||||
| 			"example": 2 | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": true | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"type": "boolean" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @@ -0,0 +1,35 @@ | ||||
| { | ||||
| 	"operationId": "downloadCertificate", | ||||
| 	"summary": "Downloads a Certificate", | ||||
| 	"tags": ["Certificates"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["certificates"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "path", | ||||
| 			"name": "certID", | ||||
| 			"schema": { | ||||
| 				"type": "integer", | ||||
| 				"minimum": 1 | ||||
| 			}, | ||||
| 			"required": true, | ||||
| 			"example": 1 | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/zip": { | ||||
| 					"schema": { | ||||
| 						"type": "string", | ||||
| 						"format": "binary" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										53
									
								
								backend/schema/paths/nginx/certificates/certID/get.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								backend/schema/paths/nginx/certificates/certID/get.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,53 @@ | ||||
| { | ||||
| 	"operationId": "getCertificate", | ||||
| 	"summary": "Get a Certificate", | ||||
| 	"tags": ["Certificates"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["certificates"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "path", | ||||
| 			"name": "certID", | ||||
| 			"schema": { | ||||
| 				"type": "integer", | ||||
| 				"minimum": 1 | ||||
| 			}, | ||||
| 			"required": true, | ||||
| 			"example": 1 | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"id": 4, | ||||
| 								"created_on": "2024-10-09T05:31:58.000Z", | ||||
| 								"modified_on": "2024-10-09T05:32:11.000Z", | ||||
| 								"owner_user_id": 1, | ||||
| 								"provider": "letsencrypt", | ||||
| 								"nice_name": "test.example.com", | ||||
| 								"domain_names": ["test.example.com"], | ||||
| 								"expires_on": "2025-01-07T04:34:18.000Z", | ||||
| 								"meta": { | ||||
| 									"letsencrypt_email": "jc@jc21.com", | ||||
| 									"letsencrypt_agree": true, | ||||
| 									"dns_challenge": false | ||||
| 								} | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../../../components/certificate-object.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @@ -0,0 +1,54 @@ | ||||
| { | ||||
| 	"operationId": "renewCertificate", | ||||
| 	"summary": "Renews a Certificate", | ||||
| 	"tags": ["Certificates"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["certificates"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "path", | ||||
| 			"name": "certID", | ||||
| 			"schema": { | ||||
| 				"type": "integer", | ||||
| 				"minimum": 1 | ||||
| 			}, | ||||
| 			"required": true, | ||||
| 			"example": 1 | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"expires_on": "2025-01-07T06:41:58.000Z", | ||||
| 								"modified_on": "2024-10-09T07:39:51.000Z", | ||||
| 								"id": 4, | ||||
| 								"created_on": "2024-10-09T05:31:58.000Z", | ||||
| 								"owner_user_id": 1, | ||||
| 								"is_deleted": 0, | ||||
| 								"provider": "letsencrypt", | ||||
| 								"nice_name": "My Test Cert", | ||||
| 								"domain_names": ["test.jc21.supernerd.pro"], | ||||
| 								"meta": { | ||||
| 									"letsencrypt_email": "jc@jc21.com", | ||||
| 									"letsencrypt_agree": true, | ||||
| 									"dns_challenge": false | ||||
| 								} | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../../../../components/certificate-object.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @@ -0,0 +1,63 @@ | ||||
| { | ||||
| 	"operationId": "uploadCertificate", | ||||
| 	"summary": "Uploads a custom Certificate", | ||||
| 	"tags": ["Certificates"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["certificates"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "path", | ||||
| 			"name": "certID", | ||||
| 			"schema": { | ||||
| 				"type": "integer", | ||||
| 				"minimum": 1 | ||||
| 			}, | ||||
| 			"required": true, | ||||
| 			"example": 1 | ||||
| 		} | ||||
| 	], | ||||
| 	"requestBody": { | ||||
| 		"description": "Certificate Files", | ||||
| 		"required": true, | ||||
| 		"content": { | ||||
| 			"multipart/form-data": { | ||||
| 				"schema": { | ||||
| 					"type": "object", | ||||
| 					"additionalProperties": false, | ||||
| 					"required": ["certificate", "certificate_key"], | ||||
| 					"properties": { | ||||
| 						"certificate": { | ||||
| 							"type": "string" | ||||
| 						}, | ||||
| 						"certificate_key": { | ||||
| 							"type": "string" | ||||
| 						}, | ||||
| 						"intermediate_certificate": { | ||||
| 							"type": "string" | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	}, | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"certificate": "-----BEGIN CERTIFICATE-----\nMIIEYDCCAsigAwIBAgIRAPoSC0hvitb26ODMlsH6YbowDQYJKoZIhvcNAQELBQAw\ngZExHjAcBgNVBAoTFW1rY2VydCBkZXZlbG9wbWVudCBDQTEzMDEGA1UECwwqamN1\ncm5vd0BKYW1pZXMtTGFwdG9wLmxvY2FsIChKYW1pZSBDdXJub3cpMTowOAYDVQQD\nDDFta2NlcnQgamN1cm5vd0BKYW1pZXMtTGFwdG9wLmxvY2FsIChKYW1pZSBDdXJu\nb3cpMB4XDTI0MTAwOTA3MjIxN1oXDTI3MDEwOTA3MjIxN1owXjEnMCUGA1UEChMe\nbWtjZXJ0IGRldmVsb3BtZW50IGNlcnRpZmljYXRlMTMwMQYDVQQLDCpqY3Vybm93\nQEphbWllcy1MYXB0b3AubG9jYWwgKEphbWllIEN1cm5vdykwggEiMA0GCSqGSIb3\nDQEBAQUAA4IBDwAwggEKAoIBAQC1n9j9C5Bes1ndqACDckERauxXVNKCnUlUM1bu\nGBx1xc+j2e2Ar23wUJJuWBY18VfT8yqfqVDktO2wrbmvZvLuPmXePOKbIKS+XXh+\n2NG9L5bDG9rwGFCRXnbQj+GWCdMfzx14+CR1IHgeYz6Cv/Si2/LJPCh/CoBfM4hU\nQJON3lxAWrWBpdbZnKYMrxuPBRfW9OuzTbCVXToQoxRAHiOR9081Xn1WeoKr7kVB\nIa5UphlvWXa12w1YmUwJu7YndnJGIavLWeNCVc7ZEo+nS8Wr/4QWicatIWZXpVaE\nOPhRoeplQDxNWg5b/Q26rYoVd7PrCmRs7sVcH79XzGONeH1PAgMBAAGjZTBjMA4G\nA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATAfBgNVHSMEGDAWgBSB\n/vfmBUd4W7CvyEMl7YpMVQs8vTAbBgNVHREEFDASghB0ZXN0LmV4YW1wbGUuY29t\nMA0GCSqGSIb3DQEBCwUAA4IBgQASwON/jPAHzcARSenY0ZGY1m5OVTYoQ/JWH0oy\nl8SyFCQFEXt7UHDD/eTtLT0vMyc190nP57P8lTnZGf7hSinZz1B1d6V4cmzxpk0s\nVXZT+irL6bJVJoMBHRpllKAhGULIo33baTrWFKA0oBuWx4AevSWKcLW5j87kEawn\nATCuMQ1I3ifR1mSlB7X8fb+vF+571q0NGuB3a42j6rdtXJ6SmH4+9B4qO0sfHDNt\nIImpLCH/tycDpcYrGSCn1QrekFG1bSEh+Bb9i8rqMDSDsYrTFPZTuOQ3EtjGni9u\nm+rEP3OyJg+md8c+0LVP7/UU4QWWnw3/Wolo5kSCxE8vNTFqi4GhVbdLnUtcIdTV\nXxuR6cKyW87Snj1a0nG76ZLclt/akxDhtzqeV60BO0p8pmiev8frp+E94wFNYCmp\n1cr3CnMEGRaficLSDFC6EBENzlZW2BQT6OMIV+g0NBgSyQe39s2zcdEl5+SzDVuw\nhp8bJUp/QN7pnOVCDbjTQ+HVMXw=\n-----END CERTIFICATE-----\n", | ||||
| 								"certificate_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC1n9j9C5Bes1nd\nqACDckERauxXVNKCnUlUM1buGBx1xc+j2e2Ar23wUJJuWBY18VfT8yqfqVDktO2w\nrbmvZvLuPmXePOKbIKS+XXh+2NG9L5bDG9rwGFCRXnbQj+GWCdMfzx14+CR1IHge\nYz6Cv/Si2/LJPCh/CoBfM4hUQJON3lxAWrWBpdbZnKYMrxuPBRfW9OuzTbCVXToQ\noxRAHiOR9081Xn1WeoKr7kVBIa5UphlvWXa12w1YmUwJu7YndnJGIavLWeNCVc7Z\nEo+nS8Wr/4QWicatIWZXpVaEOPhRoeplQDxNWg5b/Q26rYoVd7PrCmRs7sVcH79X\nzGONeH1PAgMBAAECggEAANb3Wtwl07pCjRrMvc7WbC0xYIn82yu8/g2qtjkYUJcU\nia5lQbYN7RGCS85Oc/tkq48xQEG5JQWNH8b918jDEMTrFab0aUEyYcru1q9L8PL6\nYHaNgZSrMrDcHcS8h0QOXNRJT5jeGkiHJaTR0irvB526tqF3knbK9yW22KTfycUe\na0Z9voKn5xRk1DCbHi/nk2EpT7xnjeQeLFaTIRXbS68omkr4YGhwWm5OizoyEGZu\nW0Zum5BkQyMr6kor3wdxOTG97ske2rcyvvHi+ErnwL0xBv0qY0Dhe8DpuXpDezqw\no72yY8h31Fu84i7sAj24YuE5Df8DozItFXQpkgbQ6QKBgQDPrufhvIFm2S/MzBdW\nH8JxY7CJlJPyxOvc1NIl9RczQGAQR90kx52cgIcuIGEG6/wJ/xnGfMmW40F0DnQ+\nN+oLgB9SFxeLkRb7s9Z/8N3uIN8JJFYcerEOiRQeN2BXEEWJ7bUThNtsVrAcKoUh\nELsDmnHW/3V+GKwhd0vpk842+wKBgQDf4PGLG9PTE5tlAoyHFodJRd2RhTJQkwsU\nMDNjLJ+KecLv+Nl+QiJhoflG1ccqtSFlBSCG067CDQ5LV0xm3mLJ7pfJoMgjcq31\nqjEmX4Ls91GuVOPtbwst3yFKjsHaSoKB5fBvWRcKFpBUezM7Qcw2JP3+dQT+bQIq\ncMTkRWDSvQKBgQDOdCQFDjxg/lR7NQOZ1PaZe61aBz5P3pxNqa7ClvMaOsuEQ7w9\nvMYcdtRq8TsjA2JImbSI0TIg8gb2FQxPcYwTJKl+FICOeIwtaSg5hTtJZpnxX5LO\nutTaC0DZjNkTk5RdOdWA8tihyUdGqKoxJY2TVmwGe2rUEDjFB++J4inkEwKBgB6V\ng0nmtkxanFrzOzFlMXwgEEHF+Xaqb9QFNa/xs6XeNnREAapO7JV75Cr6H2hFMFe1\nmJjyqCgYUoCWX3iaHtLJRnEkBtNY4kzyQB6m46LtsnnnXO/dwKA2oDyoPfFNRoDq\nYatEd3JIXNU9s2T/+x7WdOBjKhh72dTkbPFmTPDdAoGAU6rlPBevqOFdObYxdPq8\nEQWu44xqky3Mf5sBpOwtu6rqCYuziLiN7K4sjN5GD5mb1cEU+oS92ZiNcUQ7MFXk\n8yTYZ7U0VcXyAcpYreWwE8thmb0BohJBr+Mp3wLTx32x0HKdO6vpUa0d35LUTUmM\nRrKmPK/msHKK/sVHiL+NFqo=\n-----END PRIVATE KEY-----\n" | ||||
| 							} | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										54
									
								
								backend/schema/paths/nginx/certificates/get.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								backend/schema/paths/nginx/certificates/get.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | ||||
| { | ||||
| 	"operationId": "getCertificates", | ||||
| 	"summary": "Get all certificates", | ||||
| 	"tags": ["Certificates"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["certificates"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "query", | ||||
| 			"name": "expand", | ||||
| 			"description": "Expansions", | ||||
| 			"schema": { | ||||
| 				"type": "string", | ||||
| 				"enum": ["owner"] | ||||
| 			} | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": [ | ||||
| 								{ | ||||
| 									"id": 4, | ||||
| 									"created_on": "2024-10-09T05:31:58.000Z", | ||||
| 									"modified_on": "2024-10-09T05:32:11.000Z", | ||||
| 									"owner_user_id": 1, | ||||
| 									"provider": "letsencrypt", | ||||
| 									"nice_name": "test.example.com", | ||||
| 									"domain_names": ["test.example.com"], | ||||
| 									"expires_on": "2025-01-07T04:34:18.000Z", | ||||
| 									"meta": { | ||||
| 										"letsencrypt_email": "jc@jc21.com", | ||||
| 										"letsencrypt_agree": true, | ||||
| 										"dns_challenge": false | ||||
| 									} | ||||
| 								} | ||||
| 							] | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../../components/certificate-list.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										77
									
								
								backend/schema/paths/nginx/certificates/post.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								backend/schema/paths/nginx/certificates/post.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,77 @@ | ||||
| { | ||||
| 	"operationId": "createCertificate", | ||||
| 	"summary": "Create a Certificate", | ||||
| 	"tags": ["Certificates"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["certificates"] | ||||
| 		} | ||||
| 	], | ||||
| 	"requestBody": { | ||||
| 		"description": "Certificate Payload", | ||||
| 		"required": true, | ||||
| 		"content": { | ||||
| 			"application/json": { | ||||
| 				"schema": { | ||||
| 					"type": "object", | ||||
| 					"additionalProperties": false, | ||||
| 					"required": ["provider"], | ||||
| 					"properties": { | ||||
| 						"provider": { | ||||
| 							"$ref": "../../../components/certificate-object.json#/properties/provider" | ||||
| 						}, | ||||
| 						"nice_name": { | ||||
| 							"$ref": "../../../components/certificate-object.json#/properties/nice_name" | ||||
| 						}, | ||||
| 						"domain_names": { | ||||
| 							"$ref": "../../../components/certificate-object.json#/properties/domain_names" | ||||
| 						}, | ||||
| 						"meta": { | ||||
| 							"$ref": "../../../components/certificate-object.json#/properties/meta" | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	}, | ||||
| 	"responses": { | ||||
| 		"201": { | ||||
| 			"description": "201 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"expires_on": "2025-01-07 04:30:17", | ||||
| 								"modified_on": "2024-10-09 05:28:51", | ||||
| 								"id": 5, | ||||
| 								"created_on": "2024-10-09 05:28:35", | ||||
| 								"owner_user_id": 1, | ||||
| 								"is_deleted": 0, | ||||
| 								"provider": "letsencrypt", | ||||
| 								"nice_name": "test.example.com", | ||||
| 								"domain_names": ["test.example.com"], | ||||
| 								"meta": { | ||||
| 									"letsencrypt_email": "jc@jc21.com", | ||||
| 									"letsencrypt_agree": true, | ||||
| 									"dns_challenge": false, | ||||
| 									"letsencrypt_certificate": { | ||||
| 										"cn": "test.example.com", | ||||
| 										"issuer": "C = US, O = Let's Encrypt, CN = E5", | ||||
| 										"dates": { | ||||
| 											"from": 1728448218, | ||||
| 											"to": 1736224217 | ||||
| 										} | ||||
| 									} | ||||
| 								} | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../../components/certificate-object.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										40
									
								
								backend/schema/paths/nginx/certificates/test-http/get.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								backend/schema/paths/nginx/certificates/test-http/get.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | ||||
| { | ||||
| 	"operationId": "testHttpReach", | ||||
| 	"summary": "Test HTTP Reachability", | ||||
| 	"tags": ["Certificates"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["certificates"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "query", | ||||
| 			"name": "domains", | ||||
| 			"description": "Expansions", | ||||
| 			"required": true, | ||||
| 			"schema": { | ||||
| 				"type": "string", | ||||
| 				"example": "[\"test.example.ord\",\"test.example.com\",\"nonexistent.example.com\"]" | ||||
| 			} | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"test.example.org": "ok", | ||||
| 								"test.example.com": "other:Invalid domain or IP", | ||||
| 								"nonexistent.example.com": "404" | ||||
| 							} | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										75
									
								
								backend/schema/paths/nginx/certificates/validate/post.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								backend/schema/paths/nginx/certificates/validate/post.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,75 @@ | ||||
| { | ||||
| 	"operationId": "validateCertificates", | ||||
| 	"summary": "Validates given Custom Certificates", | ||||
| 	"tags": ["Certificates"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["certificates"] | ||||
| 		} | ||||
| 	], | ||||
| 	"requestBody": { | ||||
| 		"description": "Certificate Files", | ||||
| 		"required": true, | ||||
| 		"content": { | ||||
| 			"multipart/form-data": { | ||||
| 				"schema": { | ||||
| 					"type": "object", | ||||
| 					"additionalProperties": false, | ||||
| 					"required": ["certificate", "certificate_key"], | ||||
| 					"properties": { | ||||
| 						"certificate": { | ||||
| 							"type": "string" | ||||
| 						}, | ||||
| 						"certificate_key": { | ||||
| 							"type": "string" | ||||
| 						}, | ||||
| 						"intermediate_certificate": { | ||||
| 							"type": "string" | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	}, | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"certificate": { | ||||
| 									"cn": "mkcert", | ||||
| 									"issuer": "O = mkcert development CA, OU = jc@jc-Laptop.local (John Doe), CN = mkcert jc@jc-Laptop.local (John Doe)", | ||||
| 									"dates": { | ||||
| 										"from": 1728458537, | ||||
| 										"to": 1799479337 | ||||
| 									} | ||||
| 								}, | ||||
| 								"certificate_key": true | ||||
| 							} | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		}, | ||||
| 		"400": { | ||||
| 			"description": "400 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"error": { | ||||
| 									"code": 400, | ||||
| 									"message": "Certificate is not valid" | ||||
| 								} | ||||
| 							} | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										57
									
								
								backend/schema/paths/nginx/dead-hosts/get.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								backend/schema/paths/nginx/dead-hosts/get.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,57 @@ | ||||
| { | ||||
| 	"operationId": "getDeadHosts", | ||||
| 	"summary": "Get all 404 hosts", | ||||
| 	"tags": ["404 Hosts"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["dead_hosts"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "query", | ||||
| 			"name": "expand", | ||||
| 			"description": "Expansions", | ||||
| 			"schema": { | ||||
| 				"type": "string", | ||||
| 				"enum": ["owner", "certificate"] | ||||
| 			} | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": [ | ||||
| 								{ | ||||
| 									"id": 1, | ||||
| 									"created_on": "2024-10-09T01:38:52.000Z", | ||||
| 									"modified_on": "2024-10-09T01:38:52.000Z", | ||||
| 									"owner_user_id": 1, | ||||
| 									"domain_names": ["test.example.com"], | ||||
| 									"certificate_id": 0, | ||||
| 									"ssl_forced": 0, | ||||
| 									"advanced_config": "", | ||||
| 									"meta": { | ||||
| 										"nginx_online": true, | ||||
| 										"nginx_err": null | ||||
| 									}, | ||||
| 									"http2_support": 0, | ||||
| 									"enabled": 1, | ||||
| 									"hsts_enabled": 0, | ||||
| 									"hsts_subdomains": 0 | ||||
| 								} | ||||
| 							] | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../../components/dead-host-list.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										39
									
								
								backend/schema/paths/nginx/dead-hosts/hostID/delete.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								backend/schema/paths/nginx/dead-hosts/hostID/delete.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | ||||
| { | ||||
| 	"operationId": "deleteDeadHost", | ||||
| 	"summary": "Delete a 404 Host", | ||||
| 	"tags": ["404 Hosts"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["dead_hosts"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "path", | ||||
| 			"name": "hostID", | ||||
| 			"schema": { | ||||
| 				"type": "integer", | ||||
| 				"minimum": 1 | ||||
| 			}, | ||||
| 			"required": true, | ||||
| 			"example": 2 | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": true | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"type": "boolean" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @@ -0,0 +1,59 @@ | ||||
| { | ||||
| 	"operationId": "disableDeadHost", | ||||
| 	"summary": "Disable a 404 Host", | ||||
| 	"tags": ["404 Hosts"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["dead_hosts"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "path", | ||||
| 			"name": "hostID", | ||||
| 			"schema": { | ||||
| 				"type": "integer", | ||||
| 				"minimum": 1 | ||||
| 			}, | ||||
| 			"required": true, | ||||
| 			"example": 2 | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": true | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"type": "boolean" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		}, | ||||
| 		"400": { | ||||
| 			"description": "400 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"error": { | ||||
| 									"code": 400, | ||||
| 									"message": "Host is already disabled" | ||||
| 								} | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../../../../components/error-object.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @@ -0,0 +1,59 @@ | ||||
| { | ||||
| 	"operationId": "enableDeadHost", | ||||
| 	"summary": "Enable a 404 Host", | ||||
| 	"tags": ["404 Hosts"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["dead_hosts"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "path", | ||||
| 			"name": "hostID", | ||||
| 			"schema": { | ||||
| 				"type": "integer", | ||||
| 				"minimum": 1 | ||||
| 			}, | ||||
| 			"required": true, | ||||
| 			"example": 2 | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": true | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"type": "boolean" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		}, | ||||
| 		"400": { | ||||
| 			"description": "400 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"error": { | ||||
| 									"code": 400, | ||||
| 									"message": "Host is already enabled" | ||||
| 								} | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../../../../components/error-object.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										56
									
								
								backend/schema/paths/nginx/dead-hosts/hostID/get.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								backend/schema/paths/nginx/dead-hosts/hostID/get.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | ||||
| { | ||||
| 	"operationId": "getDeadHost", | ||||
| 	"summary": "Get a 404 Host", | ||||
| 	"tags": ["404 Hosts"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["dead_hosts"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "path", | ||||
| 			"name": "hostID", | ||||
| 			"schema": { | ||||
| 				"type": "integer", | ||||
| 				"minimum": 1 | ||||
| 			}, | ||||
| 			"required": true, | ||||
| 			"example": 1 | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"id": 1, | ||||
| 								"created_on": "2024-10-09T01:38:52.000Z", | ||||
| 								"modified_on": "2024-10-09T01:38:52.000Z", | ||||
| 								"owner_user_id": 1, | ||||
| 								"domain_names": ["test.example.com"], | ||||
| 								"certificate_id": 0, | ||||
| 								"ssl_forced": 0, | ||||
| 								"advanced_config": "", | ||||
| 								"meta": { | ||||
| 									"nginx_online": true, | ||||
| 									"nginx_err": null | ||||
| 								}, | ||||
| 								"http2_support": 0, | ||||
| 								"enabled": 1, | ||||
| 								"hsts_enabled": 0, | ||||
| 								"hsts_subdomains": 0 | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../../../components/dead-host-object.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										110
									
								
								backend/schema/paths/nginx/dead-hosts/hostID/put.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								backend/schema/paths/nginx/dead-hosts/hostID/put.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,110 @@ | ||||
| { | ||||
| 	"operationId": "updateDeadHost", | ||||
| 	"summary": "Update a 404 Host", | ||||
| 	"tags": ["404 Hosts"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["dead_hosts"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "path", | ||||
| 			"name": "hostID", | ||||
| 			"schema": { | ||||
| 				"type": "integer", | ||||
| 				"minimum": 1 | ||||
| 			}, | ||||
| 			"required": true, | ||||
| 			"example": 2 | ||||
| 		} | ||||
| 	], | ||||
| 	"requestBody": { | ||||
| 		"description": "404 Host Payload", | ||||
| 		"required": true, | ||||
| 		"content": { | ||||
| 			"application/json": { | ||||
| 				"schema": { | ||||
| 					"type": "object", | ||||
| 					"additionalProperties": false, | ||||
| 					"minProperties": 1, | ||||
| 					"properties": { | ||||
| 						"domain_names": { | ||||
| 							"$ref": "../../../../components/dead-host-object.json#/properties/domain_names" | ||||
| 						}, | ||||
| 						"certificate_id": { | ||||
| 							"$ref": "../../../../components/dead-host-object.json#/properties/certificate_id" | ||||
| 						}, | ||||
| 						"ssl_forced": { | ||||
| 							"$ref": "../../../../components/dead-host-object.json#/properties/ssl_forced" | ||||
| 						}, | ||||
| 						"hsts_enabled": { | ||||
| 							"$ref": "../../../../components/dead-host-object.json#/properties/hsts_enabled" | ||||
| 						}, | ||||
| 						"hsts_subdomains": { | ||||
| 							"$ref": "../../../../components/dead-host-object.json#/properties/hsts_subdomains" | ||||
| 						}, | ||||
| 						"http2_support": { | ||||
| 							"$ref": "../../../../components/dead-host-object.json#/properties/http2_support" | ||||
| 						}, | ||||
| 						"advanced_config": { | ||||
| 							"$ref": "../../../../components/dead-host-object.json#/properties/advanced_config" | ||||
| 						}, | ||||
| 						"meta": { | ||||
| 							"$ref": "../../../../components/dead-host-object.json#/properties/meta" | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	}, | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"id": 1, | ||||
| 								"created_on": "2024-10-09T01:38:52.000Z", | ||||
| 								"modified_on": "2024-10-09T01:46:06.000Z", | ||||
| 								"owner_user_id": 1, | ||||
| 								"domain_names": ["test.example.com"], | ||||
| 								"certificate_id": 0, | ||||
| 								"ssl_forced": 0, | ||||
| 								"advanced_config": "", | ||||
| 								"meta": { | ||||
| 									"nginx_online": true, | ||||
| 									"nginx_err": null | ||||
| 								}, | ||||
| 								"http2_support": 0, | ||||
| 								"enabled": 1, | ||||
| 								"hsts_enabled": 0, | ||||
| 								"hsts_subdomains": 0, | ||||
| 								"owner": { | ||||
| 									"id": 1, | ||||
| 									"created_on": "2024-10-09T00:59:56.000Z", | ||||
| 									"modified_on": "2024-10-09T00:59:56.000Z", | ||||
| 									"is_deleted": 0, | ||||
| 									"is_disabled": 0, | ||||
| 									"email": "admin@example.com", | ||||
| 									"name": "Administrator", | ||||
| 									"nickname": "Admin", | ||||
| 									"avatar": "", | ||||
| 									"roles": ["admin"] | ||||
| 								}, | ||||
| 								"certificate": null, | ||||
| 								"use_default_location": true, | ||||
| 								"ipv6": true | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../../../components/dead-host-object.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										95
									
								
								backend/schema/paths/nginx/dead-hosts/post.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										95
									
								
								backend/schema/paths/nginx/dead-hosts/post.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,95 @@ | ||||
| { | ||||
| 	"operationId": "create404Host", | ||||
| 	"summary": "Create a 404 Host", | ||||
| 	"tags": ["404 Hosts"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["dead_hosts"] | ||||
| 		} | ||||
| 	], | ||||
| 	"requestBody": { | ||||
| 		"description": "404 Host Payload", | ||||
| 		"required": true, | ||||
| 		"content": { | ||||
| 			"application/json": { | ||||
| 				"schema": { | ||||
| 					"type": "object", | ||||
| 					"additionalProperties": false, | ||||
| 					"required": ["domain_names"], | ||||
| 					"properties": { | ||||
| 						"domain_names": { | ||||
| 							"$ref": "../../../components/dead-host-object.json#/properties/domain_names" | ||||
| 						}, | ||||
| 						"certificate_id": { | ||||
| 							"$ref": "../../../components/dead-host-object.json#/properties/certificate_id" | ||||
| 						}, | ||||
| 						"ssl_forced": { | ||||
| 							"$ref": "../../../components/dead-host-object.json#/properties/ssl_forced" | ||||
| 						}, | ||||
| 						"hsts_enabled": { | ||||
| 							"$ref": "../../../components/dead-host-object.json#/properties/hsts_enabled" | ||||
| 						}, | ||||
| 						"hsts_subdomains": { | ||||
| 							"$ref": "../../../components/dead-host-object.json#/properties/hsts_subdomains" | ||||
| 						}, | ||||
| 						"http2_support": { | ||||
| 							"$ref": "../../../components/dead-host-object.json#/properties/http2_support" | ||||
| 						}, | ||||
| 						"advanced_config": { | ||||
| 							"$ref": "../../../components/dead-host-object.json#/properties/advanced_config" | ||||
| 						}, | ||||
| 						"meta": { | ||||
| 							"$ref": "../../../components/dead-host-object.json#/properties/meta" | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	}, | ||||
| 	"responses": { | ||||
| 		"201": { | ||||
| 			"description": "201 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"id": 1, | ||||
| 								"created_on": "2024-10-09T01:38:52.000Z", | ||||
| 								"modified_on": "2024-10-09T01:38:52.000Z", | ||||
| 								"owner_user_id": 1, | ||||
| 								"domain_names": ["test.example.com"], | ||||
| 								"certificate_id": 0, | ||||
| 								"ssl_forced": 0, | ||||
| 								"advanced_config": "", | ||||
| 								"meta": {}, | ||||
| 								"http2_support": 0, | ||||
| 								"enabled": 1, | ||||
| 								"hsts_enabled": 0, | ||||
| 								"hsts_subdomains": 0, | ||||
| 								"certificate": null, | ||||
| 								"owner": { | ||||
| 									"id": 1, | ||||
| 									"created_on": "2024-10-09T00:59:56.000Z", | ||||
| 									"modified_on": "2024-10-09T00:59:56.000Z", | ||||
| 									"is_deleted": 0, | ||||
| 									"is_disabled": 0, | ||||
| 									"email": "admin@example.com", | ||||
| 									"name": "Administrator", | ||||
| 									"nickname": "Admin", | ||||
| 									"avatar": "", | ||||
| 									"roles": ["admin"] | ||||
| 								}, | ||||
| 								"use_default_location": true, | ||||
| 								"ipv6": true | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../../components/dead-host-object.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										65
									
								
								backend/schema/paths/nginx/proxy-hosts/get.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								backend/schema/paths/nginx/proxy-hosts/get.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,65 @@ | ||||
| { | ||||
| 	"operationId": "getProxyHosts", | ||||
| 	"summary": "Get all proxy hosts", | ||||
| 	"tags": ["Proxy Hosts"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["proxy_hosts"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "query", | ||||
| 			"name": "expand", | ||||
| 			"description": "Expansions", | ||||
| 			"schema": { | ||||
| 				"type": "string", | ||||
| 				"enum": ["access_list", "owner", "certificate"] | ||||
| 			} | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": [ | ||||
| 								{ | ||||
| 									"id": 1, | ||||
| 									"created_on": "2024-10-08T23:23:03.000Z", | ||||
| 									"modified_on": "2024-10-08T23:23:04.000Z", | ||||
| 									"owner_user_id": 1, | ||||
| 									"domain_names": ["test.example.com"], | ||||
| 									"forward_host": "127.0.0.1", | ||||
| 									"forward_port": 8989, | ||||
| 									"access_list_id": 0, | ||||
| 									"certificate_id": 0, | ||||
| 									"ssl_forced": 0, | ||||
| 									"caching_enabled": 0, | ||||
| 									"block_exploits": 0, | ||||
| 									"advanced_config": "", | ||||
| 									"meta": { | ||||
| 										"nginx_online": true, | ||||
| 										"nginx_err": null | ||||
| 									}, | ||||
| 									"allow_websocket_upgrade": 0, | ||||
| 									"http2_support": 0, | ||||
| 									"forward_scheme": "http", | ||||
| 									"enabled": 1, | ||||
| 									"locations": null, | ||||
| 									"hsts_enabled": 0, | ||||
| 									"hsts_subdomains": 0 | ||||
| 								} | ||||
| 							] | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../../components/proxy-host-list.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										39
									
								
								backend/schema/paths/nginx/proxy-hosts/hostID/delete.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								backend/schema/paths/nginx/proxy-hosts/hostID/delete.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | ||||
| { | ||||
| 	"operationId": "deleteProxyHost", | ||||
| 	"summary": "Delete a Proxy Host", | ||||
| 	"tags": ["Proxy Hosts"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["proxy_hosts"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "path", | ||||
| 			"name": "hostID", | ||||
| 			"schema": { | ||||
| 				"type": "integer", | ||||
| 				"minimum": 1 | ||||
| 			}, | ||||
| 			"required": true, | ||||
| 			"example": 2 | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": true | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"type": "boolean" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @@ -0,0 +1,59 @@ | ||||
| { | ||||
| 	"operationId": "disableProxyHost", | ||||
| 	"summary": "Disable a Proxy Host", | ||||
| 	"tags": ["Proxy Hosts"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["proxy_hosts"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "path", | ||||
| 			"name": "hostID", | ||||
| 			"schema": { | ||||
| 				"type": "integer", | ||||
| 				"minimum": 1 | ||||
| 			}, | ||||
| 			"required": true, | ||||
| 			"example": 2 | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": true | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"type": "boolean" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		}, | ||||
| 		"400": { | ||||
| 			"description": "400 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"error": { | ||||
| 									"code": 400, | ||||
| 									"message": "Host is already disabled" | ||||
| 								} | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../../../../components/error-object.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @@ -0,0 +1,59 @@ | ||||
| { | ||||
| 	"operationId": "enableProxyHost", | ||||
| 	"summary": "Enable a Proxy Host", | ||||
| 	"tags": ["Proxy Hosts"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["proxy_hosts"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "path", | ||||
| 			"name": "hostID", | ||||
| 			"schema": { | ||||
| 				"type": "integer", | ||||
| 				"minimum": 1 | ||||
| 			}, | ||||
| 			"required": true, | ||||
| 			"example": 2 | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": true | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"type": "boolean" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		}, | ||||
| 		"400": { | ||||
| 			"description": "400 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"error": { | ||||
| 									"code": 400, | ||||
| 									"message": "Host is already enabled" | ||||
| 								} | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../../../../components/error-object.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										64
									
								
								backend/schema/paths/nginx/proxy-hosts/hostID/get.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								backend/schema/paths/nginx/proxy-hosts/hostID/get.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,64 @@ | ||||
| { | ||||
| 	"operationId": "getProxyHost", | ||||
| 	"summary": "Get a Proxy Host", | ||||
| 	"tags": ["Proxy Hosts"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["proxy_hosts"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "path", | ||||
| 			"name": "hostID", | ||||
| 			"schema": { | ||||
| 				"type": "integer", | ||||
| 				"minimum": 1 | ||||
| 			}, | ||||
| 			"required": true, | ||||
| 			"example": 1 | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"id": 1, | ||||
| 								"created_on": "2024-10-08T23:23:03.000Z", | ||||
| 								"modified_on": "2024-10-08T23:26:38.000Z", | ||||
| 								"owner_user_id": 1, | ||||
| 								"domain_names": ["test.example.com"], | ||||
| 								"forward_host": "192.168.0.10", | ||||
| 								"forward_port": 8989, | ||||
| 								"access_list_id": 0, | ||||
| 								"certificate_id": 0, | ||||
| 								"ssl_forced": 0, | ||||
| 								"caching_enabled": 0, | ||||
| 								"block_exploits": 0, | ||||
| 								"advanced_config": "", | ||||
| 								"meta": { | ||||
| 									"nginx_online": true, | ||||
| 									"nginx_err": null | ||||
| 								}, | ||||
| 								"allow_websocket_upgrade": 0, | ||||
| 								"http2_support": 0, | ||||
| 								"forward_scheme": "http", | ||||
| 								"enabled": 1, | ||||
| 								"locations": null, | ||||
| 								"hsts_enabled": 0, | ||||
| 								"hsts_subdomains": 0 | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../../../components/proxy-host-object.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										145
									
								
								backend/schema/paths/nginx/proxy-hosts/hostID/put.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										145
									
								
								backend/schema/paths/nginx/proxy-hosts/hostID/put.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,145 @@ | ||||
| { | ||||
| 	"operationId": "updateProxyHost", | ||||
| 	"summary": "Update a Proxy Host", | ||||
| 	"tags": ["Proxy Hosts"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["proxy_hosts"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "path", | ||||
| 			"name": "hostID", | ||||
| 			"schema": { | ||||
| 				"type": "integer", | ||||
| 				"minimum": 1 | ||||
| 			}, | ||||
| 			"required": true, | ||||
| 			"example": 2 | ||||
| 		} | ||||
| 	], | ||||
| 	"requestBody": { | ||||
| 		"description": "Proxy Host Payload", | ||||
| 		"required": true, | ||||
| 		"content": { | ||||
| 			"application/json": { | ||||
| 				"schema": { | ||||
| 					"type": "object", | ||||
| 					"additionalProperties": false, | ||||
| 					"minProperties": 1, | ||||
| 					"properties": { | ||||
| 						"domain_names": { | ||||
| 							"$ref": "../../../../components/proxy-host-object.json#/properties/domain_names" | ||||
| 						}, | ||||
| 						"forward_scheme": { | ||||
| 							"$ref": "../../../../components/proxy-host-object.json#/properties/forward_scheme" | ||||
| 						}, | ||||
| 						"forward_host": { | ||||
| 							"$ref": "../../../../components/proxy-host-object.json#/properties/forward_host" | ||||
| 						}, | ||||
| 						"forward_port": { | ||||
| 							"$ref": "../../../../components/proxy-host-object.json#/properties/forward_port" | ||||
| 						}, | ||||
| 						"certificate_id": { | ||||
| 							"$ref": "../../../../components/proxy-host-object.json#/properties/certificate_id" | ||||
| 						}, | ||||
| 						"ssl_forced": { | ||||
| 							"$ref": "../../../../components/proxy-host-object.json#/properties/ssl_forced" | ||||
| 						}, | ||||
| 						"hsts_enabled": { | ||||
| 							"$ref": "../../../../components/proxy-host-object.json#/properties/hsts_enabled" | ||||
| 						}, | ||||
| 						"hsts_subdomains": { | ||||
| 							"$ref": "../../../../components/proxy-host-object.json#/properties/hsts_subdomains" | ||||
| 						}, | ||||
| 						"http2_support": { | ||||
| 							"$ref": "../../../../components/proxy-host-object.json#/properties/http2_support" | ||||
| 						}, | ||||
| 						"block_exploits": { | ||||
| 							"$ref": "../../../../components/proxy-host-object.json#/properties/block_exploits" | ||||
| 						}, | ||||
| 						"caching_enabled": { | ||||
| 							"$ref": "../../../../components/proxy-host-object.json#/properties/caching_enabled" | ||||
| 						}, | ||||
| 						"allow_websocket_upgrade": { | ||||
| 							"$ref": "../../../../components/proxy-host-object.json#/properties/allow_websocket_upgrade" | ||||
| 						}, | ||||
| 						"access_list_id": { | ||||
| 							"$ref": "../../../../components/proxy-host-object.json#/properties/access_list_id" | ||||
| 						}, | ||||
| 						"advanced_config": { | ||||
| 							"$ref": "../../../../components/proxy-host-object.json#/properties/advanced_config" | ||||
| 						}, | ||||
| 						"enabled": { | ||||
| 							"$ref": "../../../../components/proxy-host-object.json#/properties/enabled" | ||||
| 						}, | ||||
| 						"meta": { | ||||
| 							"$ref": "../../../../components/proxy-host-object.json#/properties/meta" | ||||
| 						}, | ||||
| 						"locations": { | ||||
| 							"$ref": "../../../../components/proxy-host-object.json#/properties/locations" | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	}, | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"id": 1, | ||||
| 								"created_on": "2024-10-08T23:23:03.000Z", | ||||
| 								"modified_on": "2024-10-08T23:26:37.000Z", | ||||
| 								"owner_user_id": 1, | ||||
| 								"domain_names": ["test.example.com"], | ||||
| 								"forward_host": "192.168.0.10", | ||||
| 								"forward_port": 8989, | ||||
| 								"access_list_id": 0, | ||||
| 								"certificate_id": 0, | ||||
| 								"ssl_forced": 0, | ||||
| 								"caching_enabled": 0, | ||||
| 								"block_exploits": 0, | ||||
| 								"advanced_config": "", | ||||
| 								"meta": { | ||||
| 									"nginx_online": true, | ||||
| 									"nginx_err": null | ||||
| 								}, | ||||
| 								"allow_websocket_upgrade": 0, | ||||
| 								"http2_support": 0, | ||||
| 								"forward_scheme": "http", | ||||
| 								"enabled": 1, | ||||
| 								"hsts_enabled": 0, | ||||
| 								"hsts_subdomains": 0, | ||||
| 								"owner": { | ||||
| 									"id": 1, | ||||
| 									"created_on": "2024-10-07T22:43:55.000Z", | ||||
| 									"modified_on": "2024-10-08T12:52:54.000Z", | ||||
| 									"is_deleted": 0, | ||||
| 									"is_disabled": 0, | ||||
| 									"email": "admin@example.com", | ||||
| 									"name": "Administrator", | ||||
| 									"nickname": "some guy", | ||||
| 									"avatar": "//www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?default=mm", | ||||
| 									"roles": ["admin"] | ||||
| 								}, | ||||
| 								"certificate": null, | ||||
| 								"access_list": null, | ||||
| 								"use_default_location": true, | ||||
| 								"ipv6": true | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../../../components/proxy-host-object.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										130
									
								
								backend/schema/paths/nginx/proxy-hosts/post.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										130
									
								
								backend/schema/paths/nginx/proxy-hosts/post.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,130 @@ | ||||
| { | ||||
| 	"operationId": "createProxyHost", | ||||
| 	"summary": "Create a Proxy Host", | ||||
| 	"tags": ["Proxy Hosts"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["proxy_hosts"] | ||||
| 		} | ||||
| 	], | ||||
| 	"requestBody": { | ||||
| 		"description": "Proxy Host Payload", | ||||
| 		"required": true, | ||||
| 		"content": { | ||||
| 			"application/json": { | ||||
| 				"schema": { | ||||
| 					"type": "object", | ||||
| 					"additionalProperties": false, | ||||
| 					"required": ["domain_names", "forward_scheme", "forward_host", "forward_port"], | ||||
| 					"properties": { | ||||
| 						"domain_names": { | ||||
| 							"$ref": "../../../components/proxy-host-object.json#/properties/domain_names" | ||||
| 						}, | ||||
| 						"forward_scheme": { | ||||
| 							"$ref": "../../../components/proxy-host-object.json#/properties/forward_scheme" | ||||
| 						}, | ||||
| 						"forward_host": { | ||||
| 							"$ref": "../../../components/proxy-host-object.json#/properties/forward_host" | ||||
| 						}, | ||||
| 						"forward_port": { | ||||
| 							"$ref": "../../../components/proxy-host-object.json#/properties/forward_port" | ||||
| 						}, | ||||
| 						"certificate_id": { | ||||
| 							"$ref": "../../../components/proxy-host-object.json#/properties/certificate_id" | ||||
| 						}, | ||||
| 						"ssl_forced": { | ||||
| 							"$ref": "../../../components/proxy-host-object.json#/properties/ssl_forced" | ||||
| 						}, | ||||
| 						"hsts_enabled": { | ||||
| 							"$ref": "../../../components/proxy-host-object.json#/properties/hsts_enabled" | ||||
| 						}, | ||||
| 						"hsts_subdomains": { | ||||
| 							"$ref": "../../../components/proxy-host-object.json#/properties/hsts_subdomains" | ||||
| 						}, | ||||
| 						"http2_support": { | ||||
| 							"$ref": "../../../components/proxy-host-object.json#/properties/http2_support" | ||||
| 						}, | ||||
| 						"block_exploits": { | ||||
| 							"$ref": "../../../components/proxy-host-object.json#/properties/block_exploits" | ||||
| 						}, | ||||
| 						"caching_enabled": { | ||||
| 							"$ref": "../../../components/proxy-host-object.json#/properties/caching_enabled" | ||||
| 						}, | ||||
| 						"allow_websocket_upgrade": { | ||||
| 							"$ref": "../../../components/proxy-host-object.json#/properties/allow_websocket_upgrade" | ||||
| 						}, | ||||
| 						"access_list_id": { | ||||
| 							"$ref": "../../../components/proxy-host-object.json#/properties/access_list_id" | ||||
| 						}, | ||||
| 						"advanced_config": { | ||||
| 							"$ref": "../../../components/proxy-host-object.json#/properties/advanced_config" | ||||
| 						}, | ||||
| 						"enabled": { | ||||
| 							"$ref": "../../../components/proxy-host-object.json#/properties/enabled" | ||||
| 						}, | ||||
| 						"meta": { | ||||
| 							"$ref": "../../../components/proxy-host-object.json#/properties/meta" | ||||
| 						}, | ||||
| 						"locations": { | ||||
| 							"$ref": "../../../components/proxy-host-object.json#/properties/locations" | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	}, | ||||
| 	"responses": { | ||||
| 		"201": { | ||||
| 			"description": "201 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"id": 1, | ||||
| 								"created_on": "2024-10-08T23:23:03.000Z", | ||||
| 								"modified_on": "2024-10-08T23:23:03.000Z", | ||||
| 								"owner_user_id": 1, | ||||
| 								"domain_names": ["test.example.com"], | ||||
| 								"forward_host": "127.0.0.1", | ||||
| 								"forward_port": 8989, | ||||
| 								"access_list_id": 0, | ||||
| 								"certificate_id": 0, | ||||
| 								"ssl_forced": 0, | ||||
| 								"caching_enabled": 0, | ||||
| 								"block_exploits": 0, | ||||
| 								"advanced_config": "", | ||||
| 								"meta": {}, | ||||
| 								"allow_websocket_upgrade": 0, | ||||
| 								"http2_support": 0, | ||||
| 								"forward_scheme": "http", | ||||
| 								"enabled": 1, | ||||
| 								"hsts_enabled": 0, | ||||
| 								"hsts_subdomains": 0, | ||||
| 								"certificate": null, | ||||
| 								"owner": { | ||||
| 									"id": 1, | ||||
| 									"created_on": "2024-10-07T22:43:55.000Z", | ||||
| 									"modified_on": "2024-10-08T12:52:54.000Z", | ||||
| 									"is_deleted": 0, | ||||
| 									"is_disabled": 0, | ||||
| 									"email": "admin@example.com", | ||||
| 									"name": "Administrator", | ||||
| 									"nickname": "some guy", | ||||
| 									"avatar": "//www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?default=mm", | ||||
| 									"roles": ["admin"] | ||||
| 								}, | ||||
| 								"access_list": null, | ||||
| 								"use_default_location": true, | ||||
| 								"ipv6": true | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../../components/proxy-host-object.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										62
									
								
								backend/schema/paths/nginx/redirection-hosts/get.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								backend/schema/paths/nginx/redirection-hosts/get.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,62 @@ | ||||
| { | ||||
| 	"operationId": "getRedirectionHosts", | ||||
| 	"summary": "Get all Redirection hosts", | ||||
| 	"tags": ["Redirection Hosts"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["redirection_hosts"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "query", | ||||
| 			"name": "expand", | ||||
| 			"description": "Expansions", | ||||
| 			"schema": { | ||||
| 				"type": "string", | ||||
| 				"enum": ["owner", "certificate"] | ||||
| 			} | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": [ | ||||
| 								{ | ||||
| 									"id": 1, | ||||
| 									"created_on": "2024-10-09T01:13:12.000Z", | ||||
| 									"modified_on": "2024-10-09T01:13:13.000Z", | ||||
| 									"owner_user_id": 1, | ||||
| 									"domain_names": ["test.example.com"], | ||||
| 									"forward_domain_name": "something-else.com", | ||||
| 									"preserve_path": 0, | ||||
| 									"certificate_id": 0, | ||||
| 									"ssl_forced": 0, | ||||
| 									"block_exploits": 0, | ||||
| 									"advanced_config": "", | ||||
| 									"meta": { | ||||
| 										"nginx_online": true, | ||||
| 										"nginx_err": null | ||||
| 									}, | ||||
| 									"http2_support": 0, | ||||
| 									"enabled": 1, | ||||
| 									"hsts_enabled": 0, | ||||
| 									"hsts_subdomains": 0, | ||||
| 									"forward_scheme": "http", | ||||
| 									"forward_http_code": 301 | ||||
| 								} | ||||
| 							] | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../../components/redirection-host-list.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @@ -0,0 +1,39 @@ | ||||
| { | ||||
| 	"operationId": "deleteRedirectionHost", | ||||
| 	"summary": "Delete a Redirection Host", | ||||
| 	"tags": ["Redirection Hosts"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["redirection_hosts"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "path", | ||||
| 			"name": "hostID", | ||||
| 			"schema": { | ||||
| 				"type": "integer", | ||||
| 				"minimum": 1 | ||||
| 			}, | ||||
| 			"required": true, | ||||
| 			"example": 2 | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": true | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"type": "boolean" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @@ -0,0 +1,59 @@ | ||||
| { | ||||
| 	"operationId": "disableRedirectionHost", | ||||
| 	"summary": "Disable a Redirection Host", | ||||
| 	"tags": ["Redirection Hosts"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["redirection_hosts"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "path", | ||||
| 			"name": "hostID", | ||||
| 			"schema": { | ||||
| 				"type": "integer", | ||||
| 				"minimum": 1 | ||||
| 			}, | ||||
| 			"required": true, | ||||
| 			"example": 2 | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": true | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"type": "boolean" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		}, | ||||
| 		"400": { | ||||
| 			"description": "400 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"error": { | ||||
| 									"code": 400, | ||||
| 									"message": "Host is already disabled" | ||||
| 								} | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../../../../components/error-object.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @@ -0,0 +1,59 @@ | ||||
| { | ||||
| 	"operationId": "enableRedirectionHost", | ||||
| 	"summary": "Enable a Redirection Host", | ||||
| 	"tags": ["Redirection Hosts"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["redirection_hosts"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "path", | ||||
| 			"name": "hostID", | ||||
| 			"schema": { | ||||
| 				"type": "integer", | ||||
| 				"minimum": 1 | ||||
| 			}, | ||||
| 			"required": true, | ||||
| 			"example": 2 | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": true | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"type": "boolean" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		}, | ||||
| 		"400": { | ||||
| 			"description": "400 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"error": { | ||||
| 									"code": 400, | ||||
| 									"message": "Host is already enabled" | ||||
| 								} | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../../../../components/error-object.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										61
									
								
								backend/schema/paths/nginx/redirection-hosts/hostID/get.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								backend/schema/paths/nginx/redirection-hosts/hostID/get.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,61 @@ | ||||
| { | ||||
| 	"operationId": "getRedirectionHost", | ||||
| 	"summary": "Get a Redirection Host", | ||||
| 	"tags": ["Redirection Hosts"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["redirection_hosts"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "path", | ||||
| 			"name": "hostID", | ||||
| 			"schema": { | ||||
| 				"type": "integer", | ||||
| 				"minimum": 1 | ||||
| 			}, | ||||
| 			"required": true, | ||||
| 			"example": 1 | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"id": 1, | ||||
| 								"created_on": "2024-10-09T01:13:12.000Z", | ||||
| 								"modified_on": "2024-10-09T01:13:13.000Z", | ||||
| 								"owner_user_id": 1, | ||||
| 								"domain_names": ["test.example.com"], | ||||
| 								"forward_domain_name": "something-else.com", | ||||
| 								"preserve_path": 0, | ||||
| 								"certificate_id": 0, | ||||
| 								"ssl_forced": 0, | ||||
| 								"block_exploits": 0, | ||||
| 								"advanced_config": "", | ||||
| 								"meta": { | ||||
| 									"nginx_online": true, | ||||
| 									"nginx_err": null | ||||
| 								}, | ||||
| 								"http2_support": 0, | ||||
| 								"enabled": 1, | ||||
| 								"hsts_enabled": 0, | ||||
| 								"hsts_subdomains": 0, | ||||
| 								"forward_scheme": "http", | ||||
| 								"forward_http_code": 301 | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../../../components/redirection-host-object.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										130
									
								
								backend/schema/paths/nginx/redirection-hosts/hostID/put.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										130
									
								
								backend/schema/paths/nginx/redirection-hosts/hostID/put.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,130 @@ | ||||
| { | ||||
| 	"operationId": "updateRedirectionHost", | ||||
| 	"summary": "Update a Redirection Host", | ||||
| 	"tags": ["Redirection Hosts"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["redirection_hosts"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "path", | ||||
| 			"name": "hostID", | ||||
| 			"schema": { | ||||
| 				"type": "integer", | ||||
| 				"minimum": 1 | ||||
| 			}, | ||||
| 			"required": true, | ||||
| 			"example": 2 | ||||
| 		} | ||||
| 	], | ||||
| 	"requestBody": { | ||||
| 		"description": "Redirection Host       Payload", | ||||
| 		"required": true, | ||||
| 		"content": { | ||||
| 			"application/json": { | ||||
| 				"schema": { | ||||
| 					"type": "object", | ||||
| 					"additionalProperties": false, | ||||
| 					"minProperties": 1, | ||||
| 					"properties": { | ||||
| 						"domain_names": { | ||||
| 							"$ref": "../../../../components/redirection-host-object.json#/properties/domain_names" | ||||
| 						}, | ||||
| 						"forward_http_code": { | ||||
| 							"$ref": "../../../../components/redirection-host-object.json#/properties/forward_http_code" | ||||
| 						}, | ||||
| 						"forward_scheme": { | ||||
| 							"$ref": "../../../../components/redirection-host-object.json#/properties/forward_scheme" | ||||
| 						}, | ||||
| 						"forward_domain_name": { | ||||
| 							"$ref": "../../../../components/redirection-host-object.json#/properties/forward_domain_name" | ||||
| 						}, | ||||
| 						"preserve_path": { | ||||
| 							"$ref": "../../../../components/redirection-host-object.json#/properties/preserve_path" | ||||
| 						}, | ||||
| 						"certificate_id": { | ||||
| 							"$ref": "../../../../components/redirection-host-object.json#/properties/certificate_id" | ||||
| 						}, | ||||
| 						"ssl_forced": { | ||||
| 							"$ref": "../../../../components/redirection-host-object.json#/properties/ssl_forced" | ||||
| 						}, | ||||
| 						"hsts_enabled": { | ||||
| 							"$ref": "../../../../components/redirection-host-object.json#/properties/hsts_enabled" | ||||
| 						}, | ||||
| 						"hsts_subdomains": { | ||||
| 							"$ref": "../../../../components/redirection-host-object.json#/properties/hsts_subdomains" | ||||
| 						}, | ||||
| 						"http2_support": { | ||||
| 							"$ref": "../../../../components/redirection-host-object.json#/properties/http2_support" | ||||
| 						}, | ||||
| 						"block_exploits": { | ||||
| 							"$ref": "../../../../components/redirection-host-object.json#/properties/block_exploits" | ||||
| 						}, | ||||
| 						"advanced_config": { | ||||
| 							"$ref": "../../../../components/redirection-host-object.json#/properties/advanced_config" | ||||
| 						}, | ||||
| 						"meta": { | ||||
| 							"$ref": "../../../../components/redirection-host-object.json#/properties/meta" | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	}, | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"id": 1, | ||||
| 								"created_on": "2024-10-09T01:13:12.000Z", | ||||
| 								"modified_on": "2024-10-09T01:18:11.000Z", | ||||
| 								"owner_user_id": 1, | ||||
| 								"domain_names": ["test.example.com"], | ||||
| 								"forward_domain_name": "something-else.com", | ||||
| 								"preserve_path": 0, | ||||
| 								"certificate_id": 0, | ||||
| 								"ssl_forced": 0, | ||||
| 								"block_exploits": 0, | ||||
| 								"advanced_config": "", | ||||
| 								"meta": { | ||||
| 									"nginx_online": true, | ||||
| 									"nginx_err": null | ||||
| 								}, | ||||
| 								"http2_support": 0, | ||||
| 								"enabled": 1, | ||||
| 								"hsts_enabled": 0, | ||||
| 								"hsts_subdomains": 0, | ||||
| 								"forward_scheme": "http", | ||||
| 								"forward_http_code": 301, | ||||
| 								"owner": { | ||||
| 									"id": 1, | ||||
| 									"created_on": "2024-10-09T00:59:56.000Z", | ||||
| 									"modified_on": "2024-10-09T00:59:56.000Z", | ||||
| 									"is_deleted": 0, | ||||
| 									"is_disabled": 0, | ||||
| 									"email": "admin@example.com", | ||||
| 									"name": "Administrator", | ||||
| 									"nickname": "Admin", | ||||
| 									"avatar": "", | ||||
| 									"roles": ["admin"] | ||||
| 								}, | ||||
| 								"certificate": null, | ||||
| 								"use_default_location": true, | ||||
| 								"ipv6": true | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../../../components/redirection-host-object.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										115
									
								
								backend/schema/paths/nginx/redirection-hosts/post.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								backend/schema/paths/nginx/redirection-hosts/post.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,115 @@ | ||||
| { | ||||
| 	"operationId": "createRedirectionHost", | ||||
| 	"summary": "Create a Redirection Host", | ||||
| 	"tags": ["Redirection Hosts"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["redirection_hosts"] | ||||
| 		} | ||||
| 	], | ||||
| 	"requestBody": { | ||||
| 		"description": "Redirection Host Payload", | ||||
| 		"required": true, | ||||
| 		"content": { | ||||
| 			"application/json": { | ||||
| 				"schema": { | ||||
| 					"type": "object", | ||||
| 					"additionalProperties": false, | ||||
| 					"required": ["domain_names", "forward_scheme", "forward_http_code", "forward_domain_name"], | ||||
| 					"properties": { | ||||
| 						"domain_names": { | ||||
| 							"$ref": "../../../components/redirection-host-object.json#/properties/domain_names" | ||||
| 						}, | ||||
| 						"forward_http_code": { | ||||
| 							"$ref": "../../../components/redirection-host-object.json#/properties/forward_http_code" | ||||
| 						}, | ||||
| 						"forward_scheme": { | ||||
| 							"$ref": "../../../components/redirection-host-object.json#/properties/forward_scheme" | ||||
| 						}, | ||||
| 						"forward_domain_name": { | ||||
| 							"$ref": "../../../components/redirection-host-object.json#/properties/forward_domain_name" | ||||
| 						}, | ||||
| 						"preserve_path": { | ||||
| 							"$ref": "../../../components/redirection-host-object.json#/properties/preserve_path" | ||||
| 						}, | ||||
| 						"certificate_id": { | ||||
| 							"$ref": "../../../components/redirection-host-object.json#/properties/certificate_id" | ||||
| 						}, | ||||
| 						"ssl_forced": { | ||||
| 							"$ref": "../../../components/redirection-host-object.json#/properties/ssl_forced" | ||||
| 						}, | ||||
| 						"hsts_enabled": { | ||||
| 							"$ref": "../../../components/redirection-host-object.json#/properties/hsts_enabled" | ||||
| 						}, | ||||
| 						"hsts_subdomains": { | ||||
| 							"$ref": "../../../components/redirection-host-object.json#/properties/hsts_subdomains" | ||||
| 						}, | ||||
| 						"http2_support": { | ||||
| 							"$ref": "../../../components/redirection-host-object.json#/properties/http2_support" | ||||
| 						}, | ||||
| 						"block_exploits": { | ||||
| 							"$ref": "../../../components/redirection-host-object.json#/properties/block_exploits" | ||||
| 						}, | ||||
| 						"advanced_config": { | ||||
| 							"$ref": "../../../components/redirection-host-object.json#/properties/advanced_config" | ||||
| 						}, | ||||
| 						"meta": { | ||||
| 							"$ref": "../../../components/redirection-host-object.json#/properties/meta" | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	}, | ||||
| 	"responses": { | ||||
| 		"201": { | ||||
| 			"description": "201 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"id": 1, | ||||
| 								"created_on": "2024-10-09T01:13:12.000Z", | ||||
| 								"modified_on": "2024-10-09T01:13:12.000Z", | ||||
| 								"owner_user_id": 1, | ||||
| 								"domain_names": ["test.example.com"], | ||||
| 								"forward_domain_name": "something-else.com", | ||||
| 								"preserve_path": 0, | ||||
| 								"certificate_id": 0, | ||||
| 								"ssl_forced": 0, | ||||
| 								"block_exploits": 0, | ||||
| 								"advanced_config": "", | ||||
| 								"meta": {}, | ||||
| 								"http2_support": 0, | ||||
| 								"enabled": 1, | ||||
| 								"hsts_enabled": 0, | ||||
| 								"hsts_subdomains": 0, | ||||
| 								"forward_scheme": "http", | ||||
| 								"forward_http_code": 301, | ||||
| 								"certificate": null, | ||||
| 								"owner": { | ||||
| 									"id": 1, | ||||
| 									"created_on": "2024-10-09T00:59:56.000Z", | ||||
| 									"modified_on": "2024-10-09T00:59:56.000Z", | ||||
| 									"is_deleted": 0, | ||||
| 									"is_disabled": 0, | ||||
| 									"email": "admin@example.com", | ||||
| 									"name": "Administrator", | ||||
| 									"nickname": "Admin", | ||||
| 									"avatar": "", | ||||
| 									"roles": ["admin"] | ||||
| 								}, | ||||
| 								"use_default_location": true, | ||||
| 								"ipv6": true | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../../components/redirection-host-object.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										55
									
								
								backend/schema/paths/nginx/streams/get.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								backend/schema/paths/nginx/streams/get.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,55 @@ | ||||
| { | ||||
| 	"operationId": "getStreams", | ||||
| 	"summary": "Get all streams", | ||||
| 	"tags": ["Streams"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["streams"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "query", | ||||
| 			"name": "expand", | ||||
| 			"description": "Expansions", | ||||
| 			"schema": { | ||||
| 				"type": "string", | ||||
| 				"enum": ["access_list", "owner", "certificate"] | ||||
| 			} | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": [ | ||||
| 								{ | ||||
| 									"id": 1, | ||||
| 									"created_on": "2024-10-09T02:33:45.000Z", | ||||
| 									"modified_on": "2024-10-09T02:33:45.000Z", | ||||
| 									"owner_user_id": 1, | ||||
| 									"incoming_port": 9090, | ||||
| 									"forwarding_host": "router.internal", | ||||
| 									"forwarding_port": 80, | ||||
| 									"tcp_forwarding": 0, | ||||
| 									"udp_forwarding": 0, | ||||
| 									"meta": { | ||||
| 										"nginx_online": true, | ||||
| 										"nginx_err": null | ||||
| 									}, | ||||
| 									"enabled": 1 | ||||
| 								} | ||||
| 							] | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../../components/stream-list.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										87
									
								
								backend/schema/paths/nginx/streams/post.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								backend/schema/paths/nginx/streams/post.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,87 @@ | ||||
| { | ||||
| 	"operationId": "createStream", | ||||
| 	"summary": "Create a Stream", | ||||
| 	"tags": ["Streams"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["streams"] | ||||
| 		} | ||||
| 	], | ||||
| 	"requestBody": { | ||||
| 		"description": "Stream Payload", | ||||
| 		"required": true, | ||||
| 		"content": { | ||||
| 			"application/json": { | ||||
| 				"schema": { | ||||
| 					"type": "object", | ||||
| 					"additionalProperties": false, | ||||
| 					"required": ["incoming_port", "forwarding_host", "forwarding_port"], | ||||
| 					"properties": { | ||||
| 						"incoming_port": { | ||||
| 							"$ref": "../../../components/stream-object.json#/properties/incoming_port" | ||||
| 						}, | ||||
| 						"forwarding_host": { | ||||
| 							"$ref": "../../../components/stream-object.json#/properties/forwarding_host" | ||||
| 						}, | ||||
| 						"forwarding_port": { | ||||
| 							"$ref": "../../../components/stream-object.json#/properties/forwarding_port" | ||||
| 						}, | ||||
| 						"tcp_forwarding": { | ||||
| 							"$ref": "../../../components/stream-object.json#/properties/tcp_forwarding" | ||||
| 						}, | ||||
| 						"udp_forwarding": { | ||||
| 							"$ref": "../../../components/stream-object.json#/properties/udp_forwarding" | ||||
| 						}, | ||||
| 						"meta": { | ||||
| 							"$ref": "../../../components/stream-object.json#/properties/meta" | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	}, | ||||
| 	"responses": { | ||||
| 		"201": { | ||||
| 			"description": "201 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"id": 1, | ||||
| 								"created_on": "2024-10-09T02:33:45.000Z", | ||||
| 								"modified_on": "2024-10-09T02:33:45.000Z", | ||||
| 								"owner_user_id": 1, | ||||
| 								"incoming_port": 9090, | ||||
| 								"forwarding_host": "router.internal", | ||||
| 								"forwarding_port": 80, | ||||
| 								"tcp_forwarding": 0, | ||||
| 								"udp_forwarding": 0, | ||||
| 								"meta": { | ||||
| 									"nginx_online": true, | ||||
| 									"nginx_err": null | ||||
| 								}, | ||||
| 								"enabled": 1, | ||||
| 								"owner": { | ||||
| 									"id": 1, | ||||
| 									"created_on": "2024-10-09T02:33:16.000Z", | ||||
| 									"modified_on": "2024-10-09T02:33:16.000Z", | ||||
| 									"is_deleted": 0, | ||||
| 									"is_disabled": 0, | ||||
| 									"email": "admin@example.com", | ||||
| 									"name": "Administrator", | ||||
| 									"nickname": "Admin", | ||||
| 									"avatar": "", | ||||
| 									"roles": ["admin"] | ||||
| 								} | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../../components/stream-object.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										39
									
								
								backend/schema/paths/nginx/streams/streamID/delete.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								backend/schema/paths/nginx/streams/streamID/delete.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | ||||
| { | ||||
| 	"operationId": "deleteStream", | ||||
| 	"summary": "Delete a Stream", | ||||
| 	"tags": ["Streams"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["streams"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "path", | ||||
| 			"name": "streamID", | ||||
| 			"schema": { | ||||
| 				"type": "integer", | ||||
| 				"minimum": 1 | ||||
| 			}, | ||||
| 			"required": true, | ||||
| 			"example": 2 | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": true | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"type": "boolean" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @@ -0,0 +1,59 @@ | ||||
| { | ||||
| 	"operationId": "disableStream", | ||||
| 	"summary": "Disable a Stream", | ||||
| 	"tags": ["Streams"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["streams"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "path", | ||||
| 			"name": "streamID", | ||||
| 			"schema": { | ||||
| 				"type": "integer", | ||||
| 				"minimum": 1 | ||||
| 			}, | ||||
| 			"required": true, | ||||
| 			"example": 2 | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": true | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"type": "boolean" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		}, | ||||
| 		"400": { | ||||
| 			"description": "400 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"error": { | ||||
| 									"code": 400, | ||||
| 									"message": "Host is already disabled" | ||||
| 								} | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../../../../components/error-object.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										59
									
								
								backend/schema/paths/nginx/streams/streamID/enable/post.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								backend/schema/paths/nginx/streams/streamID/enable/post.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,59 @@ | ||||
| { | ||||
| 	"operationId": "enableStream", | ||||
| 	"summary": "Enable a Stream", | ||||
| 	"tags": ["Streams"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["streams"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "path", | ||||
| 			"name": "streamID", | ||||
| 			"schema": { | ||||
| 				"type": "integer", | ||||
| 				"minimum": 1 | ||||
| 			}, | ||||
| 			"required": true, | ||||
| 			"example": 2 | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": true | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"type": "boolean" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		}, | ||||
| 		"400": { | ||||
| 			"description": "400 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"error": { | ||||
| 									"code": 400, | ||||
| 									"message": "Host is already enabled" | ||||
| 								} | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../../../../components/error-object.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										54
									
								
								backend/schema/paths/nginx/streams/streamID/get.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								backend/schema/paths/nginx/streams/streamID/get.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | ||||
| { | ||||
| 	"operationId": "getStream", | ||||
| 	"summary": "Get a Stream", | ||||
| 	"tags": ["Streams"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["streams"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "path", | ||||
| 			"name": "streamID", | ||||
| 			"schema": { | ||||
| 				"type": "integer", | ||||
| 				"minimum": 1 | ||||
| 			}, | ||||
| 			"required": true, | ||||
| 			"example": 2 | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"id": 1, | ||||
| 								"created_on": "2024-10-09T02:33:45.000Z", | ||||
| 								"modified_on": "2024-10-09T02:33:45.000Z", | ||||
| 								"owner_user_id": 1, | ||||
| 								"incoming_port": 9090, | ||||
| 								"forwarding_host": "router.internal", | ||||
| 								"forwarding_port": 80, | ||||
| 								"tcp_forwarding": 0, | ||||
| 								"udp_forwarding": 0, | ||||
| 								"meta": { | ||||
| 									"nginx_online": true, | ||||
| 									"nginx_err": null | ||||
| 								}, | ||||
| 								"enabled": 1 | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../../../components/stream-object.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										145
									
								
								backend/schema/paths/nginx/streams/streamID/put.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										145
									
								
								backend/schema/paths/nginx/streams/streamID/put.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,145 @@ | ||||
| { | ||||
| 	"operationId": "updateStream", | ||||
| 	"summary": "Update a Stream", | ||||
| 	"tags": ["Streams"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["streams"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "path", | ||||
| 			"name": "streamID", | ||||
| 			"schema": { | ||||
| 				"type": "integer", | ||||
| 				"minimum": 1 | ||||
| 			}, | ||||
| 			"required": true, | ||||
| 			"example": 2 | ||||
| 		} | ||||
| 	], | ||||
| 	"requestBody": { | ||||
| 		"description": "Stream Payload", | ||||
| 		"required": true, | ||||
| 		"content": { | ||||
| 			"application/json": { | ||||
| 				"schema": { | ||||
| 					"type": "object", | ||||
| 					"additionalProperties": false, | ||||
| 					"minProperties": 1, | ||||
| 					"properties": { | ||||
| 						"domain_names": { | ||||
| 							"$ref": "../../../../components/proxy-host-object.json#/properties/domain_names" | ||||
| 						}, | ||||
| 						"forward_scheme": { | ||||
| 							"$ref": "../../../../components/proxy-host-object.json#/properties/forward_scheme" | ||||
| 						}, | ||||
| 						"forward_host": { | ||||
| 							"$ref": "../../../../components/proxy-host-object.json#/properties/forward_host" | ||||
| 						}, | ||||
| 						"forward_port": { | ||||
| 							"$ref": "../../../../components/proxy-host-object.json#/properties/forward_port" | ||||
| 						}, | ||||
| 						"certificate_id": { | ||||
| 							"$ref": "../../../../components/proxy-host-object.json#/properties/certificate_id" | ||||
| 						}, | ||||
| 						"ssl_forced": { | ||||
| 							"$ref": "../../../../components/proxy-host-object.json#/properties/ssl_forced" | ||||
| 						}, | ||||
| 						"hsts_enabled": { | ||||
| 							"$ref": "../../../../components/proxy-host-object.json#/properties/hsts_enabled" | ||||
| 						}, | ||||
| 						"hsts_subdomains": { | ||||
| 							"$ref": "../../../../components/proxy-host-object.json#/properties/hsts_subdomains" | ||||
| 						}, | ||||
| 						"http2_support": { | ||||
| 							"$ref": "../../../../components/proxy-host-object.json#/properties/http2_support" | ||||
| 						}, | ||||
| 						"block_exploits": { | ||||
| 							"$ref": "../../../../components/proxy-host-object.json#/properties/block_exploits" | ||||
| 						}, | ||||
| 						"caching_enabled": { | ||||
| 							"$ref": "../../../../components/proxy-host-object.json#/properties/caching_enabled" | ||||
| 						}, | ||||
| 						"allow_websocket_upgrade": { | ||||
| 							"$ref": "../../../../components/proxy-host-object.json#/properties/allow_websocket_upgrade" | ||||
| 						}, | ||||
| 						"access_list_id": { | ||||
| 							"$ref": "../../../../components/proxy-host-object.json#/properties/access_list_id" | ||||
| 						}, | ||||
| 						"advanced_config": { | ||||
| 							"$ref": "../../../../components/proxy-host-object.json#/properties/advanced_config" | ||||
| 						}, | ||||
| 						"enabled": { | ||||
| 							"$ref": "../../../../components/proxy-host-object.json#/properties/enabled" | ||||
| 						}, | ||||
| 						"meta": { | ||||
| 							"$ref": "../../../../components/proxy-host-object.json#/properties/meta" | ||||
| 						}, | ||||
| 						"locations": { | ||||
| 							"$ref": "../../../../components/proxy-host-object.json#/properties/locations" | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	}, | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"id": 1, | ||||
| 								"created_on": "2024-10-08T23:23:03.000Z", | ||||
| 								"modified_on": "2024-10-08T23:26:37.000Z", | ||||
| 								"owner_user_id": 1, | ||||
| 								"domain_names": ["test.example.com"], | ||||
| 								"forward_host": "192.168.0.10", | ||||
| 								"forward_port": 8989, | ||||
| 								"access_list_id": 0, | ||||
| 								"certificate_id": 0, | ||||
| 								"ssl_forced": 0, | ||||
| 								"caching_enabled": 0, | ||||
| 								"block_exploits": 0, | ||||
| 								"advanced_config": "", | ||||
| 								"meta": { | ||||
| 									"nginx_online": true, | ||||
| 									"nginx_err": null | ||||
| 								}, | ||||
| 								"allow_websocket_upgrade": 0, | ||||
| 								"http2_support": 0, | ||||
| 								"forward_scheme": "http", | ||||
| 								"enabled": 1, | ||||
| 								"hsts_enabled": 0, | ||||
| 								"hsts_subdomains": 0, | ||||
| 								"owner": { | ||||
| 									"id": 1, | ||||
| 									"created_on": "2024-10-07T22:43:55.000Z", | ||||
| 									"modified_on": "2024-10-08T12:52:54.000Z", | ||||
| 									"is_deleted": 0, | ||||
| 									"is_disabled": 0, | ||||
| 									"email": "admin@example.com", | ||||
| 									"name": "Administrator", | ||||
| 									"nickname": "some guy", | ||||
| 									"avatar": "//www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?default=mm", | ||||
| 									"roles": ["admin"] | ||||
| 								}, | ||||
| 								"certificate": null, | ||||
| 								"access_list": null, | ||||
| 								"use_default_location": true, | ||||
| 								"ipv6": true | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../../../components/stream-object.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										50
									
								
								backend/schema/paths/reports/hosts/get.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								backend/schema/paths/reports/hosts/get.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,50 @@ | ||||
| { | ||||
| 	"operationId": "reportsHosts", | ||||
| 	"summary": "Report on Host Statistics", | ||||
| 	"tags": ["Reports"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["reports"] | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"proxy": 20, | ||||
| 								"redirection": 1, | ||||
| 								"stream": 0, | ||||
| 								"dead": 1 | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"type": "object", | ||||
| 						"properties": { | ||||
| 							"proxy": { | ||||
| 								"type": "integer", | ||||
| 								"description": "Proxy Hosts Count" | ||||
| 							}, | ||||
| 							"redirection": { | ||||
| 								"type": "integer", | ||||
| 								"description": "Redirection Hosts Count" | ||||
| 							}, | ||||
| 							"stream": { | ||||
| 								"type": "integer", | ||||
| 								"description": "Streams Count" | ||||
| 							}, | ||||
| 							"dead": { | ||||
| 								"type": "integer", | ||||
| 								"description": "404 Hosts Count" | ||||
| 							} | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										10
									
								
								backend/schema/paths/schema/get.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								backend/schema/paths/schema/get.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| { | ||||
| 	"operationId": "schema", | ||||
| 	"summary": "Returns this swagger API schema", | ||||
| 	"tags": ["Public"], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response" | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										35
									
								
								backend/schema/paths/settings/get.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								backend/schema/paths/settings/get.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | ||||
| { | ||||
| 	"operationId": "getSettings", | ||||
| 	"summary": "Get all settings", | ||||
| 	"tags": ["Settings"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["settings"] | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": [ | ||||
| 								{ | ||||
| 									"id": "default-site", | ||||
| 									"name": "Default Site", | ||||
| 									"description": "What to show when Nginx is hit with an unknown Host", | ||||
| 									"value": "congratulations", | ||||
| 									"meta": {} | ||||
| 								} | ||||
| 							] | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../components/setting-list.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										46
									
								
								backend/schema/paths/settings/settingID/get.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								backend/schema/paths/settings/settingID/get.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,46 @@ | ||||
| { | ||||
| 	"operationId": "getSetting", | ||||
| 	"summary": "Get a setting", | ||||
| 	"tags": ["Settings"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["settings"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "path", | ||||
| 			"name": "settingID", | ||||
| 			"schema": { | ||||
| 				"type": "string", | ||||
| 				"minLength": 1 | ||||
| 			}, | ||||
| 			"required": true, | ||||
| 			"description": "Setting ID", | ||||
| 			"example": "default-site" | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"id": "default-site", | ||||
| 								"name": "Default Site", | ||||
| 								"description": "What to show when Nginx is hit with an unknown Host", | ||||
| 								"value": "congratulations", | ||||
| 								"meta": {} | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../../components/setting-object.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										67
									
								
								backend/schema/paths/settings/settingID/put.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								backend/schema/paths/settings/settingID/put.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,67 @@ | ||||
| { | ||||
| 	"operationId": "updateSetting", | ||||
| 	"summary": "Update a setting", | ||||
| 	"tags": ["Settings"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["settings"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "path", | ||||
| 			"name": "settingID", | ||||
| 			"schema": { | ||||
| 				"type": "string", | ||||
| 				"minLength": 1 | ||||
| 			}, | ||||
| 			"required": true, | ||||
| 			"description": "Setting ID", | ||||
| 			"example": "default-site" | ||||
| 		} | ||||
| 	], | ||||
| 	"requestBody": { | ||||
| 		"description": "Setting Payload", | ||||
| 		"required": true, | ||||
| 		"content": { | ||||
| 			"application/json": { | ||||
| 				"schema": { | ||||
| 					"type": "object", | ||||
| 					"additionalProperties": false, | ||||
| 					"minProperties": 1, | ||||
| 					"properties": { | ||||
| 						"value": { | ||||
| 							"$ref": "../../../components/setting-object.json#/properties/value" | ||||
| 						}, | ||||
| 						"meta": { | ||||
| 							"$ref": "../../../components/setting-object.json#/properties/meta" | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	}, | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"id": "default-site", | ||||
| 								"name": "Default Site", | ||||
| 								"description": "What to show when Nginx is hit with an unknown Host", | ||||
| 								"value": "congratulations", | ||||
| 								"meta": {} | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../../components/setting-object.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										30
									
								
								backend/schema/paths/tokens/get.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								backend/schema/paths/tokens/get.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | ||||
| { | ||||
| 	"operationId": "refreshToken", | ||||
| 	"summary": "Refresh your access token", | ||||
| 	"tags": ["Tokens"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["tokens"] | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"expires": 1566540510, | ||||
| 								"token": "eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCJ9.ey...xaHKYr3Kk6MvkUjcC4" | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../components/token-object.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										55
									
								
								backend/schema/paths/tokens/post.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								backend/schema/paths/tokens/post.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,55 @@ | ||||
| { | ||||
| 	"operationId": "requestToken", | ||||
| 	"summary": "Request a new access token from credentials", | ||||
| 	"tags": ["Tokens"], | ||||
| 	"requestBody": { | ||||
| 		"description": "Credentials Payload", | ||||
| 		"required": true, | ||||
| 		"content": { | ||||
| 			"application/json": { | ||||
| 				"schema": { | ||||
| 					"additionalProperties": false, | ||||
| 					"properties": { | ||||
| 						"identity": { | ||||
| 							"minLength": 1, | ||||
| 							"type": "string" | ||||
| 						}, | ||||
| 						"scope": { | ||||
| 							"minLength": 1, | ||||
| 							"type": "string", | ||||
| 							"enum": ["user"] | ||||
| 						}, | ||||
| 						"secret": { | ||||
| 							"minLength": 1, | ||||
| 							"type": "string" | ||||
| 						} | ||||
| 					}, | ||||
| 					"required": ["identity", "secret"], | ||||
| 					"type": "object" | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	}, | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"result": { | ||||
| 									"expires": 1566540510, | ||||
| 									"token": "eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCJ9.ey...xaHKYr3Kk6MvkUjcC4" | ||||
| 								} | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../components/token-object.json" | ||||
| 					} | ||||
| 				} | ||||
| 			}, | ||||
| 			"description": "200 response" | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										74
									
								
								backend/schema/paths/users/get.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								backend/schema/paths/users/get.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,74 @@ | ||||
| { | ||||
| 	"operationId": "getUsers", | ||||
| 	"summary": "Get all users", | ||||
| 	"tags": ["Users"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["users"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "query", | ||||
| 			"name": "expand", | ||||
| 			"description": "Expansions", | ||||
| 			"schema": { | ||||
| 				"type": "string", | ||||
| 				"enum": ["permissions"] | ||||
| 			} | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": [ | ||||
| 								{ | ||||
| 									"id": 1, | ||||
| 									"created_on": "2020-01-30T09:36:08.000Z", | ||||
| 									"modified_on": "2020-01-30T09:41:04.000Z", | ||||
| 									"is_disabled": 0, | ||||
| 									"email": "jc@jc21.com", | ||||
| 									"name": "Jamie Curnow", | ||||
| 									"nickname": "James", | ||||
| 									"avatar": "//www.gravatar.com/avatar/6193176330f8d38747f038c170ddb193?default=mm", | ||||
| 									"roles": ["admin"] | ||||
| 								} | ||||
| 							] | ||||
| 						}, | ||||
| 						"withPermissions": { | ||||
| 							"value": [ | ||||
| 								{ | ||||
| 									"id": 1, | ||||
| 									"created_on": "2020-01-30T09:36:08.000Z", | ||||
| 									"modified_on": "2020-01-30T09:41:04.000Z", | ||||
| 									"is_disabled": 0, | ||||
| 									"email": "jc@jc21.com", | ||||
| 									"name": "Jamie Curnow", | ||||
| 									"nickname": "James", | ||||
| 									"avatar": "//www.gravatar.com/avatar/6193176330f8d38747f038c170ddb193?default=mm", | ||||
| 									"roles": ["admin"], | ||||
| 									"permissions": { | ||||
| 										"visibility": "all", | ||||
| 										"proxy_hosts": "manage", | ||||
| 										"redirection_hosts": "manage", | ||||
| 										"dead_hosts": "manage", | ||||
| 										"streams": "manage", | ||||
| 										"access_lists": "manage", | ||||
| 										"certificates": "manage" | ||||
| 									} | ||||
| 								} | ||||
| 							] | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../components/user-list.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										88
									
								
								backend/schema/paths/users/post.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								backend/schema/paths/users/post.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,88 @@ | ||||
| { | ||||
| 	"operationId": "createUser", | ||||
| 	"summary": "Create a User", | ||||
| 	"tags": ["Users"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["users"] | ||||
| 		} | ||||
| 	], | ||||
| 	"requestBody": { | ||||
| 		"description": "User Payload", | ||||
| 		"required": true, | ||||
| 		"content": { | ||||
| 			"application/json": { | ||||
| 				"schema": { | ||||
| 					"type": "object", | ||||
| 					"additionalProperties": false, | ||||
| 					"required": ["name", "nickname", "email"], | ||||
| 					"properties": { | ||||
| 						"name": { | ||||
| 							"$ref": "../../components/user-object.json#/properties/name" | ||||
| 						}, | ||||
| 						"nickname": { | ||||
| 							"$ref": "../../components/user-object.json#/properties/nickname" | ||||
| 						}, | ||||
| 						"email": { | ||||
| 							"$ref": "../../components/user-object.json#/properties/email" | ||||
| 						}, | ||||
| 						"roles": { | ||||
| 							"$ref": "../../components/user-object.json#/properties/roles" | ||||
| 						}, | ||||
| 						"is_disabled": { | ||||
| 							"$ref": "../../components/user-object.json#/properties/is_disabled" | ||||
| 						}, | ||||
| 						"auth": { | ||||
| 							"type": "object", | ||||
| 							"description": "Auth Credentials", | ||||
| 							"example": { | ||||
| 								"type": "password", | ||||
| 								"secret": "bigredhorsebanana" | ||||
| 							} | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	}, | ||||
| 	"responses": { | ||||
| 		"201": { | ||||
| 			"description": "201 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"id": 2, | ||||
| 								"created_on": "2020-01-30T09:41:04.000Z", | ||||
| 								"modified_on": "2020-01-30T09:41:04.000Z", | ||||
| 								"is_disabled": 0, | ||||
| 								"email": "jc@jc21.com", | ||||
| 								"name": "Jamie Curnow", | ||||
| 								"nickname": "James", | ||||
| 								"avatar": "//www.gravatar.com/avatar/6193176330f8d38747f038c170ddb193?default=mm", | ||||
| 								"roles": ["admin"], | ||||
| 								"permissions": { | ||||
| 									"id": 3, | ||||
| 									"created_on": "2020-01-30T09:41:04.000Z", | ||||
| 									"modified_on": "2020-01-30T09:41:04.000Z", | ||||
| 									"user_id": 2, | ||||
| 									"visibility": "user", | ||||
| 									"proxy_hosts": "manage", | ||||
| 									"redirection_hosts": "manage", | ||||
| 									"dead_hosts": "manage", | ||||
| 									"streams": "manage", | ||||
| 									"access_lists": "manage", | ||||
| 									"certificates": "manage" | ||||
| 								} | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../components/user-object.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										79
									
								
								backend/schema/paths/users/userID/auth/put.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								backend/schema/paths/users/userID/auth/put.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,79 @@ | ||||
| { | ||||
| 	"operationId": "updateUserAuth", | ||||
| 	"summary": "Update a User's Authentication", | ||||
| 	"tags": ["Users"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["users"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "path", | ||||
| 			"name": "userID", | ||||
| 			"schema": { | ||||
| 				"oneOf": [ | ||||
| 					{ | ||||
| 						"type": "string", | ||||
| 						"pattern": "^me$" | ||||
| 					}, | ||||
| 					{ | ||||
| 						"type": "integer", | ||||
| 						"minimum": 1 | ||||
| 					} | ||||
| 				] | ||||
| 			}, | ||||
| 			"required": true, | ||||
| 			"description": "User ID or 'me' for yourself", | ||||
| 			"example": 2 | ||||
| 		} | ||||
| 	], | ||||
| 	"requestBody": { | ||||
| 		"description": "Auth Payload", | ||||
| 		"required": true, | ||||
| 		"content": { | ||||
| 			"application/json": { | ||||
| 				"schema": { | ||||
| 					"type": "object", | ||||
| 					"required": ["type", "secret"], | ||||
| 					"properties": { | ||||
| 						"type": { | ||||
| 							"type": "string", | ||||
| 							"pattern": "^password$", | ||||
| 							"example": "password" | ||||
| 						}, | ||||
| 						"current": { | ||||
| 							"type": "string", | ||||
| 							"minLength": 1, | ||||
| 							"maxLength": 64, | ||||
| 							"example": "changeme" | ||||
| 						}, | ||||
| 						"secret": { | ||||
| 							"type": "string", | ||||
| 							"minLength": 8, | ||||
| 							"maxLength": 64, | ||||
| 							"example": "mySuperN3wP@ssword!" | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	}, | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": true | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"type": "boolean" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										40
									
								
								backend/schema/paths/users/userID/delete.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								backend/schema/paths/users/userID/delete.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | ||||
| { | ||||
| 	"operationId": "deleteUser", | ||||
| 	"summary": "Delete a User", | ||||
| 	"tags": ["Users"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["users"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "path", | ||||
| 			"name": "userID", | ||||
| 			"schema": { | ||||
| 				"type": "integer", | ||||
| 				"minimum": 1 | ||||
| 			}, | ||||
| 			"required": true, | ||||
| 			"description": "User ID", | ||||
| 			"example": 2 | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": true | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"type": "boolean" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										58
									
								
								backend/schema/paths/users/userID/get.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								backend/schema/paths/users/userID/get.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,58 @@ | ||||
| { | ||||
| 	"operationId": "getUser", | ||||
| 	"summary": "Get a user", | ||||
| 	"tags": ["Users"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["users"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "path", | ||||
| 			"name": "userID", | ||||
| 			"schema": { | ||||
| 				"oneOf": [ | ||||
| 					{ | ||||
| 						"type": "string", | ||||
| 						"pattern": "^me$" | ||||
| 					}, | ||||
| 					{ | ||||
| 						"type": "integer", | ||||
| 						"minimum": 1 | ||||
| 					} | ||||
| 				] | ||||
| 			}, | ||||
| 			"required": true, | ||||
| 			"description": "User ID or 'me' for yourself", | ||||
| 			"example": 1 | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"id": 1, | ||||
| 								"created_on": "2020-01-30T09:36:08.000Z", | ||||
| 								"modified_on": "2020-01-30T09:41:04.000Z", | ||||
| 								"is_disabled": 0, | ||||
| 								"email": "jc@jc21.com", | ||||
| 								"name": "Jamie Curnow", | ||||
| 								"nickname": "James", | ||||
| 								"avatar": "//www.gravatar.com/avatar/6193176330f8d38747f038c170ddb193?default=mm", | ||||
| 								"roles": ["admin"] | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../../components/user-object.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										73
									
								
								backend/schema/paths/users/userID/login/post.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								backend/schema/paths/users/userID/login/post.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,73 @@ | ||||
| { | ||||
| 	"operationId": "loginAsUser", | ||||
| 	"summary": "Login as this user", | ||||
| 	"tags": ["Users"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["users"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "path", | ||||
| 			"name": "userID", | ||||
| 			"schema": { | ||||
| 				"type": "integer", | ||||
| 				"minimum": 1 | ||||
| 			}, | ||||
| 			"required": true, | ||||
| 			"description": "User ID", | ||||
| 			"example": 2 | ||||
| 		} | ||||
| 	], | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"token": "eyJhbGciOiJSUzI1NiIsInR...16OjT8B3NLyXg", | ||||
| 								"expires": "2020-01-31T10:56:23.239Z", | ||||
| 								"user": { | ||||
| 									"id": 1, | ||||
| 									"created_on": "2020-01-30T10:43:44.000Z", | ||||
| 									"modified_on": "2020-01-30T10:43:44.000Z", | ||||
| 									"is_disabled": 0, | ||||
| 									"email": "jc@jc21.com", | ||||
| 									"name": "Jamie Curnow", | ||||
| 									"nickname": "James", | ||||
| 									"avatar": "//www.gravatar.com/avatar/3c8d73f45fd8763f827b964c76e6032a?default=mm", | ||||
| 									"roles": ["admin"] | ||||
| 								} | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"type": "object", | ||||
| 						"description": "Login object", | ||||
| 						"required": ["expires", "token", "user"], | ||||
| 						"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" | ||||
| 							}, | ||||
| 							"user": { | ||||
| 								"$ref": "../../../../components/user-object.json" | ||||
| 							} | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										51
									
								
								backend/schema/paths/users/userID/permissions/put.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								backend/schema/paths/users/userID/permissions/put.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,51 @@ | ||||
| { | ||||
| 	"operationId": "updateUserPermissions", | ||||
| 	"summary": "Update a User's Permissions", | ||||
| 	"tags": ["Users"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["users"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "path", | ||||
| 			"name": "userID", | ||||
| 			"schema": { | ||||
| 				"type": "integer", | ||||
| 				"minimum": 1 | ||||
| 			}, | ||||
| 			"required": true, | ||||
| 			"description": "User ID", | ||||
| 			"example": 2 | ||||
| 		} | ||||
| 	], | ||||
| 	"requestBody": { | ||||
| 		"description": "Permissions Payload", | ||||
| 		"required": true, | ||||
| 		"content": { | ||||
| 			"application/json": { | ||||
| 				"schema": { | ||||
| 					"$ref": "../../../../components/permission-object.json" | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	}, | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": true | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"type": "boolean" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										88
									
								
								backend/schema/paths/users/userID/put.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								backend/schema/paths/users/userID/put.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,88 @@ | ||||
| { | ||||
| 	"operationId": "updateUser", | ||||
| 	"summary": "Update a User", | ||||
| 	"tags": ["Users"], | ||||
| 	"security": [ | ||||
| 		{ | ||||
| 			"BearerAuth": ["users"] | ||||
| 		} | ||||
| 	], | ||||
| 	"parameters": [ | ||||
| 		{ | ||||
| 			"in": "path", | ||||
| 			"name": "userID", | ||||
| 			"schema": { | ||||
| 				"oneOf": [ | ||||
| 					{ | ||||
| 						"type": "string", | ||||
| 						"pattern": "^me$" | ||||
| 					}, | ||||
| 					{ | ||||
| 						"type": "integer", | ||||
| 						"minimum": 1 | ||||
| 					} | ||||
| 				] | ||||
| 			}, | ||||
| 			"required": true, | ||||
| 			"description": "User ID or 'me' for yourself", | ||||
| 			"example": 2 | ||||
| 		} | ||||
| 	], | ||||
| 	"requestBody": { | ||||
| 		"description": "User Payload", | ||||
| 		"required": true, | ||||
| 		"content": { | ||||
| 			"application/json": { | ||||
| 				"schema": { | ||||
| 					"type": "object", | ||||
| 					"additionalProperties": false, | ||||
| 					"minProperties": 1, | ||||
| 					"properties": { | ||||
| 						"name": { | ||||
| 							"$ref": "../../../components/user-object.json#/properties/name" | ||||
| 						}, | ||||
| 						"nickname": { | ||||
| 							"$ref": "../../../components/user-object.json#/properties/nickname" | ||||
| 						}, | ||||
| 						"email": { | ||||
| 							"$ref": "../../../components/user-object.json#/properties/email" | ||||
| 						}, | ||||
| 						"roles": { | ||||
| 							"$ref": "../../../components/user-object.json#/properties/roles" | ||||
| 						}, | ||||
| 						"is_disabled": { | ||||
| 							"$ref": "../../../components/user-object.json#/properties/is_disabled" | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	}, | ||||
| 	"responses": { | ||||
| 		"200": { | ||||
| 			"description": "200 response", | ||||
| 			"content": { | ||||
| 				"application/json": { | ||||
| 					"examples": { | ||||
| 						"default": { | ||||
| 							"value": { | ||||
| 								"id": 2, | ||||
| 								"created_on": "2020-01-30T09:36:08.000Z", | ||||
| 								"modified_on": "2020-01-30T09:41:04.000Z", | ||||
| 								"is_disabled": 0, | ||||
| 								"email": "jc@jc21.com", | ||||
| 								"name": "Jamie Curnow", | ||||
| 								"nickname": "James", | ||||
| 								"avatar": "//www.gravatar.com/avatar/6193176330f8d38747f038c170ddb193?default=mm", | ||||
| 								"roles": ["admin"] | ||||
| 							} | ||||
| 						} | ||||
| 					}, | ||||
| 					"schema": { | ||||
| 						"$ref": "../../../components/user-object.json" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										265
									
								
								backend/schema/swagger.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										265
									
								
								backend/schema/swagger.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,265 @@ | ||||
| { | ||||
| 	"openapi": "3.0.0", | ||||
| 	"info": { | ||||
| 		"title": "Nginx Proxy Manager API", | ||||
| 		"version": "2.x.x" | ||||
| 	}, | ||||
| 	"servers": [ | ||||
| 		{ | ||||
| 			"url": "http://127.0.0.1:81/api" | ||||
| 		} | ||||
| 	], | ||||
| 	"paths": { | ||||
| 		"/": { | ||||
| 			"get": { | ||||
| 				"$ref": "./paths/get.json" | ||||
| 			} | ||||
| 		}, | ||||
| 		"/audit-log": { | ||||
| 			"get": { | ||||
| 				"$ref": "./paths/audit-log/get.json" | ||||
| 			} | ||||
| 		}, | ||||
| 		"/nginx/access-lists": { | ||||
| 			"get": { | ||||
| 				"$ref": "./paths/nginx/access-lists/get.json" | ||||
| 			}, | ||||
| 			"post": { | ||||
| 				"$ref": "./paths/nginx/access-lists/post.json" | ||||
| 			} | ||||
| 		}, | ||||
| 		"/nginx/access-lists/{listID}": { | ||||
| 			"get": { | ||||
| 				"$ref": "./paths/nginx/access-lists/listID/get.json" | ||||
| 			}, | ||||
| 			"put": { | ||||
| 				"$ref": "./paths/nginx/access-lists/listID/put.json" | ||||
| 			}, | ||||
| 			"delete": { | ||||
| 				"$ref": "./paths/nginx/access-lists/listID/delete.json" | ||||
| 			} | ||||
| 		}, | ||||
| 		"/nginx/certificates": { | ||||
| 			"get": { | ||||
| 				"$ref": "./paths/nginx/certificates/get.json" | ||||
| 			}, | ||||
| 			"post": { | ||||
| 				"$ref": "./paths/nginx/certificates/post.json" | ||||
| 			} | ||||
| 		}, | ||||
| 		"/nginx/certificates/validate": { | ||||
| 			"post": { | ||||
| 				"$ref": "./paths/nginx/certificates/validate/post.json" | ||||
| 			} | ||||
| 		}, | ||||
| 		"/nginx/certificates/test-http": { | ||||
| 			"get": { | ||||
| 				"$ref": "./paths/nginx/certificates/test-http/get.json" | ||||
| 			} | ||||
| 		}, | ||||
| 		"/nginx/certificates/{certID}": { | ||||
| 			"get": { | ||||
| 				"$ref": "./paths/nginx/certificates/certID/get.json" | ||||
| 			}, | ||||
| 			"delete": { | ||||
| 				"$ref": "./paths/nginx/certificates/certID/delete.json" | ||||
| 			} | ||||
| 		}, | ||||
| 		"/nginx/certificates/{certID}/download": { | ||||
| 			"get": { | ||||
| 				"$ref": "./paths/nginx/certificates/certID/download/get.json" | ||||
| 			} | ||||
| 		}, | ||||
| 		"/nginx/certificates/{certID}/renew": { | ||||
| 			"post": { | ||||
| 				"$ref": "./paths/nginx/certificates/certID/renew/post.json" | ||||
| 			} | ||||
| 		}, | ||||
| 		"/nginx/certificates/{certID}/upload": { | ||||
| 			"post": { | ||||
| 				"$ref": "./paths/nginx/certificates/certID/upload/post.json" | ||||
| 			} | ||||
| 		}, | ||||
| 		"/nginx/proxy-hosts": { | ||||
| 			"get": { | ||||
| 				"$ref": "./paths/nginx/proxy-hosts/get.json" | ||||
| 			}, | ||||
| 			"post": { | ||||
| 				"$ref": "./paths/nginx/proxy-hosts/post.json" | ||||
| 			} | ||||
| 		}, | ||||
| 		"/nginx/proxy-hosts/{hostID}": { | ||||
| 			"get": { | ||||
| 				"$ref": "./paths/nginx/proxy-hosts/hostID/get.json" | ||||
| 			}, | ||||
| 			"put": { | ||||
| 				"$ref": "./paths/nginx/proxy-hosts/hostID/put.json" | ||||
| 			}, | ||||
| 			"delete": { | ||||
| 				"$ref": "./paths/nginx/proxy-hosts/hostID/delete.json" | ||||
| 			} | ||||
| 		}, | ||||
| 		"/nginx/proxy-hosts/{hostID}/enable": { | ||||
| 			"post": { | ||||
| 				"$ref": "./paths/nginx/proxy-hosts/hostID/enable/post.json" | ||||
| 			} | ||||
| 		}, | ||||
| 		"/nginx/proxy-hosts/{hostID}/disable": { | ||||
| 			"post": { | ||||
| 				"$ref": "./paths/nginx/proxy-hosts/hostID/disable/post.json" | ||||
| 			} | ||||
| 		}, | ||||
| 		"/nginx/redirection-hosts": { | ||||
| 			"get": { | ||||
| 				"$ref": "./paths/nginx/redirection-hosts/get.json" | ||||
| 			}, | ||||
| 			"post": { | ||||
| 				"$ref": "./paths/nginx/redirection-hosts/post.json" | ||||
| 			} | ||||
| 		}, | ||||
| 		"/nginx/redirection-hosts/{hostID}": { | ||||
| 			"get": { | ||||
| 				"$ref": "./paths/nginx/redirection-hosts/hostID/get.json" | ||||
| 			}, | ||||
| 			"put": { | ||||
| 				"$ref": "./paths/nginx/redirection-hosts/hostID/put.json" | ||||
| 			}, | ||||
| 			"delete": { | ||||
| 				"$ref": "./paths/nginx/redirection-hosts/hostID/delete.json" | ||||
| 			} | ||||
| 		}, | ||||
| 		"/nginx/redirection-hosts/{hostID}/enable": { | ||||
| 			"post": { | ||||
| 				"$ref": "./paths/nginx/redirection-hosts/hostID/enable/post.json" | ||||
| 			} | ||||
| 		}, | ||||
| 		"/nginx/redirection-hosts/{hostID}/disable": { | ||||
| 			"post": { | ||||
| 				"$ref": "./paths/nginx/redirection-hosts/hostID/disable/post.json" | ||||
| 			} | ||||
| 		}, | ||||
| 		"/nginx/dead-hosts": { | ||||
| 			"get": { | ||||
| 				"$ref": "./paths/nginx/dead-hosts/get.json" | ||||
| 			}, | ||||
| 			"post": { | ||||
| 				"$ref": "./paths/nginx/dead-hosts/post.json" | ||||
| 			} | ||||
| 		}, | ||||
| 		"/nginx/dead-hosts/{hostID}": { | ||||
| 			"get": { | ||||
| 				"$ref": "./paths/nginx/dead-hosts/hostID/get.json" | ||||
| 			}, | ||||
| 			"put": { | ||||
| 				"$ref": "./paths/nginx/dead-hosts/hostID/put.json" | ||||
| 			}, | ||||
| 			"delete": { | ||||
| 				"$ref": "./paths/nginx/dead-hosts/hostID/delete.json" | ||||
| 			} | ||||
| 		}, | ||||
| 		"/nginx/dead-hosts/{hostID}/enable": { | ||||
| 			"post": { | ||||
| 				"$ref": "./paths/nginx/dead-hosts/hostID/enable/post.json" | ||||
| 			} | ||||
| 		}, | ||||
| 		"/nginx/dead-hosts/{hostID}/disable": { | ||||
| 			"post": { | ||||
| 				"$ref": "./paths/nginx/dead-hosts/hostID/disable/post.json" | ||||
| 			} | ||||
| 		}, | ||||
| 		"/nginx/streams": { | ||||
| 			"get": { | ||||
| 				"$ref": "./paths/nginx/streams/get.json" | ||||
| 			}, | ||||
| 			"post": { | ||||
| 				"$ref": "./paths/nginx/streams/post.json" | ||||
| 			} | ||||
| 		}, | ||||
| 		"/nginx/streams/{streamID}": { | ||||
| 			"get": { | ||||
| 				"$ref": "./paths/nginx/streams/streamID/get.json" | ||||
| 			}, | ||||
| 			"put": { | ||||
| 				"$ref": "./paths/nginx/streams/streamID/put.json" | ||||
| 			}, | ||||
| 			"delete": { | ||||
| 				"$ref": "./paths/nginx/streams/streamID/delete.json" | ||||
| 			} | ||||
| 		}, | ||||
| 		"/nginx/streams/{streamID}/enable": { | ||||
| 			"post": { | ||||
| 				"$ref": "./paths/nginx/streams/streamID/enable/post.json" | ||||
| 			} | ||||
| 		}, | ||||
| 		"/nginx/streams/{streamID}/disable": { | ||||
| 			"post": { | ||||
| 				"$ref": "./paths/nginx/streams/streamID/disable/post.json" | ||||
| 			} | ||||
| 		}, | ||||
| 		"/reports/hosts": { | ||||
| 			"get": { | ||||
| 				"$ref": "./paths/reports/hosts/get.json" | ||||
| 			} | ||||
| 		}, | ||||
| 		"/schema": { | ||||
| 			"get": { | ||||
| 				"$ref": "./paths/schema/get.json" | ||||
| 			} | ||||
| 		}, | ||||
| 		"/settings": { | ||||
| 			"get": { | ||||
| 				"$ref": "./paths/settings/get.json" | ||||
| 			} | ||||
| 		}, | ||||
| 		"/settings/{settingID}": { | ||||
| 			"get": { | ||||
| 				"$ref": "./paths/settings/settingID/get.json" | ||||
| 			}, | ||||
| 			"put": { | ||||
| 				"$ref": "./paths/settings/settingID/put.json" | ||||
| 			} | ||||
| 		}, | ||||
| 		"/tokens": { | ||||
| 			"get": { | ||||
| 				"$ref": "./paths/tokens/get.json" | ||||
| 			}, | ||||
| 			"post": { | ||||
| 				"$ref": "./paths/tokens/post.json" | ||||
| 			} | ||||
| 		}, | ||||
| 		"/users": { | ||||
| 			"get": { | ||||
| 				"$ref": "./paths/users/get.json" | ||||
| 			}, | ||||
| 			"post": { | ||||
| 				"$ref": "./paths/users/post.json" | ||||
| 			} | ||||
| 		}, | ||||
| 		"/users/{userID}": { | ||||
| 			"get": { | ||||
| 				"$ref": "./paths/users/userID/get.json" | ||||
| 			}, | ||||
| 			"put": { | ||||
| 				"$ref": "./paths/users/userID/put.json" | ||||
| 			}, | ||||
| 			"delete": { | ||||
| 				"$ref": "./paths/users/userID/delete.json" | ||||
| 			} | ||||
| 		}, | ||||
| 		"/users/{userID}/auth": { | ||||
| 			"put": { | ||||
| 				"$ref": "./paths/users/userID/auth/put.json" | ||||
| 			} | ||||
| 		}, | ||||
| 		"/users/{userID}/permissions": { | ||||
| 			"put": { | ||||
| 				"$ref": "./paths/users/userID/permissions/put.json" | ||||
| 			} | ||||
| 		}, | ||||
| 		"/users/{userID}/login": { | ||||
| 			"post": { | ||||
| 				"$ref": "./paths/users/userID/login/post.json" | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user