{ "$schema": "http://json-schema.org/draft-07/schema#", "title": "go-proxy providers file", "oneOf": [ { "type": "object" }, { "type": "null" } ], "patternProperties": { "^[a-zA-Z0-9_-]+$": { "title": "Proxy entry", "type": "object", "properties": { "scheme": { "title": "Proxy scheme (http, https, tcp, udp)", "oneOf": [ { "type": "string", "enum": [ "http", "https", "tcp", "udp", "tcp:tcp", "udp:udp", "tcp:udp", "udp:tcp" ] }, { "type": "null", "description": "Auto detect base on port format" } ] }, "host": { "default": "localhost", "oneOf": [ { "type": "null", "description": "localhost (default)" }, { "type": "string", "format": "ipv4", "description": "Proxy to ipv4 address" }, { "type": "string", "format": "ipv6", "description": "Proxy to ipv6 address" }, { "type": "string", "format": "hostname", "description": "Proxy to hostname" } ], "title": "Proxy host (ipv4 / ipv6 / hostname)" }, "port": {}, "no_tls_verify": {}, "path_patterns": {}, "set_headers": {}, "hide_headers": {} }, "additionalProperties": false, "allOf": [ { "if": { "properties": { "scheme": { "anyOf": [ { "enum": ["http", "https"] }, { "type": "null" } ] } } }, "then": { "properties": { "port": { "markdownDescription": "Proxy port from **1** to **65535**", "oneOf": [ { "type": "string", "pattern": "^\\d{1,5}$", "patternErrorMessage": "`port` must be a number" }, { "type": "integer", "minimum": 1, "maximum": 65535 } ] }, "path_patterns": { "oneOf": [ { "type": "array", "markdownDescription": "A list of [path patterns](https://pkg.go.dev/net/http#hdr-Patterns-ServeMux)", "items": { "type": "string", "pattern": "^((GET|POST|DELETE|PUT|PATCH|HEAD|OPTIONS|CONNECT)\\s)?(/(\\w*|{\\w*}|{\\$}))+/?$", "patternErrorMessage": "invalid path pattern" } }, { "type": "null", "description": "No proxy path" } ] }, "set_headers": { "type": "object", "description": "Proxy headers to set", "additionalProperties": { "items": { "type": "object", "additionalProperties": { "type": "string" } } } }, "hide_headers": { "type": "array", "description": "Proxy headers to hide", "items": { "type": "string" } } } }, "else": { "properties": { "port": { "markdownDescription": "`listening port:proxy port` or `listening port:service name`", "type": "string", "pattern": "^[0-9]+\\:[0-9a-z]+$", "patternErrorMessage": "invalid syntax" }, "no_tls_verify": { "not": true }, "path_patterns": { "not": true }, "set_headers": { "not": true }, "hide_headers": { "not": true } }, "required": ["port"] } }, { "if": { "properties": { "scheme": { "const": "https" } } }, "then": { "properties": { "no_tls_verify": { "description": "Disable TLS verification for https proxy", "type": "boolean", "default": false } } }, "else": { "properties": { "no_tls_verify": { "not": true } } } } ] } }, "additionalProperties": false }