mirror of
				https://github.com/NginxProxyManager/nginx-proxy-manager.git
				synced 2025-10-31 07:43:33 +00:00 
			
		
		
		
	Refactor API Schema and validation
- /schema now returns full openapi/swagger schema - That schema is used to validate incoming requests - And used as a contract in future integration tests - Moved route files up one level - Fixed incorrect 404 reponses when getting objects - Fixed saving new objects and passing jsonschemavalidation
This commit is contained in:
		
							
								
								
									
										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" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user