{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "$id": "#Gateway",
    "description": "A gateway/proxy that can be a system/appliance or software service, such as a network router or application gateway.",
    "type": "object",
    "allOf": [
        { "$ref": "#Entity" },
        {
            "properties": {
                "category": {
                    "description": "The category of the Gateway (corresponds to which OSI layer does the Proxy operates at).",
                    "type": "array",
                    "items": {
                        "type": "string",
                        "enum": ["network", "application", "data", "other"]
                    }
                },
                "function": {
                    "description": "The function of the Gateway",
                    "type": "array",
                    "items": {
                        "type": "string",
                        "enum": [
                            "routing",
                            "nat",
                            "api-gateway",
                            "content-filtering",
                            "content-distribution",
                            "load-balancing",
                            "firewall",
                            "ssl-termination",
                            "reverse-proxy",
                            "remote-access-gateway",
                            "application-protection",
                            "intrusion-detection",
                            "intrusion-prevention",
                            "mail-filtering",
                            "malware-protection",
                            "other"
                        ]
                    }
                },
                "public": {
                    "description": "Indicates if the Gateway is open to public access",
                    "type": "boolean"
                }
            },
            "required": ["category", "function", "public"]
        }
    ]
}
