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