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