{
    "type": "object",
    "additionalProperties": false,
    "properties": {
        "skip": {
            "type": [
                "object",
                "null"
            ],
            "additionalProperties": false,
            "properties": {
                "ip": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "maxItems": 500
                }
            }
        },
        "geo": {
            "type": [
                "object",
                "null"
            ],
            "additionalProperties": false,
            "properties": {
                "allow": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "maxItems": 500
                },
                "deny": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "maxItems": 500
                },
                "allow_rule_blocking_http_status_code": {
                    "type": [
                        "integer",
                        "null"
                    ],
                    "minimum": 200,
                    "maximum": 599
                },
                "deny_rule_blocking_http_status_code": {
                    "type": [
                        "integer",
                        "null"
                    ],
                    "minimum": 200,
                    "maximum": 599
                }
            }
        },
        "ip": {
            "type": [
                "object",
                "null"
            ],
            "additionalProperties": false,
            "properties": {
                "allow": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "maxItems": 500
                },
                "deny": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "maxItems": 500
                },
                "allow_rule_blocking_http_status_code": {
                    "type": [
                        "integer",
                        "null"
                    ],
                    "minimum": 200,
                    "maximum": 599
                },
                "deny_rule_blocking_http_status_code": {
                    "type": [
                        "integer",
                        "null"
                    ],
                    "minimum": 200,
                    "maximum": 599
                }
            }
        },
        "uri": {
            "type": [
                "object",
                "null"
            ],
            "additionalProperties": false,
            "properties": {
                "allow": {
                    "type": "array",
                    "items": {
                        "type": "object",
                        "additionalProperties": false,
                        "required": [
                            "regex"
                        ],
                        "properties": {
                            "regex": {
                                "type": "string",
                                "minLength": 1
                            }
                        }
                    },
                    "maxItems": 500
                },
                "deny": {
                    "type": "array",
                    "items": {
                        "type": "object",
                        "additionalProperties": false,
                        "required": [
                            "regex",
                            "http_status_code"
                        ],
                        "properties": {
                            "regex": {
                                "type": "string",
                                "minLength": 1
                            },
                            "http_status_code": {
                                "type": "integer",
                                "minimum": 200,
                                "maximum": 599
                            }
                        }
                    },
                    "maxItems": 500
                },
                "allow_rule_blocking_http_status_code": {
                    "type": [
                        "integer",
                        "null"
                    ],
                    "minimum": 200,
                    "maximum": 599
                }
            }
        },
        "user_agent": {
            "type": [
                "object",
                "null"
            ],
            "additionalProperties": false,
            "properties": {
                "allow": {
                    "type": "array",
                    "items": {
                        "type": "object",
                        "additionalProperties": false,
                        "required": [
                            "regex"
                        ],
                        "properties": {
                            "regex": {
                                "type": "string",
                                "minLength": 1
                            }
                        }
                    },
                    "maxItems": 500
                },
                "deny": {
                    "type": "array",
                    "items": {
                        "type": "object",
                        "additionalProperties": false,
                        "required": [
                            "regex",
                            "http_status_code"
                        ],
                        "properties": {
                            "regex": {
                                "type": "string",
                                "minLength": 1
                            },
                            "http_status_code": {
                                "type": "integer",
                                "minimum": 200,
                                "maximum": 599
                            }
                        }
                    },
                    "maxItems": 500
                },
                "allow_rule_blocking_http_status_code": {
                    "type": [
                        "integer",
                        "null"
                    ],
                    "minimum": 200,
                    "maximum": 599
                },
                "block_without_user_agent": {
                    "type": "boolean"
                }
            }
        },
        "referer": {
            "type": [
                "object",
                "null"
            ],
            "additionalProperties": false,
            "properties": {
                "allow": {
                    "type": "array",
                    "items": {
                        "type": "object",
                        "additionalProperties": false,
                        "required": [
                            "regex"
                        ],
                        "properties": {
                            "regex": {
                                "type": "string",
                                "minLength": 1
                            }
                        }
                    },
                    "maxItems": 500
                },
                "deny": {
                    "type": "array",
                    "items": {
                        "type": "object",
                        "additionalProperties": false,
                        "required": [
                            "regex",
                            "http_status_code"
                        ],
                        "properties": {
                            "regex": {
                                "type": "string",
                                "minLength": 1
                            },
                            "http_status_code": {
                                "type": "integer",
                                "minimum": 200,
                                "maximum": 599
                            }
                        }
                    },
                    "maxItems": 500
                },
                "allow_rule_blocking_http_status_code": {
                    "type": [
                        "integer",
                        "null"
                    ],
                    "minimum": 200,
                    "maximum": 599
                },
                "block_without_referer": {
                    "type": "boolean"
                }
            }
        },
        "method": {
            "type": [
                "object",
                "null"
            ],
            "additionalProperties": false,
            "properties": {
                "allow": {
                    "type": "array",
                    "items": {
                        "type": "string",
                        "enum": [
                            "CONNECT",
                            "DELETE",
                            "GET",
                            "HEAD",
                            "OPTIONS",
                            "PATCH",
                            "POST",
                            "PUT",
                            "TRACE"
                        ]
                    },
                    "maxItems": 9
                },
                "deny": {
                    "type": "array",
                    "items": {
                        "type": "string",
                        "enum": [
                            "CONNECT",
                            "DELETE",
                            "GET",
                            "HEAD",
                            "OPTIONS",
                            "PATCH",
                            "POST",
                            "PUT",
                            "TRACE"
                        ]
                    },
                    "maxItems": 9
                },
                "allow_rule_blocking_http_status_code": {
                    "type": [
                        "integer",
                        "null"
                    ],
                    "minimum": 200,
                    "maximum": 599
                },
                "deny_rule_blocking_http_status_code": {
                    "type": [
                        "integer",
                        "null"
                    ],
                    "minimum": 200,
                    "maximum": 599
                }
            }
        }
    }
}
