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/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" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user