{
	"$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"
			}
		}
	]
}
