diff --git a/profiles/base-user/.local/share/nvim/json-schemas/caddy_schema.json b/profiles/base-user/.local/share/nvim/json-schemas/caddy_schema.json index 71873a05..3f1acb9a 100644 --- a/profiles/base-user/.local/share/nvim/json-schemas/caddy_schema.json +++ b/profiles/base-user/.local/share/nvim/json-schemas/caddy_schema.json @@ -24,6 +24,409 @@ "markdownDescription": "reverse_proxy: `object` \nModule: `admin.api.reverse_proxy`", "type": "object" }, + "cache": { + "description": "cache: object\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "cache: `object` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "object", + "properties": { + "allowed_http_verbs": { + "description": "allowed_http_verbs: array\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "allowed_http_verbs: `array` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "array", + "items": { + "type": "string" + } + }, + "api": { + "description": "api: object\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "api: `object` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "object", + "properties": { + "basepath": { + "description": "basepath: string\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "basepath: `string` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "string" + }, + "prometheus": { + "description": "prometheus: object\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "prometheus: `object` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "object", + "properties": { + "basepath": { + "description": "basepath: string\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "basepath: `string` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "string" + }, + "enable": { + "description": "enable: boolean\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "enable: `boolean` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "boolean" + }, + "security": { + "description": "security: boolean\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "security: `boolean` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "boolean" + } + } + }, + "security": { + "description": "security: object\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "security: `object` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "object", + "properties": { + "basepath": { + "description": "basepath: string\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "basepath: `string` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "string" + }, + "enable": { + "description": "enable: boolean\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "enable: `boolean` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "boolean" + }, + "secret": { + "description": "secret: string\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "secret: `string` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "string" + }, + "users": { + "description": "users: array\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "users: `array` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "array", + "items": { + "type": "object", + "properties": { + "password": { + "description": "password: string\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "password: `string` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "string" + }, + "username": { + "description": "username: string\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "username: `string` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "string" + } + } + } + } + } + }, + "souin": { + "description": "souin: object\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "souin: `object` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "object", + "properties": { + "basepath": { + "description": "basepath: string\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "basepath: `string` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "string" + }, + "enable": { + "description": "enable: boolean\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "enable: `boolean` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "boolean" + }, + "security": { + "description": "security: boolean\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "security: `boolean` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "boolean" + } + } + } + } + }, + "badger": { + "description": "badger: object\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "badger: `object` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "object", + "properties": { + "configuration": { + "type": [ + "string", + "null" + ], + "description": "configuration: string\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "configuration: `string` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)" + }, + "path": { + "description": "path: string\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "path: `string` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "string" + }, + "url": { + "description": "url: string\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "url: `string` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "string" + } + } + }, + "cache_keys": { + "description": "cache_keys: object\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "cache_keys: `object` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "object", + "additionalProperties": { + "properties": { + "disable_body": { + "description": "disable_body: boolean\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "disable_body: `boolean` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "boolean" + }, + "disable_host": { + "description": "disable_host: boolean\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "disable_host: `boolean` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "boolean" + }, + "disable_method": { + "description": "disable_method: boolean\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "disable_method: `boolean` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "boolean" + } + } + } + }, + "cache_name": { + "description": "cache_name: string\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "cache_name: `string` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "string" + }, + "cdn": { + "description": "cdn: object\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "cdn: `object` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "object", + "properties": { + "api_key": { + "description": "api_key: string\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "api_key: `string` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "string" + }, + "dynamic": { + "description": "dynamic: boolean\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "dynamic: `boolean` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "boolean" + }, + "email": { + "description": "email: string\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "email: `string` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "string" + }, + "hostname": { + "description": "hostname: string\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "hostname: `string` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "string" + }, + "network": { + "description": "network: string\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "network: `string` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "string" + }, + "provider": { + "description": "provider: string\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "provider: `string` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "string" + }, + "service_id": { + "description": "service_id: string\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "service_id: `string` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "string" + }, + "strategy": { + "description": "strategy: string\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "strategy: `string` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "string" + }, + "zone_id": { + "description": "zone_id: string\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "zone_id: `string` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "string" + } + } + }, + "default_cache_control": { + "description": "default_cache_control: string\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "default_cache_control: `string` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "string" + }, + "distributed": { + "description": "distributed: boolean\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "distributed: `boolean` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "boolean" + }, + "etcd": { + "description": "etcd: object\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "etcd: `object` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "object", + "properties": { + "configuration": { + "type": [ + "string", + "null" + ], + "description": "configuration: string\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "configuration: `string` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)" + }, + "path": { + "description": "path: string\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "path: `string` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "string" + }, + "url": { + "description": "url: string\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "url: `string` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "string" + } + } + }, + "headers": { + "description": "headers: array\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "headers: `array` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "array", + "items": { + "type": "string" + } + }, + "key": { + "description": "key: object\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "key: `object` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "object", + "properties": { + "disable_body": { + "description": "disable_body: boolean\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "disable_body: `boolean` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "boolean" + }, + "disable_host": { + "description": "disable_host: boolean\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "disable_host: `boolean` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "boolean" + }, + "disable_method": { + "description": "disable_method: boolean\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "disable_method: `boolean` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "boolean" + } + } + }, + "log_level": { + "description": "log_level: string\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "log_level: `string` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "string" + }, + "nuts": { + "description": "nuts: object\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "nuts: `object` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "object", + "properties": { + "configuration": { + "type": [ + "string", + "null" + ], + "description": "configuration: string\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "configuration: `string` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)" + }, + "path": { + "description": "path: string\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "path: `string` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "string" + }, + "url": { + "description": "url: string\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "url: `string` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "string" + } + } + }, + "olric": { + "description": "olric: object\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "olric: `object` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "object", + "properties": { + "configuration": { + "type": [ + "string", + "null" + ], + "description": "configuration: string\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "configuration: `string` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)" + }, + "path": { + "description": "path: string\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "path: `string` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "string" + }, + "url": { + "description": "url: string\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "url: `string` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "string" + } + } + }, + "redis": { + "description": "redis: object\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "redis: `object` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "object", + "properties": { + "configuration": { + "type": [ + "string", + "null" + ], + "description": "configuration: string\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "configuration: `string` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)" + }, + "path": { + "description": "path: string\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "path: `string` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "string" + }, + "url": { + "description": "url: string\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "url: `string` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "string" + } + } + }, + "regex": { + "description": "regex: object\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "regex: `object` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "object", + "properties": { + "exclude": { + "description": "exclude: string\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "exclude: `string` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "string" + } + } + }, + "stale": { + "description": "stale: object\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "stale: `object` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "object" + }, + "timeout": { + "description": "timeout: object\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "timeout: `object` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "object", + "properties": { + "backend": { + "description": "backend: object\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "backend: `object` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "object" + }, + "cache": { + "description": "cache: object\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "cache: `object` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "object" + } + } + }, + "ttl": { + "description": "ttl: object\nModule: cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp", + "markdownDescription": "ttl: `object` \nModule: `cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinApp)", + "type": "object" + } + } + }, "caddy.adapters.caddyfile": { "description": "caddyfile: object\nModule: caddy.adapters.caddyfile", "markdownDescription": "caddyfile: `object` \nModule: `caddy.adapters.caddyfile`", @@ -175,6 +578,18 @@ "filter" ], "allOf": [ + { + "if": { + "properties": { + "filter": { + "const": "regexp" + } + } + }, + "then": { + "$ref": "#/definitions/caddy.logging.encoders.filter.regexp" + } + }, { "if": { "properties": { @@ -259,18 +674,6 @@ "$ref": "#/definitions/caddy.logging.encoders.filter.query" } }, - { - "if": { - "properties": { - "filter": { - "const": "regexp" - } - } - }, - "then": { - "$ref": "#/definitions/caddy.logging.encoders.filter.regexp" - } - }, { "properties": { "filter": { @@ -278,14 +681,14 @@ "markdownDescription": "key to identify `fields` module. \nfilter: `string` \nModule: `caddy.logging.encoders.filter`", "type": "string", "enum": [ + "regexp", "rename", "replace", "cookie", "delete", "hash", "ip_mask", - "query", - "regexp" + "query" ] } } @@ -301,18 +704,6 @@ "format" ], "allOf": [ - { - "if": { - "properties": { - "format": { - "const": "json" - } - } - }, - "then": { - "$ref": "#/definitions/caddy.logging.encoders.json" - } - }, { "if": { "properties": { @@ -337,6 +728,18 @@ "$ref": "#/definitions/caddy.logging.encoders.filter" } }, + { + "if": { + "properties": { + "format": { + "const": "json" + } + } + }, + "then": { + "$ref": "#/definitions/caddy.logging.encoders.json" + } + }, { "properties": { "format": { @@ -344,9 +747,9 @@ "markdownDescription": "key to identify `wrap` module. \nformat: `string` \nModule: `caddy.logging.encoders`", "type": "string", "enum": [ - "json", "console", - "filter" + "filter", + "json" ] } } @@ -680,14 +1083,57 @@ } } }, + "events": { + "description": "events: object\nModule: events\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyevents#App\nApp implements a global eventing system within Caddy.\nModules can emit and subscribe to events, providing\nhooks into deep parts of the code base that aren't\notherwise accessible. Events provide information about\nwhat and when things are happening, and this facility\nallows handlers to take action when events occur,\nadd information to the event's metadata, and even\ncontrol program flow in some cases.\n\nEvents are propagated in a DOM-like fashion. An event\nemitted from module `a.b.c` (the \"origin\") will first\ninvoke handlers listening to `a.b.c`, then `a.b`,\nthen `a`, then those listening regardless of origin.\nIf a handler returns the special error Aborted, then\npropagation immediately stops and the event is marked\nas aborted. Emitters may optionally choose to adjust\nprogram flow based on an abort.\n\nModules can subscribe to events by origin and/or name.\nA handler is invoked only if it is subscribed to the\nevent by name and origin. Subscriptions should be\nregistered during the provisioning phase, before apps\nare started.\n\nEvent handlers are fired synchronously as part of the\nregular flow of the program. This allows event handlers\nto control the flow of the program if the origin permits\nit and also allows handlers to convey new information\nback into the origin module before it continues.\nIn essence, event handlers are similar to HTTP\nmiddleware handlers.\n\nEvent bindings/subscribers are unordered; i.e.\nevent handlers are invoked in an arbitrary order.\nEvent handlers should not rely on the logic of other\nhandlers to succeed.\n\nThe entirety of this app module is EXPERIMENTAL and\nsubject to change. Pay attention to release notes.\n\n", + "markdownDescription": "events: `object` \nModule: `events` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyevents#App) \nApp implements a global eventing system within Caddy.\nModules can emit and subscribe to events, providing\nhooks into deep parts of the code base that aren't\notherwise accessible. Events provide information about\nwhat and when things are happening, and this facility\nallows handlers to take action when events occur,\nadd information to the event's metadata, and even\ncontrol program flow in some cases.\n\nEvents are propagated in a DOM-like fashion. An event\nemitted from module `a.b.c` (the \"origin\") will first\ninvoke handlers listening to `a.b.c`, then `a.b`,\nthen `a`, then those listening regardless of origin.\nIf a handler returns the special error Aborted, then\npropagation immediately stops and the event is marked\nas aborted. Emitters may optionally choose to adjust\nprogram flow based on an abort.\n\nModules can subscribe to events by origin and/or name.\nA handler is invoked only if it is subscribed to the\nevent by name and origin. Subscriptions should be\nregistered during the provisioning phase, before apps\nare started.\n\nEvent handlers are fired synchronously as part of the\nregular flow of the program. This allows event handlers\nto control the flow of the program if the origin permits\nit and also allows handlers to convey new information\nback into the origin module before it continues.\nIn essence, event handlers are similar to HTTP\nmiddleware handlers.\n\nEvent bindings/subscribers are unordered; i.e.\nevent handlers are invoked in an arbitrary order.\nEvent handlers should not rely on the logic of other\nhandlers to succeed.\n\nThe entirety of this app module is EXPERIMENTAL and\nsubject to change. Pay attention to release notes.\n \n", + "type": "object", + "properties": { + "subscriptions": { + "description": "subscriptions: array\nModule: events\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyevents#Subscription\nSubscriptions bind handlers to one or more events\neither globally or scoped to specific modules or module\nnamespaces.\n\n\nSubscription represents binding of one or more handlers to\none or more events.\n", + "markdownDescription": "subscriptions: `array` \nModule: `events` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyevents#Subscription) \nSubscriptions bind handlers to one or more events\neither globally or scoped to specific modules or module\nnamespaces.\n\n\nSubscription represents binding of one or more handlers to\none or more events. \n", + "type": "array", + "items": { + "description": "https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyevents#Subscription\nSubscriptions bind handlers to one or more events\neither globally or scoped to specific modules or module\nnamespaces.\n\n\nSubscription represents binding of one or more handlers to\none or more events.\n", + "markdownDescription": "[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyevents#Subscription) \nSubscriptions bind handlers to one or more events\neither globally or scoped to specific modules or module\nnamespaces.\n\n\nSubscription represents binding of one or more handlers to\none or more events. \n", + "type": "object", + "properties": { + "events": { + "description": "events: array\nModule: events\nThe name(s) of the event(s) to bind to. Default: all events.\n", + "markdownDescription": "events: `array` \nModule: `events` \nThe name(s) of the event(s) to bind to. Default: all events. \n", + "type": "array", + "items": { + "description": "The name(s) of the event(s) to bind to. Default: all events.\n", + "markdownDescription": "The name(s) of the event(s) to bind to. Default: all events. \n", + "type": "string" + } + }, + "handlers": { + "description": "handlers: any\nModule: events.handlers\nThe event handler modules. These implement the actual\nbehavior to invoke when an event occurs. At least one\nhandler is required.\n", + "markdownDescription": "handlers: `any` \nModule: `events.handlers` \nThe event handler modules. These implement the actual\nbehavior to invoke when an event occurs. At least one\nhandler is required. \n" + }, + "modules": { + "description": "modules: array\nModule: events\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2#ModuleID\nThe ID or namespace of the module(s) from which events\noriginate to listen to for events. Default: all modules.\n\nEvents propagate up, so events emitted by module \"a.b.c\"\nwill also trigger the event for \"a.b\" and \"a\". Thus, to\nreceive all events from \"a.b.c\" and \"a.b.d\", for example,\none can subscribe to either \"a.b\" or all of \"a\" entirely.\n\n\nModuleID is a string that uniquely identifies a Caddy module. A\nmodule ID is lightly structured. It consists of dot-separated\nlabels which form a simple hierarchy from left to right. The last\nlabel is the module name, and the labels before that constitute\nthe namespace (or scope).\n\nThus, a module ID has the form: \u003cnamespace\u003e.\u003cname\u003e\n\nAn ID with no dot has the empty namespace, which is appropriate\nfor app modules (these are \"top-level\" modules that Caddy core\nloads and runs).\n\nModule IDs should be lowercase and use underscores (_) instead of\nspaces.\n\nExamples of valid IDs:\n- http\n- http.handlers.file_server\n- caddy.logging.encoders.json\n", + "markdownDescription": "modules: `array` \nModule: `events` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2#ModuleID) \nThe ID or namespace of the module(s) from which events\noriginate to listen to for events. Default: all modules.\n\nEvents propagate up, so events emitted by module \"a.b.c\"\nwill also trigger the event for \"a.b\" and \"a\". Thus, to\nreceive all events from \"a.b.c\" and \"a.b.d\", for example,\none can subscribe to either \"a.b\" or all of \"a\" entirely.\n\n\nModuleID is a string that uniquely identifies a Caddy module. A\nmodule ID is lightly structured. It consists of dot-separated\nlabels which form a simple hierarchy from left to right. The last\nlabel is the module name, and the labels before that constitute\nthe namespace (or scope).\n\nThus, a module ID has the form: \u003cnamespace\u003e.\u003cname\u003e\n\nAn ID with no dot has the empty namespace, which is appropriate\nfor app modules (these are \"top-level\" modules that Caddy core\nloads and runs).\n\nModule IDs should be lowercase and use underscores (_) instead of\nspaces.\n\nExamples of valid IDs:\n- http\n- http.handlers.file_server\n- caddy.logging.encoders.json \n", + "type": "array", + "items": { + "description": "https://pkg.go.dev/github.com/caddyserver/caddy/v2#ModuleID\nThe ID or namespace of the module(s) from which events\noriginate to listen to for events. Default: all modules.\n\nEvents propagate up, so events emitted by module \"a.b.c\"\nwill also trigger the event for \"a.b\" and \"a\". Thus, to\nreceive all events from \"a.b.c\" and \"a.b.d\", for example,\none can subscribe to either \"a.b\" or all of \"a\" entirely.\n\n\nModuleID is a string that uniquely identifies a Caddy module. A\nmodule ID is lightly structured. It consists of dot-separated\nlabels which form a simple hierarchy from left to right. The last\nlabel is the module name, and the labels before that constitute\nthe namespace (or scope).\n\nThus, a module ID has the form: \u003cnamespace\u003e.\u003cname\u003e\n\nAn ID with no dot has the empty namespace, which is appropriate\nfor app modules (these are \"top-level\" modules that Caddy core\nloads and runs).\n\nModule IDs should be lowercase and use underscores (_) instead of\nspaces.\n\nExamples of valid IDs:\n- http\n- http.handlers.file_server\n- caddy.logging.encoders.json\n", + "markdownDescription": "[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2#ModuleID) \nThe ID or namespace of the module(s) from which events\noriginate to listen to for events. Default: all modules.\n\nEvents propagate up, so events emitted by module \"a.b.c\"\nwill also trigger the event for \"a.b\" and \"a\". Thus, to\nreceive all events from \"a.b.c\" and \"a.b.d\", for example,\none can subscribe to either \"a.b\" or all of \"a\" entirely.\n\n\nModuleID is a string that uniquely identifies a Caddy module. A\nmodule ID is lightly structured. It consists of dot-separated\nlabels which form a simple hierarchy from left to right. The last\nlabel is the module name, and the labels before that constitute\nthe namespace (or scope).\n\nThus, a module ID has the form: \u003cnamespace\u003e.\u003cname\u003e\n\nAn ID with no dot has the empty namespace, which is appropriate\nfor app modules (these are \"top-level\" modules that Caddy core\nloads and runs).\n\nModule IDs should be lowercase and use underscores (_) instead of\nspaces.\n\nExamples of valid IDs:\n- http\n- http.handlers.file_server\n- caddy.logging.encoders.json \n", + "type": "string" + } + } + } + } + } + } + }, "http": { - "description": "http: object\nModule: http\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp#App\nApp is a robust, production-ready HTTP server.\n\nHTTPS is enabled by default if host matchers with qualifying names are used\nin any of routes; certificates are automatically provisioned and renewed.\nAdditionally, automatic HTTPS will also enable HTTPS for servers that listen\nonly on the HTTPS port but which do not have any TLS connection policies\ndefined by adding a good, default TLS connection policy.\n\nIn HTTP routes, additional placeholders are available (replace any `*`):\n\nPlaceholder | Description\n------------|---------------\n`{http.request.body}` | The request body (⚠️ inefficient; use only for debugging)\n`{http.request.cookie.*}` | HTTP request cookie\n`{http.request.duration}` | Time up to now spent handling the request (after decoding headers from client)\n`{http.request.duration_ms}` | Same as 'duration', but in milliseconds.\n`{http.request.uuid}` | The request unique identifier\n`{http.request.header.*}` | Specific request header field\n`{http.request.host.labels.*}` | Request host labels (0-based from right); e.g. for foo.example.com: 0=com, 1=example, 2=foo\n`{http.request.host}` | The host part of the request's Host header\n`{http.request.hostport}` | The host and port from the request's Host header\n`{http.request.method}` | The request method\n`{http.request.orig_method}` | The request's original method\n`{http.request.orig_uri.path.dir}` | The request's original directory\n`{http.request.orig_uri.path.file}` | The request's original filename\n`{http.request.orig_uri.path}` | The request's original path\n`{http.request.orig_uri.query}` | The request's original query string (without `?`)\n`{http.request.orig_uri}` | The request's original URI\n`{http.request.port}` | The port part of the request's Host header\n`{http.request.proto}` | The protocol of the request\n`{http.request.remote.host}` | The host part of the remote client's address\n`{http.request.remote.port}` | The port part of the remote client's address\n`{http.request.remote}` | The address of the remote client\n`{http.request.scheme}` | The request scheme\n`{http.request.tls.version}` | The TLS version name\n`{http.request.tls.cipher_suite}` | The TLS cipher suite\n`{http.request.tls.resumed}` | The TLS connection resumed a previous connection\n`{http.request.tls.proto}` | The negotiated next protocol\n`{http.request.tls.proto_mutual}` | The negotiated next protocol was advertised by the server\n`{http.request.tls.server_name}` | The server name requested by the client, if any\n`{http.request.tls.client.fingerprint}` | The SHA256 checksum of the client certificate\n`{http.request.tls.client.public_key}` | The public key of the client certificate.\n`{http.request.tls.client.public_key_sha256}` | The SHA256 checksum of the client's public key.\n`{http.request.tls.client.certificate_pem}` | The PEM-encoded value of the certificate.\n`{http.request.tls.client.certificate_der_base64}` | The base64-encoded value of the certificate.\n`{http.request.tls.client.issuer}` | The issuer DN of the client certificate\n`{http.request.tls.client.serial}` | The serial number of the client certificate\n`{http.request.tls.client.subject}` | The subject DN of the client certificate\n`{http.request.tls.client.san.dns_names.*}` | SAN DNS names(index optional)\n`{http.request.tls.client.san.emails.*}` | SAN email addresses (index optional)\n`{http.request.tls.client.san.ips.*}` | SAN IP addresses (index optional)\n`{http.request.tls.client.san.uris.*}` | SAN URIs (index optional)\n`{http.request.uri.path.*}` | Parts of the path, split by `/` (0-based from left)\n`{http.request.uri.path.dir}` | The directory, excluding leaf filename\n`{http.request.uri.path.file}` | The filename of the path, excluding directory\n`{http.request.uri.path}` | The path component of the request URI\n`{http.request.uri.query.*}` | Individual query string value\n`{http.request.uri.query}` | The query string (without `?`)\n`{http.request.uri}` | The full request URI\n`{http.response.header.*}` | Specific response header field\n`{http.vars.*}` | Custom variables in the HTTP handler chain\n\n", - "markdownDescription": "http: `object` \nModule: `http` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp#App) \nApp is a robust, production-ready HTTP server.\n\nHTTPS is enabled by default if host matchers with qualifying names are used\nin any of routes; certificates are automatically provisioned and renewed.\nAdditionally, automatic HTTPS will also enable HTTPS for servers that listen\nonly on the HTTPS port but which do not have any TLS connection policies\ndefined by adding a good, default TLS connection policy.\n\nIn HTTP routes, additional placeholders are available (replace any `*`):\n\nPlaceholder | Description\n------------|---------------\n`{http.request.body}` | The request body (⚠️ inefficient; use only for debugging)\n`{http.request.cookie.*}` | HTTP request cookie\n`{http.request.duration}` | Time up to now spent handling the request (after decoding headers from client)\n`{http.request.duration_ms}` | Same as 'duration', but in milliseconds.\n`{http.request.uuid}` | The request unique identifier\n`{http.request.header.*}` | Specific request header field\n`{http.request.host.labels.*}` | Request host labels (0-based from right); e.g. for foo.example.com: 0=com, 1=example, 2=foo\n`{http.request.host}` | The host part of the request's Host header\n`{http.request.hostport}` | The host and port from the request's Host header\n`{http.request.method}` | The request method\n`{http.request.orig_method}` | The request's original method\n`{http.request.orig_uri.path.dir}` | The request's original directory\n`{http.request.orig_uri.path.file}` | The request's original filename\n`{http.request.orig_uri.path}` | The request's original path\n`{http.request.orig_uri.query}` | The request's original query string (without `?`)\n`{http.request.orig_uri}` | The request's original URI\n`{http.request.port}` | The port part of the request's Host header\n`{http.request.proto}` | The protocol of the request\n`{http.request.remote.host}` | The host part of the remote client's address\n`{http.request.remote.port}` | The port part of the remote client's address\n`{http.request.remote}` | The address of the remote client\n`{http.request.scheme}` | The request scheme\n`{http.request.tls.version}` | The TLS version name\n`{http.request.tls.cipher_suite}` | The TLS cipher suite\n`{http.request.tls.resumed}` | The TLS connection resumed a previous connection\n`{http.request.tls.proto}` | The negotiated next protocol\n`{http.request.tls.proto_mutual}` | The negotiated next protocol was advertised by the server\n`{http.request.tls.server_name}` | The server name requested by the client, if any\n`{http.request.tls.client.fingerprint}` | The SHA256 checksum of the client certificate\n`{http.request.tls.client.public_key}` | The public key of the client certificate.\n`{http.request.tls.client.public_key_sha256}` | The SHA256 checksum of the client's public key.\n`{http.request.tls.client.certificate_pem}` | The PEM-encoded value of the certificate.\n`{http.request.tls.client.certificate_der_base64}` | The base64-encoded value of the certificate.\n`{http.request.tls.client.issuer}` | The issuer DN of the client certificate\n`{http.request.tls.client.serial}` | The serial number of the client certificate\n`{http.request.tls.client.subject}` | The subject DN of the client certificate\n`{http.request.tls.client.san.dns_names.*}` | SAN DNS names(index optional)\n`{http.request.tls.client.san.emails.*}` | SAN email addresses (index optional)\n`{http.request.tls.client.san.ips.*}` | SAN IP addresses (index optional)\n`{http.request.tls.client.san.uris.*}` | SAN URIs (index optional)\n`{http.request.uri.path.*}` | Parts of the path, split by `/` (0-based from left)\n`{http.request.uri.path.dir}` | The directory, excluding leaf filename\n`{http.request.uri.path.file}` | The filename of the path, excluding directory\n`{http.request.uri.path}` | The path component of the request URI\n`{http.request.uri.query.*}` | Individual query string value\n`{http.request.uri.query}` | The query string (without `?`)\n`{http.request.uri}` | The full request URI\n`{http.response.header.*}` | Specific response header field\n`{http.vars.*}` | Custom variables in the HTTP handler chain\n \n", + "description": "http: object\nModule: http\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp#App\nApp is a robust, production-ready HTTP server.\n\nHTTPS is enabled by default if host matchers with qualifying names are used\nin any of routes; certificates are automatically provisioned and renewed.\nAdditionally, automatic HTTPS will also enable HTTPS for servers that listen\nonly on the HTTPS port but which do not have any TLS connection policies\ndefined by adding a good, default TLS connection policy.\n\nIn HTTP routes, additional placeholders are available (replace any `*`):\n\nPlaceholder | Description\n------------|---------------\n`{http.request.body}` | The request body (⚠️ inefficient; use only for debugging)\n`{http.request.cookie.*}` | HTTP request cookie\n`{http.request.duration}` | Time up to now spent handling the request (after decoding headers from client)\n`{http.request.duration_ms}` | Same as 'duration', but in milliseconds.\n`{http.request.uuid}` | The request unique identifier\n`{http.request.header.*}` | Specific request header field\n`{http.request.host.labels.*}` | Request host labels (0-based from right); e.g. for foo.example.com: 0=com, 1=example, 2=foo\n`{http.request.host}` | The host part of the request's Host header\n`{http.request.hostport}` | The host and port from the request's Host header\n`{http.request.method}` | The request method\n`{http.request.orig_method}` | The request's original method\n`{http.request.orig_uri.path.dir}` | The request's original directory\n`{http.request.orig_uri.path.file}` | The request's original filename\n`{http.request.orig_uri.path}` | The request's original path\n`{http.request.orig_uri.query}` | The request's original query string (without `?`)\n`{http.request.orig_uri}` | The request's original URI\n`{http.request.port}` | The port part of the request's Host header\n`{http.request.proto}` | The protocol of the request\n`{http.request.remote.host}` | The host part of the remote client's address\n`{http.request.remote.port}` | The port part of the remote client's address\n`{http.request.remote}` | The address of the remote client\n`{http.request.scheme}` | The request scheme\n`{http.request.tls.version}` | The TLS version name\n`{http.request.tls.cipher_suite}` | The TLS cipher suite\n`{http.request.tls.resumed}` | The TLS connection resumed a previous connection\n`{http.request.tls.proto}` | The negotiated next protocol\n`{http.request.tls.proto_mutual}` | The negotiated next protocol was advertised by the server\n`{http.request.tls.server_name}` | The server name requested by the client, if any\n`{http.request.tls.client.fingerprint}` | The SHA256 checksum of the client certificate\n`{http.request.tls.client.public_key}` | The public key of the client certificate.\n`{http.request.tls.client.public_key_sha256}` | The SHA256 checksum of the client's public key.\n`{http.request.tls.client.certificate_pem}` | The PEM-encoded value of the certificate.\n`{http.request.tls.client.certificate_der_base64}` | The base64-encoded value of the certificate.\n`{http.request.tls.client.issuer}` | The issuer DN of the client certificate\n`{http.request.tls.client.serial}` | The serial number of the client certificate\n`{http.request.tls.client.subject}` | The subject DN of the client certificate\n`{http.request.tls.client.san.dns_names.*}` | SAN DNS names(index optional)\n`{http.request.tls.client.san.emails.*}` | SAN email addresses (index optional)\n`{http.request.tls.client.san.ips.*}` | SAN IP addresses (index optional)\n`{http.request.tls.client.san.uris.*}` | SAN URIs (index optional)\n`{http.request.uri.path.*}` | Parts of the path, split by `/` (0-based from left)\n`{http.request.uri.path.dir}` | The directory, excluding leaf filename\n`{http.request.uri.path.file}` | The filename of the path, excluding directory\n`{http.request.uri.path}` | The path component of the request URI\n`{http.request.uri.query.*}` | Individual query string value\n`{http.request.uri.query}` | The query string (without `?`)\n`{http.request.uri}` | The full request URI\n`{http.response.header.*}` | Specific response header field\n`{http.vars.*}` | Custom variables in the HTTP handler chain\n`{http.shutting_down}` | True if the HTTP app is shutting down\n`{http.time_until_shutdown}` | Time until HTTP server shutdown, if scheduled\n\n", + "markdownDescription": "http: `object` \nModule: `http` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp#App) \nApp is a robust, production-ready HTTP server.\n\nHTTPS is enabled by default if host matchers with qualifying names are used\nin any of routes; certificates are automatically provisioned and renewed.\nAdditionally, automatic HTTPS will also enable HTTPS for servers that listen\nonly on the HTTPS port but which do not have any TLS connection policies\ndefined by adding a good, default TLS connection policy.\n\nIn HTTP routes, additional placeholders are available (replace any `*`):\n\nPlaceholder | Description\n------------|---------------\n`{http.request.body}` | The request body (⚠️ inefficient; use only for debugging)\n`{http.request.cookie.*}` | HTTP request cookie\n`{http.request.duration}` | Time up to now spent handling the request (after decoding headers from client)\n`{http.request.duration_ms}` | Same as 'duration', but in milliseconds.\n`{http.request.uuid}` | The request unique identifier\n`{http.request.header.*}` | Specific request header field\n`{http.request.host.labels.*}` | Request host labels (0-based from right); e.g. for foo.example.com: 0=com, 1=example, 2=foo\n`{http.request.host}` | The host part of the request's Host header\n`{http.request.hostport}` | The host and port from the request's Host header\n`{http.request.method}` | The request method\n`{http.request.orig_method}` | The request's original method\n`{http.request.orig_uri.path.dir}` | The request's original directory\n`{http.request.orig_uri.path.file}` | The request's original filename\n`{http.request.orig_uri.path}` | The request's original path\n`{http.request.orig_uri.query}` | The request's original query string (without `?`)\n`{http.request.orig_uri}` | The request's original URI\n`{http.request.port}` | The port part of the request's Host header\n`{http.request.proto}` | The protocol of the request\n`{http.request.remote.host}` | The host part of the remote client's address\n`{http.request.remote.port}` | The port part of the remote client's address\n`{http.request.remote}` | The address of the remote client\n`{http.request.scheme}` | The request scheme\n`{http.request.tls.version}` | The TLS version name\n`{http.request.tls.cipher_suite}` | The TLS cipher suite\n`{http.request.tls.resumed}` | The TLS connection resumed a previous connection\n`{http.request.tls.proto}` | The negotiated next protocol\n`{http.request.tls.proto_mutual}` | The negotiated next protocol was advertised by the server\n`{http.request.tls.server_name}` | The server name requested by the client, if any\n`{http.request.tls.client.fingerprint}` | The SHA256 checksum of the client certificate\n`{http.request.tls.client.public_key}` | The public key of the client certificate.\n`{http.request.tls.client.public_key_sha256}` | The SHA256 checksum of the client's public key.\n`{http.request.tls.client.certificate_pem}` | The PEM-encoded value of the certificate.\n`{http.request.tls.client.certificate_der_base64}` | The base64-encoded value of the certificate.\n`{http.request.tls.client.issuer}` | The issuer DN of the client certificate\n`{http.request.tls.client.serial}` | The serial number of the client certificate\n`{http.request.tls.client.subject}` | The subject DN of the client certificate\n`{http.request.tls.client.san.dns_names.*}` | SAN DNS names(index optional)\n`{http.request.tls.client.san.emails.*}` | SAN email addresses (index optional)\n`{http.request.tls.client.san.ips.*}` | SAN IP addresses (index optional)\n`{http.request.tls.client.san.uris.*}` | SAN URIs (index optional)\n`{http.request.uri.path.*}` | Parts of the path, split by `/` (0-based from left)\n`{http.request.uri.path.dir}` | The directory, excluding leaf filename\n`{http.request.uri.path.file}` | The filename of the path, excluding directory\n`{http.request.uri.path}` | The path component of the request URI\n`{http.request.uri.query.*}` | Individual query string value\n`{http.request.uri.query}` | The query string (without `?`)\n`{http.request.uri}` | The full request URI\n`{http.response.header.*}` | Specific response header field\n`{http.vars.*}` | Custom variables in the HTTP handler chain\n`{http.shutting_down}` | True if the HTTP app is shutting down\n`{http.time_until_shutdown}` | Time until HTTP server shutdown, if scheduled\n \n", "type": "object", "properties": { "grace_period": { - "description": "grace_period: number\nModule: http\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2#Duration\nGracePeriod is how long to wait for active connections when shutting\ndown the server. Once the grace period is over, connections will\nbe forcefully closed.\n\n\nDuration can be an integer or a string. An integer is\ninterpreted as nanoseconds. If a string, it is a Go\ntime.Duration value such as `300ms`, `1.5h`, or `2h45m`;\nvalid units are `ns`, `us`/`µs`, `ms`, `s`, `m`, `h`, and `d`.\n", - "markdownDescription": "grace_period: `number` \nModule: `http` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2#Duration) \nGracePeriod is how long to wait for active connections when shutting\ndown the server. Once the grace period is over, connections will\nbe forcefully closed.\n\n\nDuration can be an integer or a string. An integer is\ninterpreted as nanoseconds. If a string, it is a Go\ntime.Duration value such as `300ms`, `1.5h`, or `2h45m`;\nvalid units are `ns`, `us`/`µs`, `ms`, `s`, `m`, `h`, and `d`. \n", + "description": "grace_period: number\nModule: http\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2#Duration\nGracePeriod is how long to wait for active connections when shutting\ndown the servers. During the grace period, no new connections are\naccepted, idle connections are closed, and active connections will\nbe given the full length of time to become idle and close.\nOnce the grace period is over, connections will be forcefully closed.\nIf zero, the grace period is eternal. Default: 0.\n\n\nDuration can be an integer or a string. An integer is\ninterpreted as nanoseconds. If a string, it is a Go\ntime.Duration value such as `300ms`, `1.5h`, or `2h45m`;\nvalid units are `ns`, `us`/`µs`, `ms`, `s`, `m`, `h`, and `d`.\n", + "markdownDescription": "grace_period: `number` \nModule: `http` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2#Duration) \nGracePeriod is how long to wait for active connections when shutting\ndown the servers. During the grace period, no new connections are\naccepted, idle connections are closed, and active connections will\nbe given the full length of time to become idle and close.\nOnce the grace period is over, connections will be forcefully closed.\nIf zero, the grace period is eternal. Default: 0.\n\n\nDuration can be an integer or a string. An integer is\ninterpreted as nanoseconds. If a string, it is a Go\ntime.Duration value such as `300ms`, `1.5h`, or `2h45m`;\nvalid units are `ns`, `us`/`µs`, `ms`, `s`, `m`, `h`, and `d`. \n", "type": "number" }, "http_port": { @@ -708,11 +1154,6 @@ "description": "https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp#Server\nServers is the list of servers, keyed by arbitrary names chosen\nat your discretion for your own convenience; the keys do not\naffect functionality.\n\n\nServer describes an HTTP server.\n", "markdownDescription": "[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp#Server) \nServers is the list of servers, keyed by arbitrary names chosen\nat your discretion for your own convenience; the keys do not\naffect functionality.\n\n\nServer describes an HTTP server. \n", "properties": { - "allow_h2c": { - "description": "allow_h2c: boolean\nModule: http\nEnables H2C (\"Cleartext HTTP/2\" or \"H2 over TCP\") support,\nwhich will serve HTTP/2 over plaintext TCP connections if\nthe client supports it. Because this is not implemented by the\nGo standard library, using H2C is incompatible with most\nof the other options for this server. Do not enable this\nonly to achieve maximum client compatibility. In practice,\nvery few clients implement H2C, and even fewer require it.\nThis setting applies only to unencrypted HTTP listeners.\n⚠️ Experimental feature; subject to change or removal.\n", - "markdownDescription": "allow_h2c: `boolean` \nModule: `http` \nEnables H2C (\"Cleartext HTTP/2\" or \"H2 over TCP\") support,\nwhich will serve HTTP/2 over plaintext TCP connections if\nthe client supports it. Because this is not implemented by the\nGo standard library, using H2C is incompatible with most\nof the other options for this server. Do not enable this\nonly to achieve maximum client compatibility. In practice,\nvery few clients implement H2C, and even fewer require it.\nThis setting applies only to unencrypted HTTP listeners.\n⚠️ Experimental feature; subject to change or removal. \n", - "type": "boolean" - }, "automatic_https": { "description": "automatic_https: object\nModule: http\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp#AutoHTTPSConfig\nAutoHTTPS configures or disables automatic HTTPS within this server.\nHTTPS is enabled automatically and by default when qualifying names\nare present in a Host matcher and/or when the server is listening\nonly on the HTTPS port.\n\n\nAutoHTTPSConfig is used to disable automatic HTTPS\nor certain aspects of it for a specific server.\nHTTPS is enabled automatically and by default when\nqualifying hostnames are available from the config.\n", "markdownDescription": "automatic_https: `object` \nModule: `http` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp#AutoHTTPSConfig) \nAutoHTTPS configures or disables automatic HTTPS within this server.\nHTTPS is enabled automatically and by default when qualifying names\nare present in a Host matcher and/or when the server is listening\nonly on the HTTPS port.\n\n\nAutoHTTPSConfig is used to disable automatic HTTPS\nor certain aspects of it for a specific server.\nHTTPS is enabled automatically and by default when\nqualifying hostnames are available from the config. \n", @@ -790,6 +1231,90 @@ "handler" ], "allOf": [ + { + "if": { + "properties": { + "handler": { + "const": "reverse_proxy" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.reverse_proxy" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "subroute" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.subroute" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "templates" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.templates" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "tracing" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.tracing" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "authentication" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.authentication" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "copy_response_headers" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.copy_response_headers" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "file_server" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.file_server" + } + }, { "if": { "properties": { @@ -818,132 +1343,12 @@ "if": { "properties": { "handler": { - "const": "request_body" + "const": "rate_limit" } } }, "then": { - "$ref": "#/definitions/http.handlers.request_body" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "rewrite" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.rewrite" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "subroute" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.subroute" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "tracing" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.tracing" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "encode" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.encode" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "static_response" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.static_response" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "authentication" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.authentication" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "copy_response" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.copy_response" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "copy_response_headers" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.copy_response_headers" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "error" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.error" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "file_server" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.file_server" + "$ref": "#/definitions/http.handlers.rate_limit" } }, { @@ -962,36 +1367,72 @@ "if": { "properties": { "handler": { - "const": "reverse_proxy" + "const": "push" } } }, "then": { - "$ref": "#/definitions/http.handlers.reverse_proxy" + "$ref": "#/definitions/http.handlers.push" } }, { "if": { "properties": { "handler": { - "const": "templates" + "const": "rewrite" } } }, "then": { - "$ref": "#/definitions/http.handlers.templates" + "$ref": "#/definitions/http.handlers.rewrite" } }, { "if": { "properties": { "handler": { - "const": "acme_server" + "const": "cache" } } }, "then": { - "$ref": "#/definitions/http.handlers.acme_server" + "$ref": "#/definitions/http.handlers.cache" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "copy_response" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.copy_response" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "encode" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.encode" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "error" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.error" } }, { @@ -1010,12 +1451,48 @@ "if": { "properties": { "handler": { - "const": "push" + "const": "acme_server" } } }, "then": { - "$ref": "#/definitions/http.handlers.push" + "$ref": "#/definitions/http.handlers.acme_server" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "authenticator" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.authenticator" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "request_body" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.request_body" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "static_response" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.static_response" } }, { @@ -1025,25 +1502,28 @@ "markdownDescription": "key to identify `handle` module. \nhandler: `string` \nModule: `http.handlers`", "type": "string", "enum": [ + "reverse_proxy", + "subroute", + "templates", + "tracing", + "authentication", + "copy_response_headers", + "file_server", "headers", "metrics", - "request_body", - "rewrite", - "subroute", - "tracing", - "encode", - "static_response", - "authentication", - "copy_response", - "copy_response_headers", - "error", - "file_server", + "rate_limit", "map", - "reverse_proxy", - "templates", - "acme_server", + "push", + "rewrite", + "cache", + "copy_response", + "encode", + "error", "vars", - "push" + "acme_server", + "authenticator", + "request_body", + "static_response" ] } } @@ -1114,16 +1594,16 @@ } } }, - "experimental_http3": { - "description": "experimental_http3: boolean\nModule: http\nEnable experimental HTTP/3 support. Note that HTTP/3 is not a\nfinished standard and has extremely limited client support.\nThis field is not subject to compatibility promises.\n", - "markdownDescription": "experimental_http3: `boolean` \nModule: `http` \nEnable experimental HTTP/3 support. Note that HTTP/3 is not a\nfinished standard and has extremely limited client support.\nThis field is not subject to compatibility promises. \n", - "type": "boolean" - }, "idle_timeout": { "description": "idle_timeout: number\nModule: http\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2#Duration\nIdleTimeout is the maximum time to wait for the next request\nwhen keep-alives are enabled. If zero, a default timeout of\n5m is applied to help avoid resource exhaustion.\n\n\nDuration can be an integer or a string. An integer is\ninterpreted as nanoseconds. If a string, it is a Go\ntime.Duration value such as `300ms`, `1.5h`, or `2h45m`;\nvalid units are `ns`, `us`/`µs`, `ms`, `s`, `m`, `h`, and `d`.\n", "markdownDescription": "idle_timeout: `number` \nModule: `http` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2#Duration) \nIdleTimeout is the maximum time to wait for the next request\nwhen keep-alives are enabled. If zero, a default timeout of\n5m is applied to help avoid resource exhaustion.\n\n\nDuration can be an integer or a string. An integer is\ninterpreted as nanoseconds. If a string, it is a Go\ntime.Duration value such as `300ms`, `1.5h`, or `2h45m`;\nvalid units are `ns`, `us`/`µs`, `ms`, `s`, `m`, `h`, and `d`. \n", "type": "number" }, + "keepalive_interval": { + "description": "keepalive_interval: number\nModule: http\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2#Duration\nKeepAliveInterval is the interval at which TCP keepalive packets\nare sent to keep the connection alive at the TCP layer when no other\ndata is being transmitted. The default is 15s.\n\n\nDuration can be an integer or a string. An integer is\ninterpreted as nanoseconds. If a string, it is a Go\ntime.Duration value such as `300ms`, `1.5h`, or `2h45m`;\nvalid units are `ns`, `us`/`µs`, `ms`, `s`, `m`, `h`, and `d`.\n", + "markdownDescription": "keepalive_interval: `number` \nModule: `http` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2#Duration) \nKeepAliveInterval is the interval at which TCP keepalive packets\nare sent to keep the connection alive at the TCP layer when no other\ndata is being transmitted. The default is 15s.\n\n\nDuration can be an integer or a string. An integer is\ninterpreted as nanoseconds. If a string, it is a Go\ntime.Duration value such as `300ms`, `1.5h`, or `2h45m`;\nvalid units are `ns`, `us`/`µs`, `ms`, `s`, `m`, `h`, and `d`. \n", + "type": "number" + }, "listen": { "description": "listen: array\nModule: http\nSocket addresses to which to bind listeners. Accepts\n[network addresses](/docs/conventions#network-addresses)\nthat may include port ranges. Listener addresses must\nbe unique; they cannot be repeated across all defined\nservers.\n", "markdownDescription": "listen: `array` \nModule: `http` \nSocket addresses to which to bind listeners. Accepts\n[network addresses](/docs/conventions#network-addresses)\nthat may include port ranges. Listener addresses must\nbe unique; they cannot be repeated across all defined\nservers. \n", @@ -1231,6 +1711,21 @@ "markdownDescription": "max_header_bytes: `number` \nModule: `http` \nMaxHeaderBytes is the maximum size to parse from a client's\nHTTP request headers. \n", "type": "number" }, + "metrics": { + "description": "metrics: object\nModule: http\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp#Metrics\nIf set, metrics observations will be enabled.\nThis setting is EXPERIMENTAL and subject to change.\n\n\nMetrics configures metrics observations.\nEXPERIMENTAL and subject to change or removal.\n", + "markdownDescription": "metrics: `object` \nModule: `http` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp#Metrics) \nIf set, metrics observations will be enabled.\nThis setting is EXPERIMENTAL and subject to change.\n\n\nMetrics configures metrics observations.\nEXPERIMENTAL and subject to change or removal. \n", + "type": "object" + }, + "protocols": { + "description": "protocols: array\nModule: http\nProtocols specifies which HTTP protocols to enable.\nSupported values are:\n\n- `h1` (HTTP/1.1)\n- `h2` (HTTP/2)\n- `h2c` (cleartext HTTP/2)\n- `h3` (HTTP/3)\n\nIf enabling `h2` or `h2c`, `h1` must also be enabled;\nthis is due to current limitations in the Go standard\nlibrary.\n\nHTTP/2 operates only over TLS (HTTPS). HTTP/3 opens\na UDP socket to serve QUIC connections.\n\nH2C operates over plain TCP if the client supports it;\nhowever, because this is not implemented by the Go\nstandard library, other server options are not compatible\nand will not be applied to H2C requests. Do not enable this\nonly to achieve maximum client compatibility. In practice,\nvery few clients implement H2C, and even fewer require it.\nEnabling H2C can be useful for serving/proxying gRPC\nif encryption is not possible or desired.\n\nWe recommend for most users to simply let Caddy use the\ndefault settings.\n\nDefault: `[h1 h2 h3]`\n", + "markdownDescription": "protocols: `array` \nModule: `http` \nProtocols specifies which HTTP protocols to enable.\nSupported values are:\n\n- `h1` (HTTP/1.1)\n- `h2` (HTTP/2)\n- `h2c` (cleartext HTTP/2)\n- `h3` (HTTP/3)\n\nIf enabling `h2` or `h2c`, `h1` must also be enabled;\nthis is due to current limitations in the Go standard\nlibrary.\n\nHTTP/2 operates only over TLS (HTTPS). HTTP/3 opens\na UDP socket to serve QUIC connections.\n\nH2C operates over plain TCP if the client supports it;\nhowever, because this is not implemented by the Go\nstandard library, other server options are not compatible\nand will not be applied to H2C requests. Do not enable this\nonly to achieve maximum client compatibility. In practice,\nvery few clients implement H2C, and even fewer require it.\nEnabling H2C can be useful for serving/proxying gRPC\nif encryption is not possible or desired.\n\nWe recommend for most users to simply let Caddy use the\ndefault settings.\n\nDefault: `[h1 h2 h3]` \n", + "type": "array", + "items": { + "description": "Protocols specifies which HTTP protocols to enable.\nSupported values are:\n\n- `h1` (HTTP/1.1)\n- `h2` (HTTP/2)\n- `h2c` (cleartext HTTP/2)\n- `h3` (HTTP/3)\n\nIf enabling `h2` or `h2c`, `h1` must also be enabled;\nthis is due to current limitations in the Go standard\nlibrary.\n\nHTTP/2 operates only over TLS (HTTPS). HTTP/3 opens\na UDP socket to serve QUIC connections.\n\nH2C operates over plain TCP if the client supports it;\nhowever, because this is not implemented by the Go\nstandard library, other server options are not compatible\nand will not be applied to H2C requests. Do not enable this\nonly to achieve maximum client compatibility. In practice,\nvery few clients implement H2C, and even fewer require it.\nEnabling H2C can be useful for serving/proxying gRPC\nif encryption is not possible or desired.\n\nWe recommend for most users to simply let Caddy use the\ndefault settings.\n\nDefault: `[h1 h2 h3]`\n", + "markdownDescription": "Protocols specifies which HTTP protocols to enable.\nSupported values are:\n\n- `h1` (HTTP/1.1)\n- `h2` (HTTP/2)\n- `h2c` (cleartext HTTP/2)\n- `h3` (HTTP/3)\n\nIf enabling `h2` or `h2c`, `h1` must also be enabled;\nthis is due to current limitations in the Go standard\nlibrary.\n\nHTTP/2 operates only over TLS (HTTPS). HTTP/3 opens\na UDP socket to serve QUIC connections.\n\nH2C operates over plain TCP if the client supports it;\nhowever, because this is not implemented by the Go\nstandard library, other server options are not compatible\nand will not be applied to H2C requests. Do not enable this\nonly to achieve maximum client compatibility. In practice,\nvery few clients implement H2C, and even fewer require it.\nEnabling H2C can be useful for serving/proxying gRPC\nif encryption is not possible or desired.\n\nWe recommend for most users to simply let Caddy use the\ndefault settings.\n\nDefault: `[h1 h2 h3]` \n", + "type": "string" + } + }, "read_header_timeout": { "description": "read_header_timeout: number\nModule: http\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2#Duration\nReadHeaderTimeout is like ReadTimeout but for request headers.\n\n\nDuration can be an integer or a string. An integer is\ninterpreted as nanoseconds. If a string, it is a Go\ntime.Duration value such as `300ms`, `1.5h`, or `2h45m`;\nvalid units are `ns`, `us`/`µs`, `ms`, `s`, `m`, `h`, and `d`.\n", "markdownDescription": "read_header_timeout: `number` \nModule: `http` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2#Duration) \nReadHeaderTimeout is like ReadTimeout but for request headers.\n\n\nDuration can be an integer or a string. An integer is\ninterpreted as nanoseconds. If a string, it is a Go\ntime.Duration value such as `300ms`, `1.5h`, or `2h45m`;\nvalid units are `ns`, `us`/`µs`, `ms`, `s`, `m`, `h`, and `d`. \n", @@ -1266,6 +1761,18 @@ "handler" ], "allOf": [ + { + "if": { + "properties": { + "handler": { + "const": "copy_response" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.copy_response" + } + }, { "if": { "properties": { @@ -1282,36 +1789,36 @@ "if": { "properties": { "handler": { - "const": "headers" + "const": "error" } } }, "then": { - "$ref": "#/definitions/http.handlers.headers" + "$ref": "#/definitions/http.handlers.error" } }, { "if": { "properties": { "handler": { - "const": "metrics" + "const": "map" } } }, "then": { - "$ref": "#/definitions/http.handlers.metrics" + "$ref": "#/definitions/http.handlers.map" } }, { "if": { "properties": { "handler": { - "const": "request_body" + "const": "push" } } }, "then": { - "$ref": "#/definitions/http.handlers.request_body" + "$ref": "#/definitions/http.handlers.push" } }, { @@ -1326,6 +1833,126 @@ "$ref": "#/definitions/http.handlers.rewrite" } }, + { + "if": { + "properties": { + "handler": { + "const": "cache" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.cache" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "authenticator" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.authenticator" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "request_body" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.request_body" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "static_response" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.static_response" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "vars" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.vars" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "acme_server" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.acme_server" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "copy_response_headers" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.copy_response_headers" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "file_server" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.file_server" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "headers" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.headers" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "reverse_proxy" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.reverse_proxy" + } + }, { "if": { "properties": { @@ -1338,6 +1965,18 @@ "$ref": "#/definitions/http.handlers.subroute" } }, + { + "if": { + "properties": { + "handler": { + "const": "templates" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.templates" + } + }, { "if": { "properties": { @@ -1366,132 +2005,24 @@ "if": { "properties": { "handler": { - "const": "static_response" + "const": "rate_limit" } } }, "then": { - "$ref": "#/definitions/http.handlers.static_response" + "$ref": "#/definitions/http.handlers.rate_limit" } }, { "if": { "properties": { "handler": { - "const": "acme_server" + "const": "metrics" } } }, "then": { - "$ref": "#/definitions/http.handlers.acme_server" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "copy_response" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.copy_response" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "copy_response_headers" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.copy_response_headers" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "error" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.error" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "file_server" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.file_server" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "map" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.map" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "reverse_proxy" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.reverse_proxy" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "templates" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.templates" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "push" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.push" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "vars" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.vars" + "$ref": "#/definitions/http.handlers.metrics" } }, { @@ -1501,25 +2032,28 @@ "markdownDescription": "key to identify `handle` module. \nhandler: `string` \nModule: `http.handlers`", "type": "string", "enum": [ + "copy_response", "encode", - "headers", - "metrics", - "request_body", + "error", + "map", + "push", "rewrite", + "cache", + "authenticator", + "request_body", + "static_response", + "vars", + "acme_server", + "copy_response_headers", + "file_server", + "headers", + "reverse_proxy", "subroute", + "templates", "tracing", "authentication", - "static_response", - "acme_server", - "copy_response", - "copy_response_headers", - "error", - "file_server", - "map", - "reverse_proxy", - "templates", - "push", - "vars" + "rate_limit", + "metrics" ] } } @@ -1705,20 +2239,22 @@ } }, "trusted_leaf_certs": { - "description": "trusted_leaf_certs: array\nModule: http\nA list of base64 DER-encoded client leaf certs\nto accept. If this list is not empty, client certs\nwhich are not in this list will be rejected.\n", - "markdownDescription": "trusted_leaf_certs: `array` \nModule: `http` \nA list of base64 DER-encoded client leaf certs\nto accept. If this list is not empty, client certs\nwhich are not in this list will be rejected. \n", + "description": "trusted_leaf_certs: array\nModule: http\nDEPRECATED: This field is deprecated and will be removed in\na future version. Please use the `validators` field instead\nwith the tls.client_auth.leaf module instead.\n\nA list of base64 DER-encoded client leaf certs\nto accept. If this list is not empty, client certs\nwhich are not in this list will be rejected.\n", + "markdownDescription": "trusted_leaf_certs: `array` \nModule: `http` \nDEPRECATED: This field is deprecated and will be removed in\na future version. Please use the `validators` field instead\nwith the tls.client_auth.leaf module instead.\n\nA list of base64 DER-encoded client leaf certs\nto accept. If this list is not empty, client certs\nwhich are not in this list will be rejected. \n", "type": "array", "items": { - "description": "A list of base64 DER-encoded client leaf certs\nto accept. If this list is not empty, client certs\nwhich are not in this list will be rejected.\n", - "markdownDescription": "A list of base64 DER-encoded client leaf certs\nto accept. If this list is not empty, client certs\nwhich are not in this list will be rejected. \n", + "description": "DEPRECATED: This field is deprecated and will be removed in\na future version. Please use the `validators` field instead\nwith the tls.client_auth.leaf module instead.\n\nA list of base64 DER-encoded client leaf certs\nto accept. If this list is not empty, client certs\nwhich are not in this list will be rejected.\n", + "markdownDescription": "DEPRECATED: This field is deprecated and will be removed in\na future version. Please use the `validators` field instead\nwith the tls.client_auth.leaf module instead.\n\nA list of base64 DER-encoded client leaf certs\nto accept. If this list is not empty, client certs\nwhich are not in this list will be rejected. \n", "type": "string" } }, "verifiers": { - "description": "verifiers: array\nModule: tls.client_auth", - "markdownDescription": "verifiers: `array` \nModule: `tls.client_auth`", + "description": "verifiers: array\nModule: tls.client_auth\nClient certificate verification modules. These can perform\ncustom client authentication checks, such as ensuring the\ncertificate is not revoked.\n", + "markdownDescription": "verifiers: `array` \nModule: `tls.client_auth` \nClient certificate verification modules. These can perform\ncustom client authentication checks, such as ensuring the\ncertificate is not revoked. \n", "type": "array", "items": { + "description": "Client certificate verification modules. These can perform\ncustom client authentication checks, such as ensuring the\ncertificate is not revoked.\n", + "markdownDescription": "Client certificate verification modules. These can perform\ncustom client authentication checks, such as ensuring the\ncertificate is not revoked. \n", "required": [ "verifier" ], @@ -1767,6 +2303,11 @@ "markdownDescription": "default_sni: `string` \nModule: `http` \nDefaultSNI becomes the ServerName in a ClientHello if there\nis no policy configured for the empty SNI value. \n", "type": "string" }, + "insecure_secrets_log": { + "description": "insecure_secrets_log: string\nModule: http\nAlso known as \"SSLKEYLOGFILE\", TLS secrets will be written to\nthis file in NSS key log format which can then be parsed by\nWireshark and other tools. This is INSECURE as it allows other\nprograms or tools to decrypt TLS connections. However, this\ncapability can be useful for debugging and troubleshooting.\n**ENABLING THIS LOG COMPROMISES SECURITY!**\n\nThis feature is EXPERIMENTAL and subject to change or removal.\n", + "markdownDescription": "insecure_secrets_log: `string` \nModule: `http` \nAlso known as \"SSLKEYLOGFILE\", TLS secrets will be written to\nthis file in NSS key log format which can then be parsed by\nWireshark and other tools. This is INSECURE as it allows other\nprograms or tools to decrypt TLS connections. However, this\ncapability can be useful for debugging and troubleshooting.\n**ENABLING THIS LOG COMPROMISES SECURITY!**\n\nThis feature is EXPERIMENTAL and subject to change or removal. \n", + "type": "string" + }, "match": { "description": "match: object\nModule: tls.handshake_match\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2#ModuleMap\nHow to match this policy with a TLS ClientHello. If\nthis policy is the first to match, it will be used.\n\n\nModuleMap is a map that can contain multiple modules,\nwhere the map key is the module's name. (The namespace\nis usually read from an associated field's struct tag.)\nBecause the module's name is given as the key in a\nmodule map, the name does not have to be given in the\njson.RawMessage.\n", "markdownDescription": "match: `object` \nModule: `tls.handshake_match` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2#ModuleMap) \nHow to match this policy with a TLS ClientHello. If\nthis policy is the first to match, it will be used.\n\n\nModuleMap is a map that can contain multiple modules,\nwhere the map key is the module's name. (The namespace\nis usually read from an associated field's struct tag.)\nBecause the module's name is given as the key in a\nmodule map, the name does not have to be given in the\njson.RawMessage. \n", @@ -1803,6 +2344,11 @@ } } } + }, + "shutdown_delay": { + "description": "shutdown_delay: number\nModule: http\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2#Duration\nShutdownDelay is how long to wait before initiating the grace\nperiod. When this app is stopping (e.g. during a config reload or\nprocess exit), all servers will be shut down. Normally this immediately\ninitiates the grace period. However, if this delay is configured, servers\nwill not be shut down until the delay is over. During this time, servers\ncontinue to function normally and allow new connections. At the end, the\ngrace period will begin. This can be useful to allow downstream load\nbalancers time to move this instance out of the rotation without hiccups.\n\nWhen shutdown has been scheduled, placeholders {http.shutting_down} (bool)\nand {http.time_until_shutdown} (duration) may be useful for health checks.\n\n\nDuration can be an integer or a string. An integer is\ninterpreted as nanoseconds. If a string, it is a Go\ntime.Duration value such as `300ms`, `1.5h`, or `2h45m`;\nvalid units are `ns`, `us`/`µs`, `ms`, `s`, `m`, `h`, and `d`.\n", + "markdownDescription": "shutdown_delay: `number` \nModule: `http` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2#Duration) \nShutdownDelay is how long to wait before initiating the grace\nperiod. When this app is stopping (e.g. during a config reload or\nprocess exit), all servers will be shut down. Normally this immediately\ninitiates the grace period. However, if this delay is configured, servers\nwill not be shut down until the delay is over. During this time, servers\ncontinue to function normally and allow new connections. At the end, the\ngrace period will begin. This can be useful to allow downstream load\nbalancers time to move this instance out of the rotation without hiccups.\n\nWhen shutdown has been scheduled, placeholders {http.shutting_down} (bool)\nand {http.time_until_shutdown} (duration) may be useful for health checks.\n\n\nDuration can be an integer or a string. An integer is\ninterpreted as nanoseconds. If a string, it is a Go\ntime.Duration value such as `300ms`, `1.5h`, or `2h45m`;\nvalid units are `ns`, `us`/`µs`, `ms`, `s`, `m`, `h`, and `d`. \n", + "type": "number" } } }, @@ -1838,6 +2384,23 @@ } } }, + "http.authentication.providers.authorizer": { + "description": "authorizer: object\nModule: http.authentication.providers.authorizer\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#AuthzMiddleware", + "markdownDescription": "authorizer: `object` \nModule: `http.authentication.providers.authorizer` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#AuthzMiddleware)", + "type": "object", + "properties": { + "gatekeeper_name": { + "description": "gatekeeper_name: string\nModule: http.authentication.providers.authorizer\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#AuthzMiddleware", + "markdownDescription": "gatekeeper_name: `string` \nModule: `http.authentication.providers.authorizer` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#AuthzMiddleware)", + "type": "string" + }, + "route_matcher": { + "description": "route_matcher: string\nModule: http.authentication.providers.authorizer\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#AuthzMiddleware", + "markdownDescription": "route_matcher: `string` \nModule: `http.authentication.providers.authorizer` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#AuthzMiddleware)", + "type": "string" + } + } + }, "http.authentication.providers.http_basic": { "description": "http_basic: object\nModule: http.authentication.providers.http_basic\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/caddyauth#HTTPBasicAuth", "markdownDescription": "http_basic: `object` \nModule: `http.authentication.providers.http_basic` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/caddyauth#HTTPBasicAuth)", @@ -1981,6 +2544,9 @@ "markdownDescription": "providers: `object` \nModule: `http.authentication.providers` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2#ModuleMap) \nA set of authentication providers. If none are specified,\nall requests will always be unauthenticated.\n\n\nModuleMap is a map that can contain multiple modules,\nwhere the map key is the module's name. (The namespace\nis usually read from an associated field's struct tag.)\nBecause the module's name is given as the key in a\nmodule map, the name does not have to be given in the\njson.RawMessage. \n", "type": "object", "properties": { + "authorizer": { + "$ref": "#/definitions/http.authentication.providers.authorizer" + }, "http_basic": { "$ref": "#/definitions/http.authentication.providers.http_basic" } @@ -1988,6 +2554,259 @@ } } }, + "http.handlers.authenticator": { + "description": "authenticator: object\nModule: http.handlers.authenticator\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#AuthnMiddleware\nAuthnMiddleware implements Form-Based, Basic, Local, LDAP,\nOpenID Connect, OAuth 2.0, SAML Authentication.\n\n", + "markdownDescription": "authenticator: `object` \nModule: `http.handlers.authenticator` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#AuthnMiddleware) \nAuthnMiddleware implements Form-Based, Basic, Local, LDAP,\nOpenID Connect, OAuth 2.0, SAML Authentication.\n \n", + "type": "object", + "properties": { + "portal_name": { + "description": "portal_name: string\nModule: http.handlers.authenticator\n", + "markdownDescription": "portal_name: `string` \nModule: `http.handlers.authenticator` \n", + "type": "string" + }, + "route_matcher": { + "description": "route_matcher: string\nModule: http.handlers.authenticator\n", + "markdownDescription": "route_matcher: `string` \nModule: `http.handlers.authenticator` \n", + "type": "string" + } + } + }, + "http.handlers.cache": { + "description": "cache: object\nModule: http.handlers.cache\nhttps://pkg.go.dev/github.com/caddyserver/cache-handler#SouinCaddyPlugin\nSouinCaddyPlugin declaration.\n\n", + "markdownDescription": "cache: `object` \nModule: `http.handlers.cache` \n[godoc](https://pkg.go.dev/github.com/caddyserver/cache-handler#SouinCaddyPlugin) \nSouinCaddyPlugin declaration.\n \n", + "type": "object", + "properties": { + "allowed_http_verbs": { + "description": "allowed_http_verbs: array\nModule: http.handlers.cache\n", + "markdownDescription": "allowed_http_verbs: `array` \nModule: `http.handlers.cache` \n", + "type": "array", + "items": { + "type": "string" + } + }, + "badger": { + "description": "badger: object\nModule: http.handlers.cache\nhttps://pkg.go.dev/github.com/darkweak/souin/configurationtypes#CacheProvider\nCacheProvider config\n\n", + "markdownDescription": "badger: `object` \nModule: `http.handlers.cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/configurationtypes#CacheProvider) \nCacheProvider config\n \n", + "type": "object", + "properties": { + "configuration": { + "type": [ + "string", + "null" + ], + "description": "configuration: string\nModule: http.handlers.cache\n", + "markdownDescription": "configuration: `string` \nModule: `http.handlers.cache` \n" + }, + "path": { + "description": "path: string\nModule: http.handlers.cache\n", + "markdownDescription": "path: `string` \nModule: `http.handlers.cache` \n", + "type": "string" + }, + "url": { + "description": "url: string\nModule: http.handlers.cache\n", + "markdownDescription": "url: `string` \nModule: `http.handlers.cache` \n", + "type": "string" + } + } + }, + "cache_keys": { + "description": "cache_keys: object\nModule: http.handlers.cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin", + "markdownDescription": "cache_keys: `object` \nModule: `http.handlers.cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin)", + "type": "object", + "additionalProperties": { + "properties": { + "disable_body": { + "description": "disable_body: boolean\nModule: http.handlers.cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin", + "markdownDescription": "disable_body: `boolean` \nModule: `http.handlers.cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin)", + "type": "boolean" + }, + "disable_host": { + "description": "disable_host: boolean\nModule: http.handlers.cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin", + "markdownDescription": "disable_host: `boolean` \nModule: `http.handlers.cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin)", + "type": "boolean" + }, + "disable_method": { + "description": "disable_method: boolean\nModule: http.handlers.cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin", + "markdownDescription": "disable_method: `boolean` \nModule: `http.handlers.cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin)", + "type": "boolean" + } + } + } + }, + "cache_name": { + "description": "cache_name: string\nModule: http.handlers.cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin", + "markdownDescription": "cache_name: `string` \nModule: `http.handlers.cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin)", + "type": "string" + }, + "default_cache_control": { + "description": "default_cache_control: string\nModule: http.handlers.cache\n", + "markdownDescription": "default_cache_control: `string` \nModule: `http.handlers.cache` \n", + "type": "string" + }, + "etcd": { + "description": "etcd: object\nModule: http.handlers.cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin", + "markdownDescription": "etcd: `object` \nModule: `http.handlers.cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin)", + "type": "object", + "properties": { + "configuration": { + "type": [ + "string", + "null" + ], + "description": "configuration: string\nModule: http.handlers.cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin", + "markdownDescription": "configuration: `string` \nModule: `http.handlers.cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin)" + }, + "path": { + "description": "path: string\nModule: http.handlers.cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin", + "markdownDescription": "path: `string` \nModule: `http.handlers.cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin)", + "type": "string" + }, + "url": { + "description": "url: string\nModule: http.handlers.cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin", + "markdownDescription": "url: `string` \nModule: `http.handlers.cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin)", + "type": "string" + } + } + }, + "headers": { + "description": "headers: array\nModule: http.handlers.cache\n", + "markdownDescription": "headers: `array` \nModule: `http.handlers.cache` \n", + "type": "array", + "items": { + "type": "string" + } + }, + "key": { + "description": "key: object\nModule: http.handlers.cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin", + "markdownDescription": "key: `object` \nModule: `http.handlers.cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin)", + "type": "object", + "properties": { + "disable_body": { + "description": "disable_body: boolean\nModule: http.handlers.cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin", + "markdownDescription": "disable_body: `boolean` \nModule: `http.handlers.cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin)", + "type": "boolean" + }, + "disable_host": { + "description": "disable_host: boolean\nModule: http.handlers.cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin", + "markdownDescription": "disable_host: `boolean` \nModule: `http.handlers.cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin)", + "type": "boolean" + }, + "disable_method": { + "description": "disable_method: boolean\nModule: http.handlers.cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin", + "markdownDescription": "disable_method: `boolean` \nModule: `http.handlers.cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin)", + "type": "boolean" + } + } + }, + "log_level": { + "description": "log_level: string\nModule: http.handlers.cache\n", + "markdownDescription": "log_level: `string` \nModule: `http.handlers.cache` \n", + "type": "string" + }, + "nuts": { + "description": "nuts: object\nModule: http.handlers.cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin", + "markdownDescription": "nuts: `object` \nModule: `http.handlers.cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin)", + "type": "object", + "properties": { + "configuration": { + "type": [ + "string", + "null" + ], + "description": "configuration: string\nModule: http.handlers.cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin", + "markdownDescription": "configuration: `string` \nModule: `http.handlers.cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin)" + }, + "path": { + "description": "path: string\nModule: http.handlers.cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin", + "markdownDescription": "path: `string` \nModule: `http.handlers.cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin)", + "type": "string" + }, + "url": { + "description": "url: string\nModule: http.handlers.cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin", + "markdownDescription": "url: `string` \nModule: `http.handlers.cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin)", + "type": "string" + } + } + }, + "olric": { + "description": "olric: object\nModule: http.handlers.cache\nhttps://pkg.go.dev/github.com/darkweak/souin/configurationtypes#CacheProvider\nCacheProvider config\n\n", + "markdownDescription": "olric: `object` \nModule: `http.handlers.cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/configurationtypes#CacheProvider) \nCacheProvider config\n \n", + "type": "object", + "properties": { + "configuration": { + "type": [ + "string", + "null" + ], + "description": "configuration: string\nModule: http.handlers.cache\n", + "markdownDescription": "configuration: `string` \nModule: `http.handlers.cache` \n" + }, + "path": { + "description": "path: string\nModule: http.handlers.cache\n", + "markdownDescription": "path: `string` \nModule: `http.handlers.cache` \n", + "type": "string" + }, + "url": { + "description": "url: string\nModule: http.handlers.cache\n", + "markdownDescription": "url: `string` \nModule: `http.handlers.cache` \n", + "type": "string" + } + } + }, + "redis": { + "description": "redis: object\nModule: http.handlers.cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin", + "markdownDescription": "redis: `object` \nModule: `http.handlers.cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin)", + "type": "object", + "properties": { + "configuration": { + "type": [ + "string", + "null" + ], + "description": "configuration: string\nModule: http.handlers.cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin", + "markdownDescription": "configuration: `string` \nModule: `http.handlers.cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin)" + }, + "path": { + "description": "path: string\nModule: http.handlers.cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin", + "markdownDescription": "path: `string` \nModule: `http.handlers.cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin)", + "type": "string" + }, + "url": { + "description": "url: string\nModule: http.handlers.cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin", + "markdownDescription": "url: `string` \nModule: `http.handlers.cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin)", + "type": "string" + } + } + }, + "stale": { + "description": "stale: object\nModule: http.handlers.cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin", + "markdownDescription": "stale: `object` \nModule: `http.handlers.cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin)", + "type": "object" + }, + "timeout": { + "description": "timeout: object\nModule: http.handlers.cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin", + "markdownDescription": "timeout: `object` \nModule: `http.handlers.cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin)", + "type": "object", + "properties": { + "backend": { + "description": "backend: object\nModule: http.handlers.cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin", + "markdownDescription": "backend: `object` \nModule: `http.handlers.cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin)", + "type": "object" + }, + "cache": { + "description": "cache: object\nModule: http.handlers.cache\nhttps://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin", + "markdownDescription": "cache: `object` \nModule: `http.handlers.cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/plugins/caddy#SouinCaddyPlugin)", + "type": "object" + } + } + }, + "ttl": { + "description": "ttl: object\nModule: http.handlers.cache\nhttps://pkg.go.dev/github.com/darkweak/souin/configurationtypes#Duration\nDuration is the super object to wrap the duration and be able to parse it from the configuration\n\n", + "markdownDescription": "ttl: `object` \nModule: `http.handlers.cache` \n[godoc](https://pkg.go.dev/github.com/darkweak/souin/configurationtypes#Duration) \nDuration is the super object to wrap the duration and be able to parse it from the configuration\n \n", + "type": "object" + } + } + }, "http.handlers.copy_response": { "description": "copy_response: object\nModule: http.handlers.copy_response\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/reverseproxy#CopyResponseHandler\nCopyResponseHandler is a special HTTP handler which may\nonly be used within reverse_proxy's handle_response routes,\nto copy the proxy response. EXPERIMENTAL, subject to change.\n\n", "markdownDescription": "copy_response: `object` \nModule: `http.handlers.copy_response` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/reverseproxy#CopyResponseHandler) \nCopyResponseHandler is a special HTTP handler which may\nonly be used within reverse_proxy's handle_response routes,\nto copy the proxy response. EXPERIMENTAL, subject to change.\n \n", @@ -2110,8 +2929,8 @@ } }, "http.handlers.file_server": { - "description": "file_server: object\nModule: http.handlers.file_server\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/fileserver#FileServer\nFileServer implements a static file server responder for Caddy.\n\n", - "markdownDescription": "file_server: `object` \nModule: `http.handlers.file_server` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/fileserver#FileServer) \nFileServer implements a static file server responder for Caddy.\n \n", + "description": "file_server: object\nModule: http.handlers.file_server\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/fileserver#FileServer\nFileServer implements a handler that serves static files.\n\nThe path of the file to serve is constructed by joining the site root\nand the sanitized request path. Any and all files within the root and\nlinks with targets outside the site root may therefore be accessed.\nFor example, with a site root of `/www`, requests to `/foo/bar.txt`\nwill serve the file at `/www/foo/bar.txt`.\n\nThe request path is sanitized using the Go standard library's\npath.Clean() function (https://pkg.go.dev/path#Clean) before being\njoined to the root. Request paths must be valid and well-formed.\n\nFor requests that access directories instead of regular files,\nCaddy will attempt to serve an index file if present. For example,\na request to `/dir/` will attempt to serve `/dir/index.html` if\nit exists. The index file names to try are configurable. If a\nrequested directory does not have an index file, Caddy writes a\n404 response. Alternatively, file browsing can be enabled with\nthe \"browse\" parameter which shows a list of files when directories\nare requested if no index file is present.\n\nBy default, this handler will canonicalize URIs so that requests to\ndirectories end with a slash, but requests to regular files do not.\nThis is enforced with HTTP redirects automatically and can be disabled.\nCanonicalization redirects are not issued, however, if a URI rewrite\nmodified the last component of the path (the filename).\n\nThis handler sets the Etag and Last-Modified headers for static files.\nIt does not perform MIME sniffing to determine Content-Type based on\ncontents, but does use the extension (if known); see the Go docs for\ndetails: https://pkg.go.dev/mime#TypeByExtension\n\nThe file server properly handles requests with If-Match,\nIf-Unmodified-Since, If-Modified-Since, If-None-Match, Range, and\nIf-Range headers. It includes the file's modification time in the\nLast-Modified header of the response.\n\n", + "markdownDescription": "file_server: `object` \nModule: `http.handlers.file_server` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/fileserver#FileServer) \nFileServer implements a handler that serves static files.\n\nThe path of the file to serve is constructed by joining the site root\nand the sanitized request path. Any and all files within the root and\nlinks with targets outside the site root may therefore be accessed.\nFor example, with a site root of `/www`, requests to `/foo/bar.txt`\nwill serve the file at `/www/foo/bar.txt`.\n\nThe request path is sanitized using the Go standard library's\npath.Clean() function (https://pkg.go.dev/path#Clean) before being\njoined to the root. Request paths must be valid and well-formed.\n\nFor requests that access directories instead of regular files,\nCaddy will attempt to serve an index file if present. For example,\na request to `/dir/` will attempt to serve `/dir/index.html` if\nit exists. The index file names to try are configurable. If a\nrequested directory does not have an index file, Caddy writes a\n404 response. Alternatively, file browsing can be enabled with\nthe \"browse\" parameter which shows a list of files when directories\nare requested if no index file is present.\n\nBy default, this handler will canonicalize URIs so that requests to\ndirectories end with a slash, but requests to regular files do not.\nThis is enforced with HTTP redirects automatically and can be disabled.\nCanonicalization redirects are not issued, however, if a URI rewrite\nmodified the last component of the path (the filename).\n\nThis handler sets the Etag and Last-Modified headers for static files.\nIt does not perform MIME sniffing to determine Content-Type based on\ncontents, but does use the extension (if known); see the Go docs for\ndetails: https://pkg.go.dev/mime#TypeByExtension\n\nThe file server properly handles requests with If-Match,\nIf-Unmodified-Since, If-Modified-Since, If-None-Match, Range, and\nIf-Range headers. It includes the file's modification time in the\nLast-Modified header of the response.\n \n", "type": "object", "properties": { "browse": { @@ -2131,6 +2950,10 @@ "markdownDescription": "canonical_uris: `boolean` \nModule: `http.handlers.file_server` \nUse redirects to enforce trailing slashes for directories, or to\nremove trailing slash from URIs for files. Default is true.\n\nCanonicalization will not happen if the last element of the request's\npath (the filename) is changed in an internal rewrite, to avoid\nclobbering the explicit rewrite with implicit behavior. \n", "type": "boolean" }, + "file_system": { + "description": "file_system: any\nModule: caddy.fs\nThe file system implementation to use. By default, Caddy uses the local\ndisk file system.\n\nFile system modules used here must adhere to the following requirements:\n- Implement fs.FS interface.\n- Support seeking on opened files; i.e.returned fs.File values must\n implement the io.Seeker interface. This is required for determining\n Content-Length and satisfying Range requests.\n- fs.File values that represent directories must implement the\n fs.ReadDirFile interface so that directory listings can be procured.\n", + "markdownDescription": "file_system: `any` \nModule: `caddy.fs` \nThe file system implementation to use. By default, Caddy uses the local\ndisk file system.\n\nFile system modules used here must adhere to the following requirements:\n- Implement fs.FS interface.\n- Support seeking on opened files; i.e.returned fs.File values must\n implement the io.Seeker interface. This is required for determining\n Content-Length and satisfying Range requests.\n- fs.File values that represent directories must implement the\n fs.ReadDirFile interface so that directory listings can be procured. \n" + }, "hide": { "description": "hide: array\nModule: http.handlers.file_server\nA list of files or folders to hide; the file server will pretend as if\nthey don't exist. Accepts globular patterns like `*.ext` or `/foo/*/bar`\nas well as placeholders. Because site roots can be dynamic, this list\nuses file system paths, not request paths. To clarify, the base of\nrelative paths is the current working directory, NOT the site root.\n\nEntries without a path separator (`/` or `\\` depending on OS) will match\nany file or directory of that name regardless of its path. To hide only a\nspecific file with a name that may not be unique, always use a path\nseparator. For example, to hide all files or folder trees named \"hidden\",\nput \"hidden\" in the list. To hide only ./hidden, put \"./hidden\" in the list.\n\nWhen possible, all paths are resolved to their absolute form before\ncomparisons are made. For maximum clarity and explictness, use complete,\nabsolute paths; or, for greater portability, use relative paths instead.\n", "markdownDescription": "hide: `array` \nModule: `http.handlers.file_server` \nA list of files or folders to hide; the file server will pretend as if\nthey don't exist. Accepts globular patterns like `*.ext` or `/foo/*/bar`\nas well as placeholders. Because site roots can be dynamic, this list\nuses file system paths, not request paths. To clarify, the base of\nrelative paths is the current working directory, NOT the site root.\n\nEntries without a path separator (`/` or `\\` depending on OS) will match\nany file or directory of that name regardless of its path. To hide only a\nspecific file with a name that may not be unique, always use a path\nseparator. For example, to hide all files or folder trees named \"hidden\",\nput \"hidden\" in the list. To hide only ./hidden, put \"./hidden\" in the list.\n\nWhen possible, all paths are resolved to their absolute form before\ncomparisons are made. For maximum clarity and explictness, use complete,\nabsolute paths; or, for greater portability, use relative paths instead. \n", @@ -2142,12 +2965,12 @@ } }, "index_names": { - "description": "index_names: array\nModule: http.handlers.file_server\nThe names of files to try as index files if a folder is requested.\n", - "markdownDescription": "index_names: `array` \nModule: `http.handlers.file_server` \nThe names of files to try as index files if a folder is requested. \n", + "description": "index_names: array\nModule: http.handlers.file_server\nThe names of files to try as index files if a folder is requested.\nDefault: index.html, index.txt.\n", + "markdownDescription": "index_names: `array` \nModule: `http.handlers.file_server` \nThe names of files to try as index files if a folder is requested.\nDefault: index.html, index.txt. \n", "type": "array", "items": { - "description": "The names of files to try as index files if a folder is requested.\n", - "markdownDescription": "The names of files to try as index files if a folder is requested. \n", + "description": "The names of files to try as index files if a folder is requested.\nDefault: index.html, index.txt.\n", + "markdownDescription": "The names of files to try as index files if a folder is requested.\nDefault: index.html, index.txt. \n", "type": "string" } }, @@ -2183,8 +3006,8 @@ } }, "root": { - "description": "root: string\nModule: http.handlers.file_server\nThe path to the root of the site. Default is `{http.vars.root}` if set,\nor current working directory otherwise.\n", - "markdownDescription": "root: `string` \nModule: `http.handlers.file_server` \nThe path to the root of the site. Default is `{http.vars.root}` if set,\nor current working directory otherwise. \n", + "description": "root: string\nModule: http.handlers.file_server\nThe path to the root of the site. Default is `{http.vars.root}` if set,\nor current working directory otherwise. This should be a trusted value.\n\nNote that a site root is not a sandbox. Although the file server does\nsanitize the request URI to prevent directory traversal, files (including\nlinks) within the site root may be directly accessed based on the request\npath. Files and folders within the root should be secure and trustworthy.\n", + "markdownDescription": "root: `string` \nModule: `http.handlers.file_server` \nThe path to the root of the site. Default is `{http.vars.root}` if set,\nor current working directory otherwise. This should be a trusted value.\n\nNote that a site root is not a sandbox. Although the file server does\nsanitize the request URI to prevent directory traversal, files (including\nlinks) within the site root may be directly accessed based on the request\npath. Files and folders within the root should be secure and trustworthy. \n", "type": "string" }, "status_code": { @@ -2218,18 +3041,18 @@ } }, "delete": { - "description": "delete: array\nModule: http.handlers.headers\nNames of HTTP header fields to delete.\n", - "markdownDescription": "delete: `array` \nModule: `http.handlers.headers` \nNames of HTTP header fields to delete. \n", + "description": "delete: array\nModule: http.handlers.headers\nNames of HTTP header fields to delete. Basic wildcards are supported:\n\n- Start with `*` for all field names with the given suffix;\n- End with `*` for all field names with the given prefix;\n- Start and end with `*` for all field names containing a substring.\n", + "markdownDescription": "delete: `array` \nModule: `http.handlers.headers` \nNames of HTTP header fields to delete. Basic wildcards are supported:\n\n- Start with `*` for all field names with the given suffix;\n- End with `*` for all field names with the given prefix;\n- Start and end with `*` for all field names containing a substring. \n", "type": "array", "items": { - "description": "Names of HTTP header fields to delete.\n", - "markdownDescription": "Names of HTTP header fields to delete. \n", + "description": "Names of HTTP header fields to delete. Basic wildcards are supported:\n\n- Start with `*` for all field names with the given suffix;\n- End with `*` for all field names with the given prefix;\n- Start and end with `*` for all field names containing a substring.\n", + "markdownDescription": "Names of HTTP header fields to delete. Basic wildcards are supported:\n\n- Start with `*` for all field names with the given suffix;\n- End with `*` for all field names with the given prefix;\n- Start and end with `*` for all field names containing a substring. \n", "type": "string" } }, "replace": { - "description": "replace: object\nModule: http.handlers.headers\nPerforms substring replacements of HTTP headers in-situ.\n", - "markdownDescription": "replace: `object` \nModule: `http.handlers.headers` \nPerforms substring replacements of HTTP headers in-situ. \n", + "description": "replace: object\nModule: http.handlers.headers\nPerforms in-situ substring replacements of HTTP headers.\nKeys are the field names on which to perform the associated replacements.\nIf the field name is `*`, the replacements are performed on all header fields.\n", + "markdownDescription": "replace: `object` \nModule: `http.handlers.headers` \nPerforms in-situ substring replacements of HTTP headers.\nKeys are the field names on which to perform the associated replacements.\nIf the field name is `*`, the replacements are performed on all header fields. \n", "type": "object", "additionalProperties": { "description": "https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/headers#Replacement\nReplacement describes a string replacement,\neither a simple and fast substring search\nor a slower but more powerful regex search.\n\n", @@ -2298,18 +3121,18 @@ "type": "boolean" }, "delete": { - "description": "delete: array\nModule: http.handlers.headers\nNames of HTTP header fields to delete.\n", - "markdownDescription": "delete: `array` \nModule: `http.handlers.headers` \nNames of HTTP header fields to delete. \n", + "description": "delete: array\nModule: http.handlers.headers\nNames of HTTP header fields to delete. Basic wildcards are supported:\n\n- Start with `*` for all field names with the given suffix;\n- End with `*` for all field names with the given prefix;\n- Start and end with `*` for all field names containing a substring.\n", + "markdownDescription": "delete: `array` \nModule: `http.handlers.headers` \nNames of HTTP header fields to delete. Basic wildcards are supported:\n\n- Start with `*` for all field names with the given suffix;\n- End with `*` for all field names with the given prefix;\n- Start and end with `*` for all field names containing a substring. \n", "type": "array", "items": { - "description": "Names of HTTP header fields to delete.\n", - "markdownDescription": "Names of HTTP header fields to delete. \n", + "description": "Names of HTTP header fields to delete. Basic wildcards are supported:\n\n- Start with `*` for all field names with the given suffix;\n- End with `*` for all field names with the given prefix;\n- Start and end with `*` for all field names containing a substring.\n", + "markdownDescription": "Names of HTTP header fields to delete. Basic wildcards are supported:\n\n- Start with `*` for all field names with the given suffix;\n- End with `*` for all field names with the given prefix;\n- Start and end with `*` for all field names containing a substring. \n", "type": "string" } }, "replace": { - "description": "replace: object\nModule: http.handlers.headers\nPerforms substring replacements of HTTP headers in-situ.\n", - "markdownDescription": "replace: `object` \nModule: `http.handlers.headers` \nPerforms substring replacements of HTTP headers in-situ. \n", + "description": "replace: object\nModule: http.handlers.headers\nPerforms in-situ substring replacements of HTTP headers.\nKeys are the field names on which to perform the associated replacements.\nIf the field name is `*`, the replacements are performed on all header fields.\n", + "markdownDescription": "replace: `object` \nModule: `http.handlers.headers` \nPerforms in-situ substring replacements of HTTP headers.\nKeys are the field names on which to perform the associated replacements.\nIf the field name is `*`, the replacements are performed on all header fields. \n", "type": "object", "additionalProperties": { "description": "https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/headers#Replacement\nReplacement describes a string replacement,\neither a simple and fast substring search\nor a slower but more powerful regex search.\n\n", @@ -2466,13 +3289,13 @@ } }, "http.handlers.push": { - "description": "push: object\nModule: http.handlers.push\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/push#Handler\nHandler is a middleware for manipulating the request body.\n\n", - "markdownDescription": "push: `object` \nModule: `http.handlers.push` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/push#Handler) \nHandler is a middleware for manipulating the request body.\n \n", + "description": "push: object\nModule: http.handlers.push\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/push#Handler\nHandler is a middleware for HTTP/2 server push. Note that\nHTTP/2 server push has been deprecated by some clients and\nits use is discouraged unless you can accurately predict\nwhich resources actually need to be pushed to the client;\nit can be difficult to know what the client already has\ncached. Pushing unnecessary resources results in worse\nperformance. Consider using HTTP 103 Early Hints instead.\n\nThis handler supports pushing from Link headers; in other\nwords, if the eventual response has Link headers, this\nhandler will push the resources indicated by those headers,\neven without specifying any resources in its config.\n\n", + "markdownDescription": "push: `object` \nModule: `http.handlers.push` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/push#Handler) \nHandler is a middleware for HTTP/2 server push. Note that\nHTTP/2 server push has been deprecated by some clients and\nits use is discouraged unless you can accurately predict\nwhich resources actually need to be pushed to the client;\nit can be difficult to know what the client already has\ncached. Pushing unnecessary resources results in worse\nperformance. Consider using HTTP 103 Early Hints instead.\n\nThis handler supports pushing from Link headers; in other\nwords, if the eventual response has Link headers, this\nhandler will push the resources indicated by those headers,\neven without specifying any resources in its config.\n \n", "type": "object", "properties": { "headers": { - "description": "headers: object\nModule: http.handlers.push\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/push#HeaderConfig\nHeaderConfig configures headers for synthetic push requests.\n\n", - "markdownDescription": "headers: `object` \nModule: `http.handlers.push` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/push#HeaderConfig) \nHeaderConfig configures headers for synthetic push requests.\n \n", + "description": "headers: object\nModule: http.handlers.push\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/push#HeaderConfig\nHeaders to modify for the push requests.\n\n\nHeaderConfig configures headers for synthetic push requests.\n", + "markdownDescription": "headers: `object` \nModule: `http.handlers.push` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/push#HeaderConfig) \nHeaders to modify for the push requests.\n\n\nHeaderConfig configures headers for synthetic push requests. \n", "type": "object", "properties": { "add": { @@ -2489,18 +3312,18 @@ } }, "delete": { - "description": "delete: array\nModule: http.handlers.push\nNames of HTTP header fields to delete.\n", - "markdownDescription": "delete: `array` \nModule: `http.handlers.push` \nNames of HTTP header fields to delete. \n", + "description": "delete: array\nModule: http.handlers.push\nNames of HTTP header fields to delete. Basic wildcards are supported:\n\n- Start with `*` for all field names with the given suffix;\n- End with `*` for all field names with the given prefix;\n- Start and end with `*` for all field names containing a substring.\n", + "markdownDescription": "delete: `array` \nModule: `http.handlers.push` \nNames of HTTP header fields to delete. Basic wildcards are supported:\n\n- Start with `*` for all field names with the given suffix;\n- End with `*` for all field names with the given prefix;\n- Start and end with `*` for all field names containing a substring. \n", "type": "array", "items": { - "description": "Names of HTTP header fields to delete.\n", - "markdownDescription": "Names of HTTP header fields to delete. \n", + "description": "Names of HTTP header fields to delete. Basic wildcards are supported:\n\n- Start with `*` for all field names with the given suffix;\n- End with `*` for all field names with the given prefix;\n- Start and end with `*` for all field names containing a substring.\n", + "markdownDescription": "Names of HTTP header fields to delete. Basic wildcards are supported:\n\n- Start with `*` for all field names with the given suffix;\n- End with `*` for all field names with the given prefix;\n- Start and end with `*` for all field names containing a substring. \n", "type": "string" } }, "replace": { - "description": "replace: object\nModule: http.handlers.push\nPerforms substring replacements of HTTP headers in-situ.\n", - "markdownDescription": "replace: `object` \nModule: `http.handlers.push` \nPerforms substring replacements of HTTP headers in-situ. \n", + "description": "replace: object\nModule: http.handlers.push\nPerforms in-situ substring replacements of HTTP headers.\nKeys are the field names on which to perform the associated replacements.\nIf the field name is `*`, the replacements are performed on all header fields.\n", + "markdownDescription": "replace: `object` \nModule: `http.handlers.push` \nPerforms in-situ substring replacements of HTTP headers.\nKeys are the field names on which to perform the associated replacements.\nIf the field name is `*`, the replacements are performed on all header fields. \n", "type": "object", "additionalProperties": { "description": "https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/headers#Replacement\nReplacement describes a string replacement,\neither a simple and fast substring search\nor a slower but more powerful regex search.\n\n", @@ -2546,12 +3369,12 @@ } }, "resources": { - "description": "resources: array\nModule: http.handlers.push\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/push#Resource\nResource represents a request for a resource to push.\n\n", - "markdownDescription": "resources: `array` \nModule: `http.handlers.push` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/push#Resource) \nResource represents a request for a resource to push.\n \n", + "description": "resources: array\nModule: http.handlers.push\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/push#Resource\nThe resources to push.\n\n\nResource represents a request for a resource to push.\n", + "markdownDescription": "resources: `array` \nModule: `http.handlers.push` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/push#Resource) \nThe resources to push.\n\n\nResource represents a request for a resource to push. \n", "type": "array", "items": { - "description": "https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/push#Resource\nResource represents a request for a resource to push.\n\n", - "markdownDescription": "[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/push#Resource) \nResource represents a request for a resource to push.\n \n", + "description": "https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/push#Resource\nThe resources to push.\n\n\nResource represents a request for a resource to push.\n", + "markdownDescription": "[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/push#Resource) \nThe resources to push.\n\n\nResource represents a request for a resource to push. \n", "type": "object", "properties": { "method": { @@ -2569,6 +3392,162 @@ } } }, + "http.handlers.rate_limit": { + "description": "rate_limit: object\nModule: http.handlers.rate_limit\nhttps://pkg.go.dev/github.com/RussellLuo/caddy-ext/ratelimit#RateLimit\nRateLimit implements a handler for rate-limiting.\n\nIf a client exceeds the rate limit, an HTTP error with status `\u003creject_status\u003e` will\nbe returned. This error can be handled using the conventional error handlers.\nSee [handle_errors](https://caddyserver.com/docs/caddyfile/directives/handle_errors)\nfor how to set up error handlers.\n\n", + "markdownDescription": "rate_limit: `object` \nModule: `http.handlers.rate_limit` \n[godoc](https://pkg.go.dev/github.com/RussellLuo/caddy-ext/ratelimit#RateLimit) \nRateLimit implements a handler for rate-limiting.\n\nIf a client exceeds the rate limit, an HTTP error with status `\u003creject_status\u003e` will\nbe returned. This error can be handled using the conventional error handlers.\nSee [handle_errors](https://caddyserver.com/docs/caddyfile/directives/handle_errors)\nfor how to set up error handlers.\n \n", + "type": "object", + "properties": { + "distributed": { + "description": "distributed: object\nModule: http.handlers.rate_limit\nhttps://pkg.go.dev/github.com/mholt/caddy-ratelimit#Handler", + "markdownDescription": "distributed: `object` \nModule: `http.handlers.rate_limit` \n[godoc](https://pkg.go.dev/github.com/mholt/caddy-ratelimit#Handler)", + "type": "object", + "properties": { + "read_interval": { + "description": "read_interval: number\nModule: http.handlers.rate_limit\nhttps://pkg.go.dev/github.com/mholt/caddy-ratelimit#Handler", + "markdownDescription": "read_interval: `number` \nModule: `http.handlers.rate_limit` \n[godoc](https://pkg.go.dev/github.com/mholt/caddy-ratelimit#Handler)", + "type": "number" + }, + "write_interval": { + "description": "write_interval: number\nModule: http.handlers.rate_limit\nhttps://pkg.go.dev/github.com/mholt/caddy-ratelimit#Handler", + "markdownDescription": "write_interval: `number` \nModule: `http.handlers.rate_limit` \n[godoc](https://pkg.go.dev/github.com/mholt/caddy-ratelimit#Handler)", + "type": "number" + } + } + }, + "jitter": { + "description": "jitter: object\nModule: http.handlers.rate_limit\nhttps://pkg.go.dev/github.com/mholt/caddy-ratelimit#Handler", + "markdownDescription": "jitter: `object` \nModule: `http.handlers.rate_limit` \n[godoc](https://pkg.go.dev/github.com/mholt/caddy-ratelimit#Handler)", + "type": "object" + }, + "rate_limits": { + "description": "rate_limits: object\nModule: http.handlers.rate_limit\nhttps://pkg.go.dev/github.com/mholt/caddy-ratelimit#Handler", + "markdownDescription": "rate_limits: `object` \nModule: `http.handlers.rate_limit` \n[godoc](https://pkg.go.dev/github.com/mholt/caddy-ratelimit#Handler)", + "type": "object", + "additionalProperties": { + "properties": { + "key": { + "description": "key: string\nModule: http.handlers.rate_limit\nhttps://pkg.go.dev/github.com/mholt/caddy-ratelimit#Handler", + "markdownDescription": "key: `string` \nModule: `http.handlers.rate_limit` \n[godoc](https://pkg.go.dev/github.com/mholt/caddy-ratelimit#Handler)", + "type": "string" + }, + "match": { + "description": "match: array\nModule: http.matchers", + "markdownDescription": "match: `array` \nModule: `http.matchers`", + "type": "array", + "items": { + "properties": { + "expression": { + "$ref": "#/definitions/http.matchers.expression" + }, + "file": { + "$ref": "#/definitions/http.matchers.file" + }, + "header": { + "$ref": "#/definitions/http.matchers.header" + }, + "header_regexp": { + "$ref": "#/definitions/http.matchers.header_regexp" + }, + "host": { + "$ref": "#/definitions/http.matchers.host" + }, + "method": { + "$ref": "#/definitions/http.matchers.method" + }, + "not": { + "$ref": "#/definitions/http.matchers.not" + }, + "path": { + "$ref": "#/definitions/http.matchers.path" + }, + "path_regexp": { + "$ref": "#/definitions/http.matchers.path_regexp" + }, + "protocol": { + "$ref": "#/definitions/http.matchers.protocol" + }, + "query": { + "$ref": "#/definitions/http.matchers.query" + }, + "remote_ip": { + "$ref": "#/definitions/http.matchers.remote_ip" + }, + "vars": { + "$ref": "#/definitions/http.matchers.vars" + }, + "vars_regexp": { + "$ref": "#/definitions/http.matchers.vars_regexp" + } + } + } + }, + "max_events": { + "description": "max_events: number\nModule: http.handlers.rate_limit\nhttps://pkg.go.dev/github.com/mholt/caddy-ratelimit#Handler", + "markdownDescription": "max_events: `number` \nModule: `http.handlers.rate_limit` \n[godoc](https://pkg.go.dev/github.com/mholt/caddy-ratelimit#Handler)", + "type": "number" + }, + "window": { + "description": "window: number\nModule: http.handlers.rate_limit\nhttps://pkg.go.dev/github.com/mholt/caddy-ratelimit#Handler", + "markdownDescription": "window: `number` \nModule: `http.handlers.rate_limit` \n[godoc](https://pkg.go.dev/github.com/mholt/caddy-ratelimit#Handler)", + "type": "number" + } + } + } + }, + "storage": { + "description": "storage: object\nModule: caddy.storage", + "markdownDescription": "storage: `object` \nModule: `caddy.storage`", + "type": "object", + "required": [ + "module" + ], + "allOf": [ + { + "if": { + "properties": { + "module": { + "const": "consul" + } + } + }, + "then": { + "$ref": "#/definitions/caddy.storage.consul" + } + }, + { + "if": { + "properties": { + "module": { + "const": "file_system" + } + } + }, + "then": { + "$ref": "#/definitions/caddy.storage.file_system" + } + }, + { + "properties": { + "module": { + "description": "key to identify storage module.\nmodule: string\nModule: caddy.storage", + "markdownDescription": "key to identify `storage` module. \nmodule: `string` \nModule: `caddy.storage`", + "type": "string", + "enum": [ + "consul", + "file_system" + ] + } + } + } + ] + }, + "sweep_interval": { + "description": "sweep_interval: number\nModule: http.handlers.rate_limit\nhttps://pkg.go.dev/github.com/mholt/caddy-ratelimit#Handler", + "markdownDescription": "sweep_interval: `number` \nModule: `http.handlers.rate_limit` \n[godoc](https://pkg.go.dev/github.com/mholt/caddy-ratelimit#Handler)", + "type": "number" + } + } + }, "http.handlers.request_body": { "description": "request_body: object\nModule: http.handlers.request_body\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/requestbody#RequestBody\nRequestBody is a middleware for manipulating the request body.\n\n", "markdownDescription": "request_body: `object` \nModule: `http.handlers.request_body` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/requestbody#RequestBody) \nRequestBody is a middleware for manipulating the request body.\n \n", @@ -2612,12 +3591,12 @@ "if": { "properties": { "source": { - "const": "a" + "const": "multi" } } }, "then": { - "$ref": "#/definitions/http.reverse_proxy.upstreams.a" + "$ref": "#/definitions/http.reverse_proxy.upstreams.multi" } }, { @@ -2632,6 +3611,18 @@ "$ref": "#/definitions/http.reverse_proxy.upstreams.srv" } }, + { + "if": { + "properties": { + "source": { + "const": "a" + } + } + }, + "then": { + "$ref": "#/definitions/http.reverse_proxy.upstreams.a" + } + }, { "properties": { "source": { @@ -2639,8 +3630,9 @@ "markdownDescription": "key to identify `dynamic_upstreams` module. \nsource: `string` \nModule: `http.reverse_proxy.upstreams`", "type": "string", "enum": [ - "a", - "srv" + "multi", + "srv", + "a" ] } } @@ -2648,8 +3640,8 @@ ] }, "flush_interval": { - "description": "flush_interval: number\nModule: http.handlers.reverse_proxy\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2#Duration\nAdjusts how often to flush the response buffer. By default,\nno periodic flushing is done. A negative value disables\nresponse buffering, and flushes immediately after each\nwrite to the client. This option is ignored when the upstream's\nresponse is recognized as a streaming response, or if its\ncontent length is -1; for such responses, writes are flushed\nto the client immediately.\n\n\nDuration can be an integer or a string. An integer is\ninterpreted as nanoseconds. If a string, it is a Go\ntime.Duration value such as `300ms`, `1.5h`, or `2h45m`;\nvalid units are `ns`, `us`/`µs`, `ms`, `s`, `m`, `h`, and `d`.\n", - "markdownDescription": "flush_interval: `number` \nModule: `http.handlers.reverse_proxy` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2#Duration) \nAdjusts how often to flush the response buffer. By default,\nno periodic flushing is done. A negative value disables\nresponse buffering, and flushes immediately after each\nwrite to the client. This option is ignored when the upstream's\nresponse is recognized as a streaming response, or if its\ncontent length is -1; for such responses, writes are flushed\nto the client immediately.\n\n\nDuration can be an integer or a string. An integer is\ninterpreted as nanoseconds. If a string, it is a Go\ntime.Duration value such as `300ms`, `1.5h`, or `2h45m`;\nvalid units are `ns`, `us`/`µs`, `ms`, `s`, `m`, `h`, and `d`. \n", + "description": "flush_interval: number\nModule: http.handlers.reverse_proxy\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2#Duration\nAdjusts how often to flush the response buffer. By default,\nno periodic flushing is done. A negative value disables\nresponse buffering, and flushes immediately after each\nwrite to the client. This option is ignored when the upstream's\nresponse is recognized as a streaming response, or if its\ncontent length is -1; for such responses, writes are flushed\nto the client immediately.\n\nNormally, a request will be canceled if the client disconnects\nbefore the response is received from the backend. If explicitly\nset to -1, client disconnection will be ignored and the request\nwill be completed to help facilitate low-latency streaming.\n\n\nDuration can be an integer or a string. An integer is\ninterpreted as nanoseconds. If a string, it is a Go\ntime.Duration value such as `300ms`, `1.5h`, or `2h45m`;\nvalid units are `ns`, `us`/`µs`, `ms`, `s`, `m`, `h`, and `d`.\n", + "markdownDescription": "flush_interval: `number` \nModule: `http.handlers.reverse_proxy` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2#Duration) \nAdjusts how often to flush the response buffer. By default,\nno periodic flushing is done. A negative value disables\nresponse buffering, and flushes immediately after each\nwrite to the client. This option is ignored when the upstream's\nresponse is recognized as a streaming response, or if its\ncontent length is -1; for such responses, writes are flushed\nto the client immediately.\n\nNormally, a request will be canceled if the client disconnects\nbefore the response is received from the backend. If explicitly\nset to -1, client disconnection will be ignored and the request\nwill be completed to help facilitate low-latency streaming.\n\n\nDuration can be an integer or a string. An integer is\ninterpreted as nanoseconds. If a string, it is a Go\ntime.Duration value such as `300ms`, `1.5h`, or `2h45m`;\nvalid units are `ns`, `us`/`µs`, `ms`, `s`, `m`, `h`, and `d`. \n", "type": "number" }, "handle_response": { @@ -2720,24 +3712,48 @@ "if": { "properties": { "handler": { - "const": "static_response" + "const": "map" } } }, "then": { - "$ref": "#/definitions/http.handlers.static_response" + "$ref": "#/definitions/http.handlers.map" } }, { "if": { "properties": { "handler": { - "const": "authentication" + "const": "push" } } }, "then": { - "$ref": "#/definitions/http.handlers.authentication" + "$ref": "#/definitions/http.handlers.push" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "rewrite" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.rewrite" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "cache" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.cache" } }, { @@ -2756,12 +3772,12 @@ "if": { "properties": { "handler": { - "const": "copy_response_headers" + "const": "encode" } } }, "then": { - "$ref": "#/definitions/http.handlers.copy_response_headers" + "$ref": "#/definitions/http.handlers.encode" } }, { @@ -2780,48 +3796,12 @@ "if": { "properties": { "handler": { - "const": "file_server" + "const": "vars" } } }, "then": { - "$ref": "#/definitions/http.handlers.file_server" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "map" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.map" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "reverse_proxy" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.reverse_proxy" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "templates" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.templates" + "$ref": "#/definitions/http.handlers.vars" } }, { @@ -2840,24 +3820,120 @@ "if": { "properties": { "handler": { - "const": "vars" + "const": "authenticator" } } }, "then": { - "$ref": "#/definitions/http.handlers.vars" + "$ref": "#/definitions/http.handlers.authenticator" } }, { "if": { "properties": { "handler": { - "const": "push" + "const": "request_body" } } }, "then": { - "$ref": "#/definitions/http.handlers.push" + "$ref": "#/definitions/http.handlers.request_body" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "static_response" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.static_response" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "reverse_proxy" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.reverse_proxy" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "subroute" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.subroute" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "templates" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.templates" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "tracing" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.tracing" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "authentication" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.authentication" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "copy_response_headers" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.copy_response_headers" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "file_server" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.file_server" } }, { @@ -2888,60 +3964,12 @@ "if": { "properties": { "handler": { - "const": "request_body" + "const": "rate_limit" } } }, "then": { - "$ref": "#/definitions/http.handlers.request_body" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "rewrite" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.rewrite" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "subroute" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.subroute" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "tracing" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.tracing" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "encode" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.encode" + "$ref": "#/definitions/http.handlers.rate_limit" } }, { @@ -2951,25 +3979,28 @@ "markdownDescription": "key to identify `handle` module. \nhandler: `string` \nModule: `http.handlers`", "type": "string", "enum": [ - "static_response", - "authentication", - "copy_response", - "copy_response_headers", - "error", - "file_server", "map", - "reverse_proxy", - "templates", - "acme_server", - "vars", "push", + "rewrite", + "cache", + "copy_response", + "encode", + "error", + "vars", + "acme_server", + "authenticator", + "request_body", + "static_response", + "reverse_proxy", + "subroute", + "templates", + "tracing", + "authentication", + "copy_response_headers", + "file_server", "headers", "metrics", - "request_body", - "rewrite", - "subroute", - "tracing", - "encode" + "rate_limit" ] } } @@ -3070,18 +4101,18 @@ } }, "delete": { - "description": "delete: array\nModule: http.handlers.reverse_proxy\nNames of HTTP header fields to delete.\n", - "markdownDescription": "delete: `array` \nModule: `http.handlers.reverse_proxy` \nNames of HTTP header fields to delete. \n", + "description": "delete: array\nModule: http.handlers.reverse_proxy\nNames of HTTP header fields to delete. Basic wildcards are supported:\n\n- Start with `*` for all field names with the given suffix;\n- End with `*` for all field names with the given prefix;\n- Start and end with `*` for all field names containing a substring.\n", + "markdownDescription": "delete: `array` \nModule: `http.handlers.reverse_proxy` \nNames of HTTP header fields to delete. Basic wildcards are supported:\n\n- Start with `*` for all field names with the given suffix;\n- End with `*` for all field names with the given prefix;\n- Start and end with `*` for all field names containing a substring. \n", "type": "array", "items": { - "description": "Names of HTTP header fields to delete.\n", - "markdownDescription": "Names of HTTP header fields to delete. \n", + "description": "Names of HTTP header fields to delete. Basic wildcards are supported:\n\n- Start with `*` for all field names with the given suffix;\n- End with `*` for all field names with the given prefix;\n- Start and end with `*` for all field names containing a substring.\n", + "markdownDescription": "Names of HTTP header fields to delete. Basic wildcards are supported:\n\n- Start with `*` for all field names with the given suffix;\n- End with `*` for all field names with the given prefix;\n- Start and end with `*` for all field names containing a substring. \n", "type": "string" } }, "replace": { - "description": "replace: object\nModule: http.handlers.reverse_proxy\nPerforms substring replacements of HTTP headers in-situ.\n", - "markdownDescription": "replace: `object` \nModule: `http.handlers.reverse_proxy` \nPerforms substring replacements of HTTP headers in-situ. \n", + "description": "replace: object\nModule: http.handlers.reverse_proxy\nPerforms in-situ substring replacements of HTTP headers.\nKeys are the field names on which to perform the associated replacements.\nIf the field name is `*`, the replacements are performed on all header fields.\n", + "markdownDescription": "replace: `object` \nModule: `http.handlers.reverse_proxy` \nPerforms in-situ substring replacements of HTTP headers.\nKeys are the field names on which to perform the associated replacements.\nIf the field name is `*`, the replacements are performed on all header fields. \n", "type": "object", "additionalProperties": { "description": "https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/headers#Replacement\nReplacement describes a string replacement,\neither a simple and fast substring search\nor a slower but more powerful regex search.\n\n", @@ -3150,18 +4181,18 @@ "type": "boolean" }, "delete": { - "description": "delete: array\nModule: http.handlers.reverse_proxy\nNames of HTTP header fields to delete.\n", - "markdownDescription": "delete: `array` \nModule: `http.handlers.reverse_proxy` \nNames of HTTP header fields to delete. \n", + "description": "delete: array\nModule: http.handlers.reverse_proxy\nNames of HTTP header fields to delete. Basic wildcards are supported:\n\n- Start with `*` for all field names with the given suffix;\n- End with `*` for all field names with the given prefix;\n- Start and end with `*` for all field names containing a substring.\n", + "markdownDescription": "delete: `array` \nModule: `http.handlers.reverse_proxy` \nNames of HTTP header fields to delete. Basic wildcards are supported:\n\n- Start with `*` for all field names with the given suffix;\n- End with `*` for all field names with the given prefix;\n- Start and end with `*` for all field names containing a substring. \n", "type": "array", "items": { - "description": "Names of HTTP header fields to delete.\n", - "markdownDescription": "Names of HTTP header fields to delete. \n", + "description": "Names of HTTP header fields to delete. Basic wildcards are supported:\n\n- Start with `*` for all field names with the given suffix;\n- End with `*` for all field names with the given prefix;\n- Start and end with `*` for all field names containing a substring.\n", + "markdownDescription": "Names of HTTP header fields to delete. Basic wildcards are supported:\n\n- Start with `*` for all field names with the given suffix;\n- End with `*` for all field names with the given prefix;\n- Start and end with `*` for all field names containing a substring. \n", "type": "string" } }, "replace": { - "description": "replace: object\nModule: http.handlers.reverse_proxy\nPerforms substring replacements of HTTP headers in-situ.\n", - "markdownDescription": "replace: `object` \nModule: `http.handlers.reverse_proxy` \nPerforms substring replacements of HTTP headers in-situ. \n", + "description": "replace: object\nModule: http.handlers.reverse_proxy\nPerforms in-situ substring replacements of HTTP headers.\nKeys are the field names on which to perform the associated replacements.\nIf the field name is `*`, the replacements are performed on all header fields.\n", + "markdownDescription": "replace: `object` \nModule: `http.handlers.reverse_proxy` \nPerforms in-situ substring replacements of HTTP headers.\nKeys are the field names on which to perform the associated replacements.\nIf the field name is `*`, the replacements are performed on all header fields. \n", "type": "object", "additionalProperties": { "description": "https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/headers#Replacement\nReplacement describes a string replacement,\neither a simple and fast substring search\nor a slower but more powerful regex search.\n\n", @@ -3347,6 +4378,11 @@ "markdownDescription": "load_balancing: `object` \nModule: `http.handlers.reverse_proxy` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/reverseproxy#LoadBalancing) \nLoad balancing distributes load/requests between backends.\n\n\nLoadBalancing has parameters related to load balancing. \n", "type": "object", "properties": { + "retries": { + "description": "retries: number\nModule: http.handlers.reverse_proxy\nHow many times to retry selecting available backends for each\nrequest if the next available host is down. If try_duration is\nalso configured, then retries may stop early if the duration\nis reached. By default, retries are disabled (zero).\n", + "markdownDescription": "retries: `number` \nModule: `http.handlers.reverse_proxy` \nHow many times to retry selecting available backends for each\nrequest if the next available host is down. If try_duration is\nalso configured, then retries may stop early if the duration\nis reached. By default, retries are disabled (zero). \n", + "type": "number" + }, "retry_match": { "description": "retry_match: array\nModule: http.matchers\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2#ModuleMap\nA list of matcher sets that restricts with which requests retries are\nallowed. A request must match any of the given matcher sets in order\nto be retried if the connection to the upstream succeeded but the\nsubsequent round-trip failed. If the connection to the upstream failed,\na retry is always allowed. If unspecified, only GET requests will be\nallowed to be retried. Note that a retry is done with the next available\nhost according to the load balancing policy.\n\n\nModuleMap is a map that can contain multiple modules,\nwhere the map key is the module's name. (The namespace\nis usually read from an associated field's struct tag.)\nBecause the module's name is given as the key in a\nmodule map, the name does not have to be given in the\njson.RawMessage.\n", "markdownDescription": "retry_match: `array` \nModule: `http.matchers` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2#ModuleMap) \nA list of matcher sets that restricts with which requests retries are\nallowed. A request must match any of the given matcher sets in order\nto be retried if the connection to the upstream succeeded but the\nsubsequent round-trip failed. If the connection to the upstream failed,\na retry is always allowed. If unspecified, only GET requests will be\nallowed to be retried. Note that a retry is done with the next available\nhost according to the load balancing policy.\n\n\nModuleMap is a map that can contain multiple modules,\nwhere the map key is the module's name. (The namespace\nis usually read from an associated field's struct tag.)\nBecause the module's name is given as the key in a\nmodule map, the name does not have to be given in the\njson.RawMessage. \n", @@ -3408,42 +4444,6 @@ "policy" ], "allOf": [ - { - "if": { - "properties": { - "policy": { - "const": "first" - } - } - }, - "then": { - "$ref": "#/definitions/http.reverse_proxy.selection_policies.first" - } - }, - { - "if": { - "properties": { - "policy": { - "const": "ip_hash" - } - } - }, - "then": { - "$ref": "#/definitions/http.reverse_proxy.selection_policies.ip_hash" - } - }, - { - "if": { - "properties": { - "policy": { - "const": "uri_hash" - } - } - }, - "then": { - "$ref": "#/definitions/http.reverse_proxy.selection_policies.uri_hash" - } - }, { "if": { "properties": { @@ -3460,24 +4460,12 @@ "if": { "properties": { "policy": { - "const": "header" + "const": "ip_hash" } } }, "then": { - "$ref": "#/definitions/http.reverse_proxy.selection_policies.header" - } - }, - { - "if": { - "properties": { - "policy": { - "const": "least_conn" - } - } - }, - "then": { - "$ref": "#/definitions/http.reverse_proxy.selection_policies.least_conn" + "$ref": "#/definitions/http.reverse_proxy.selection_policies.ip_hash" } }, { @@ -3504,6 +4492,54 @@ "$ref": "#/definitions/http.reverse_proxy.selection_policies.random_choose" } }, + { + "if": { + "properties": { + "policy": { + "const": "uri_hash" + } + } + }, + "then": { + "$ref": "#/definitions/http.reverse_proxy.selection_policies.uri_hash" + } + }, + { + "if": { + "properties": { + "policy": { + "const": "first" + } + } + }, + "then": { + "$ref": "#/definitions/http.reverse_proxy.selection_policies.first" + } + }, + { + "if": { + "properties": { + "policy": { + "const": "header" + } + } + }, + "then": { + "$ref": "#/definitions/http.reverse_proxy.selection_policies.header" + } + }, + { + "if": { + "properties": { + "policy": { + "const": "least_conn" + } + } + }, + "then": { + "$ref": "#/definitions/http.reverse_proxy.selection_policies.least_conn" + } + }, { "if": { "properties": { @@ -3523,14 +4559,14 @@ "markdownDescription": "key to identify `selection_policy` module. \npolicy: `string` \nModule: `http.reverse_proxy.selection_policies`", "type": "string", "enum": [ - "first", - "ip_hash", - "uri_hash", "cookie", - "header", - "least_conn", + "ip_hash", "random", "random_choose", + "uri_hash", + "first", + "header", + "least_conn", "round_robin" ] } @@ -3539,13 +4575,13 @@ ] }, "try_duration": { - "description": "try_duration: number\nModule: http.handlers.reverse_proxy\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2#Duration\nHow long to try selecting available backends for each request\nif the next available host is down. By default, this retry is\ndisabled. Clients will wait for up to this long while the load\nbalancer tries to find an available upstream host.\n\n\nDuration can be an integer or a string. An integer is\ninterpreted as nanoseconds. If a string, it is a Go\ntime.Duration value such as `300ms`, `1.5h`, or `2h45m`;\nvalid units are `ns`, `us`/`µs`, `ms`, `s`, `m`, `h`, and `d`.\n", - "markdownDescription": "try_duration: `number` \nModule: `http.handlers.reverse_proxy` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2#Duration) \nHow long to try selecting available backends for each request\nif the next available host is down. By default, this retry is\ndisabled. Clients will wait for up to this long while the load\nbalancer tries to find an available upstream host.\n\n\nDuration can be an integer or a string. An integer is\ninterpreted as nanoseconds. If a string, it is a Go\ntime.Duration value such as `300ms`, `1.5h`, or `2h45m`;\nvalid units are `ns`, `us`/`µs`, `ms`, `s`, `m`, `h`, and `d`. \n", + "description": "try_duration: number\nModule: http.handlers.reverse_proxy\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2#Duration\nHow long to try selecting available backends for each request\nif the next available host is down. Clients will wait for up\nto this long while the load balancer tries to find an available\nupstream host. If retries is also configured, tries may stop\nearly if the maximum retries is reached. By default, retries\nare disabled (zero duration).\n\n\nDuration can be an integer or a string. An integer is\ninterpreted as nanoseconds. If a string, it is a Go\ntime.Duration value such as `300ms`, `1.5h`, or `2h45m`;\nvalid units are `ns`, `us`/`µs`, `ms`, `s`, `m`, `h`, and `d`.\n", + "markdownDescription": "try_duration: `number` \nModule: `http.handlers.reverse_proxy` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2#Duration) \nHow long to try selecting available backends for each request\nif the next available host is down. Clients will wait for up\nto this long while the load balancer tries to find an available\nupstream host. If retries is also configured, tries may stop\nearly if the maximum retries is reached. By default, retries\nare disabled (zero duration).\n\n\nDuration can be an integer or a string. An integer is\ninterpreted as nanoseconds. If a string, it is a Go\ntime.Duration value such as `300ms`, `1.5h`, or `2h45m`;\nvalid units are `ns`, `us`/`µs`, `ms`, `s`, `m`, `h`, and `d`. \n", "type": "number" }, "try_interval": { - "description": "try_interval: number\nModule: http.handlers.reverse_proxy\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2#Duration\nHow long to wait between selecting the next host from the pool. Default\nis 250ms. Only relevant when a request to an upstream host fails. Be\naware that setting this to 0 with a non-zero try_duration can cause the\nCPU to spin if all backends are down and latency is very low.\n\n\nDuration can be an integer or a string. An integer is\ninterpreted as nanoseconds. If a string, it is a Go\ntime.Duration value such as `300ms`, `1.5h`, or `2h45m`;\nvalid units are `ns`, `us`/`µs`, `ms`, `s`, `m`, `h`, and `d`.\n", - "markdownDescription": "try_interval: `number` \nModule: `http.handlers.reverse_proxy` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2#Duration) \nHow long to wait between selecting the next host from the pool. Default\nis 250ms. Only relevant when a request to an upstream host fails. Be\naware that setting this to 0 with a non-zero try_duration can cause the\nCPU to spin if all backends are down and latency is very low.\n\n\nDuration can be an integer or a string. An integer is\ninterpreted as nanoseconds. If a string, it is a Go\ntime.Duration value such as `300ms`, `1.5h`, or `2h45m`;\nvalid units are `ns`, `us`/`µs`, `ms`, `s`, `m`, `h`, and `d`. \n", + "description": "try_interval: number\nModule: http.handlers.reverse_proxy\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2#Duration\nHow long to wait between selecting the next host from the pool.\nDefault is 250ms if try_duration is enabled, otherwise zero. Only\nrelevant when a request to an upstream host fails. Be aware that\nsetting this to 0 with a non-zero try_duration can cause the CPU\nto spin if all backends are down and latency is very low.\n\n\nDuration can be an integer or a string. An integer is\ninterpreted as nanoseconds. If a string, it is a Go\ntime.Duration value such as `300ms`, `1.5h`, or `2h45m`;\nvalid units are `ns`, `us`/`µs`, `ms`, `s`, `m`, `h`, and `d`.\n", + "markdownDescription": "try_interval: `number` \nModule: `http.handlers.reverse_proxy` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2#Duration) \nHow long to wait between selecting the next host from the pool.\nDefault is 250ms if try_duration is enabled, otherwise zero. Only\nrelevant when a request to an upstream host fails. Be aware that\nsetting this to 0 with a non-zero try_duration can cause the CPU\nto spin if all backends are down and latency is very low.\n\n\nDuration can be an integer or a string. An integer is\ninterpreted as nanoseconds. If a string, it is a Go\ntime.Duration value such as `300ms`, `1.5h`, or `2h45m`;\nvalid units are `ns`, `us`/`µs`, `ms`, `s`, `m`, `h`, and `d`. \n", "type": "number" } } @@ -3556,8 +4592,8 @@ "type": "number" }, "rewrite": { - "description": "rewrite: object\nModule: http.handlers.reverse_proxy\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/rewrite#Rewrite\nIf configured, rewrites the copy of the upstream request.\nAllows changing the request method and URI (path and query).\nSince the rewrite is applied to the copy, it does not persist\npast the reverse proxy handler.\nIf the method is changed to `GET` or `HEAD`, the request body\nwill not be copied to the backend. This allows a later request\nhandler -- either in a `handle_response` route, or after -- to\nread the body.\nBy default, no rewrite is performed, and the method and URI\nfrom the incoming request is used as-is for proxying.\n\n\nRewrite is a middleware which can rewrite HTTP requests.\n\nThe Method and URI properties are \"setters\": the request URI\nwill be set to the given values. Other properties are \"modifiers\":\nthey modify existing files but do not explicitly specify what the\nresult will be. It is atypical to combine the use of setters and\nmodifiers in a single rewrite.\n", - "markdownDescription": "rewrite: `object` \nModule: `http.handlers.reverse_proxy` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/rewrite#Rewrite) \nIf configured, rewrites the copy of the upstream request.\nAllows changing the request method and URI (path and query).\nSince the rewrite is applied to the copy, it does not persist\npast the reverse proxy handler.\nIf the method is changed to `GET` or `HEAD`, the request body\nwill not be copied to the backend. This allows a later request\nhandler -- either in a `handle_response` route, or after -- to\nread the body.\nBy default, no rewrite is performed, and the method and URI\nfrom the incoming request is used as-is for proxying.\n\n\nRewrite is a middleware which can rewrite HTTP requests.\n\nThe Method and URI properties are \"setters\": the request URI\nwill be set to the given values. Other properties are \"modifiers\":\nthey modify existing files but do not explicitly specify what the\nresult will be. It is atypical to combine the use of setters and\nmodifiers in a single rewrite. \n", + "description": "rewrite: object\nModule: http.handlers.reverse_proxy\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/rewrite#Rewrite\nIf configured, rewrites the copy of the upstream request.\nAllows changing the request method and URI (path and query).\nSince the rewrite is applied to the copy, it does not persist\npast the reverse proxy handler.\nIf the method is changed to `GET` or `HEAD`, the request body\nwill not be copied to the backend. This allows a later request\nhandler -- either in a `handle_response` route, or after -- to\nread the body.\nBy default, no rewrite is performed, and the method and URI\nfrom the incoming request is used as-is for proxying.\n\n\nRewrite is a middleware which can rewrite/mutate HTTP requests.\n\nThe Method and URI properties are \"setters\" (the request URI\nwill be overwritten with the given values). Other properties are\n\"modifiers\" (they modify existing values in a differentiable\nway). It is atypical to combine the use of setters and\nmodifiers in a single rewrite.\n\nTo ensure consistent behavior, prefix and suffix stripping is\nperformed in the URL-decoded (unescaped, normalized) space by\ndefault except for the specific bytes where an escape sequence\nis used in the prefix or suffix pattern.\n\nFor all modifiers, paths are cleaned before being modified so that\nmultiple, consecutive slashes are collapsed into a single slash,\nand dot elements are resolved and removed. In the special case\nof a prefix, suffix, or substring containing \"//\" (repeated slashes),\nslashes will not be merged while cleaning the path so that\nthe rewrite can be interpreted literally.\n", + "markdownDescription": "rewrite: `object` \nModule: `http.handlers.reverse_proxy` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/rewrite#Rewrite) \nIf configured, rewrites the copy of the upstream request.\nAllows changing the request method and URI (path and query).\nSince the rewrite is applied to the copy, it does not persist\npast the reverse proxy handler.\nIf the method is changed to `GET` or `HEAD`, the request body\nwill not be copied to the backend. This allows a later request\nhandler -- either in a `handle_response` route, or after -- to\nread the body.\nBy default, no rewrite is performed, and the method and URI\nfrom the incoming request is used as-is for proxying.\n\n\nRewrite is a middleware which can rewrite/mutate HTTP requests.\n\nThe Method and URI properties are \"setters\" (the request URI\nwill be overwritten with the given values). Other properties are\n\"modifiers\" (they modify existing values in a differentiable\nway). It is atypical to combine the use of setters and\nmodifiers in a single rewrite.\n\nTo ensure consistent behavior, prefix and suffix stripping is\nperformed in the URL-decoded (unescaped, normalized) space by\ndefault except for the specific bytes where an escape sequence\nis used in the prefix or suffix pattern.\n\nFor all modifiers, paths are cleaned before being modified so that\nmultiple, consecutive slashes are collapsed into a single slash,\nand dot elements are resolved and removed. In the special case\nof a prefix, suffix, or substring containing \"//\" (repeated slashes),\nslashes will not be merged while cleaning the path so that\nthe rewrite can be interpreted literally. \n", "type": "object", "properties": { "method": { @@ -3588,13 +4624,13 @@ } }, "strip_path_prefix": { - "description": "strip_path_prefix: string\nModule: http.handlers.reverse_proxy\nStrips the given prefix from the beginning of the URI path.\n", - "markdownDescription": "strip_path_prefix: `string` \nModule: `http.handlers.reverse_proxy` \nStrips the given prefix from the beginning of the URI path. \n", + "description": "strip_path_prefix: string\nModule: http.handlers.reverse_proxy\nStrips the given prefix from the beginning of the URI path.\nThe prefix should be written in normalized (unescaped) form,\nbut if an escaping (`%xx`) is used, the path will be required\nto have that same escape at that position in order to match.\n", + "markdownDescription": "strip_path_prefix: `string` \nModule: `http.handlers.reverse_proxy` \nStrips the given prefix from the beginning of the URI path.\nThe prefix should be written in normalized (unescaped) form,\nbut if an escaping (`%xx`) is used, the path will be required\nto have that same escape at that position in order to match. \n", "type": "string" }, "strip_path_suffix": { - "description": "strip_path_suffix: string\nModule: http.handlers.reverse_proxy\nStrips the given suffix from the end of the URI path.\n", - "markdownDescription": "strip_path_suffix: `string` \nModule: `http.handlers.reverse_proxy` \nStrips the given suffix from the end of the URI path. \n", + "description": "strip_path_suffix: string\nModule: http.handlers.reverse_proxy\nStrips the given suffix from the end of the URI path.\nThe suffix should be written in normalized (unescaped) form,\nbut if an escaping (`%xx`) is used, the path will be required\nto have that same escape at that position in order to match.\n", + "markdownDescription": "strip_path_suffix: `string` \nModule: `http.handlers.reverse_proxy` \nStrips the given suffix from the end of the URI path.\nThe suffix should be written in normalized (unescaped) form,\nbut if an escaping (`%xx`) is used, the path will be required\nto have that same escape at that position in order to match. \n", "type": "string" }, "uri": { @@ -3718,8 +4754,8 @@ } }, "http.handlers.rewrite": { - "description": "rewrite: object\nModule: http.handlers.rewrite\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/rewrite#Rewrite\nRewrite is a middleware which can rewrite HTTP requests.\n\nThe Method and URI properties are \"setters\": the request URI\nwill be set to the given values. Other properties are \"modifiers\":\nthey modify existing files but do not explicitly specify what the\nresult will be. It is atypical to combine the use of setters and\nmodifiers in a single rewrite.\n\n", - "markdownDescription": "rewrite: `object` \nModule: `http.handlers.rewrite` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/rewrite#Rewrite) \nRewrite is a middleware which can rewrite HTTP requests.\n\nThe Method and URI properties are \"setters\": the request URI\nwill be set to the given values. Other properties are \"modifiers\":\nthey modify existing files but do not explicitly specify what the\nresult will be. It is atypical to combine the use of setters and\nmodifiers in a single rewrite.\n \n", + "description": "rewrite: object\nModule: http.handlers.rewrite\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/rewrite#Rewrite\nRewrite is a middleware which can rewrite/mutate HTTP requests.\n\nThe Method and URI properties are \"setters\" (the request URI\nwill be overwritten with the given values). Other properties are\n\"modifiers\" (they modify existing values in a differentiable\nway). It is atypical to combine the use of setters and\nmodifiers in a single rewrite.\n\nTo ensure consistent behavior, prefix and suffix stripping is\nperformed in the URL-decoded (unescaped, normalized) space by\ndefault except for the specific bytes where an escape sequence\nis used in the prefix or suffix pattern.\n\nFor all modifiers, paths are cleaned before being modified so that\nmultiple, consecutive slashes are collapsed into a single slash,\nand dot elements are resolved and removed. In the special case\nof a prefix, suffix, or substring containing \"//\" (repeated slashes),\nslashes will not be merged while cleaning the path so that\nthe rewrite can be interpreted literally.\n\n", + "markdownDescription": "rewrite: `object` \nModule: `http.handlers.rewrite` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/rewrite#Rewrite) \nRewrite is a middleware which can rewrite/mutate HTTP requests.\n\nThe Method and URI properties are \"setters\" (the request URI\nwill be overwritten with the given values). Other properties are\n\"modifiers\" (they modify existing values in a differentiable\nway). It is atypical to combine the use of setters and\nmodifiers in a single rewrite.\n\nTo ensure consistent behavior, prefix and suffix stripping is\nperformed in the URL-decoded (unescaped, normalized) space by\ndefault except for the specific bytes where an escape sequence\nis used in the prefix or suffix pattern.\n\nFor all modifiers, paths are cleaned before being modified so that\nmultiple, consecutive slashes are collapsed into a single slash,\nand dot elements are resolved and removed. In the special case\nof a prefix, suffix, or substring containing \"//\" (repeated slashes),\nslashes will not be merged while cleaning the path so that\nthe rewrite can be interpreted literally.\n \n", "type": "object", "properties": { "method": { @@ -3750,13 +4786,13 @@ } }, "strip_path_prefix": { - "description": "strip_path_prefix: string\nModule: http.handlers.rewrite\nStrips the given prefix from the beginning of the URI path.\n", - "markdownDescription": "strip_path_prefix: `string` \nModule: `http.handlers.rewrite` \nStrips the given prefix from the beginning of the URI path. \n", + "description": "strip_path_prefix: string\nModule: http.handlers.rewrite\nStrips the given prefix from the beginning of the URI path.\nThe prefix should be written in normalized (unescaped) form,\nbut if an escaping (`%xx`) is used, the path will be required\nto have that same escape at that position in order to match.\n", + "markdownDescription": "strip_path_prefix: `string` \nModule: `http.handlers.rewrite` \nStrips the given prefix from the beginning of the URI path.\nThe prefix should be written in normalized (unescaped) form,\nbut if an escaping (`%xx`) is used, the path will be required\nto have that same escape at that position in order to match. \n", "type": "string" }, "strip_path_suffix": { - "description": "strip_path_suffix: string\nModule: http.handlers.rewrite\nStrips the given suffix from the end of the URI path.\n", - "markdownDescription": "strip_path_suffix: `string` \nModule: `http.handlers.rewrite` \nStrips the given suffix from the end of the URI path. \n", + "description": "strip_path_suffix: string\nModule: http.handlers.rewrite\nStrips the given suffix from the end of the URI path.\nThe suffix should be written in normalized (unescaped) form,\nbut if an escaping (`%xx`) is used, the path will be required\nto have that same escape at that position in order to match.\n", + "markdownDescription": "strip_path_suffix: `string` \nModule: `http.handlers.rewrite` \nStrips the given suffix from the end of the URI path.\nThe suffix should be written in normalized (unescaped) form,\nbut if an escaping (`%xx`) is used, the path will be required\nto have that same escape at that position in order to match. \n", "type": "string" }, "uri": { @@ -3804,8 +4840,8 @@ "type": "boolean" }, "body": { - "description": "body: string\nModule: http.handlers.static_response\nThe response body.\n", - "markdownDescription": "body: `string` \nModule: `http.handlers.static_response` \nThe response body. \n", + "description": "body: string\nModule: http.handlers.static_response\nThe response body. If non-empty, the Content-Type header may\nbe added automatically if it is not explicitly configured nor\nalready set on the response; the default value is\n\"text/plain; charset=utf-8\" unless the body is a valid JSON object\nor array, in which case the value will be \"application/json\".\nOther than those common special cases the Content-Type header\nshould be set explicitly if it is desired because MIME sniffing\nis disabled for safety.\n", + "markdownDescription": "body: `string` \nModule: `http.handlers.static_response` \nThe response body. If non-empty, the Content-Type header may\nbe added automatically if it is not explicitly configured nor\nalready set on the response; the default value is\n\"text/plain; charset=utf-8\" unless the body is a valid JSON object\nor array, in which case the value will be \"application/json\".\nOther than those common special cases the Content-Type header\nshould be set explicitly if it is desired because MIME sniffing\nis disabled for safety. \n", "type": "string" }, "close": { @@ -3814,12 +4850,12 @@ "type": "boolean" }, "headers": { - "description": "headers: object\nModule: http.handlers.static_response\nHeader fields to set on the response.\n", - "markdownDescription": "headers: `object` \nModule: `http.handlers.static_response` \nHeader fields to set on the response. \n", + "description": "headers: object\nModule: http.handlers.static_response\nHeader fields to set on the response; overwrites any existing\nheader fields of the same names after normalization.\n", + "markdownDescription": "headers: `object` \nModule: `http.handlers.static_response` \nHeader fields to set on the response; overwrites any existing\nheader fields of the same names after normalization. \n", "type": "object", "additionalProperties": { - "description": "Header fields to set on the response.\n", - "markdownDescription": "Header fields to set on the response. \n", + "description": "Header fields to set on the response; overwrites any existing\nheader fields of the same names after normalization.\n", + "markdownDescription": "Header fields to set on the response; overwrites any existing\nheader fields of the same names after normalization. \n", "type": "array", "items": { "type": "string" @@ -3827,8 +4863,8 @@ } }, "status_code": { - "description": "status_code: string\nModule: http.handlers.static_response\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp#WeakString\nThe HTTP status code to respond with. Can be an integer or,\nif needing to use a placeholder, a string.\n\n\nWeakString is a type that unmarshals any JSON value\nas a string literal, with the following exceptions:\n\n1. actual string values are decoded as strings; and\n2. null is decoded as empty string;\n\nand provides methods for getting the value as various\nprimitive types. However, using this type removes any\ntype safety as far as deserializing JSON is concerned.\n", - "markdownDescription": "status_code: `string` \nModule: `http.handlers.static_response` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp#WeakString) \nThe HTTP status code to respond with. Can be an integer or,\nif needing to use a placeholder, a string.\n\n\nWeakString is a type that unmarshals any JSON value\nas a string literal, with the following exceptions:\n\n1. actual string values are decoded as strings; and\n2. null is decoded as empty string;\n\nand provides methods for getting the value as various\nprimitive types. However, using this type removes any\ntype safety as far as deserializing JSON is concerned. \n", + "description": "status_code: string\nModule: http.handlers.static_response\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp#WeakString\nThe HTTP status code to respond with. Can be an integer or,\nif needing to use a placeholder, a string.\n\nIf the status code is 103 (Early Hints), the response headers\nwill be written to the client immediately, the body will be\nignored, and the next handler will be invoked. This behavior\nis EXPERIMENTAL while RFC 8297 is a draft, and may be changed\nor removed.\n\n\nWeakString is a type that unmarshals any JSON value\nas a string literal, with the following exceptions:\n\n1. actual string values are decoded as strings; and\n2. null is decoded as empty string;\n\nand provides methods for getting the value as various\nprimitive types. However, using this type removes any\ntype safety as far as deserializing JSON is concerned.\n", + "markdownDescription": "status_code: `string` \nModule: `http.handlers.static_response` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp#WeakString) \nThe HTTP status code to respond with. Can be an integer or,\nif needing to use a placeholder, a string.\n\nIf the status code is 103 (Early Hints), the response headers\nwill be written to the client immediately, the body will be\nignored, and the next handler will be invoked. This behavior\nis EXPERIMENTAL while RFC 8297 is a draft, and may be changed\nor removed.\n\n\nWeakString is a type that unmarshals any JSON value\nas a string literal, with the following exceptions:\n\n1. actual string values are decoded as strings; and\n2. null is decoded as empty string;\n\nand provides methods for getting the value as various\nprimitive types. However, using this type removes any\ntype safety as far as deserializing JSON is concerned. \n", "type": "string" } } @@ -3872,180 +4908,24 @@ "if": { "properties": { "handler": { - "const": "authentication" + "const": "metrics" } } }, "then": { - "$ref": "#/definitions/http.handlers.authentication" + "$ref": "#/definitions/http.handlers.metrics" } }, { "if": { "properties": { "handler": { - "const": "static_response" + "const": "rate_limit" } } }, "then": { - "$ref": "#/definitions/http.handlers.static_response" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "file_server" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.file_server" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "map" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.map" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "reverse_proxy" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.reverse_proxy" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "templates" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.templates" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "acme_server" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.acme_server" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "copy_response" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.copy_response" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "copy_response_headers" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.copy_response_headers" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "error" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.error" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "push" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.push" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "vars" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.vars" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "rewrite" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.rewrite" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "subroute" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.subroute" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "tracing" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.tracing" + "$ref": "#/definitions/http.handlers.rate_limit" } }, { @@ -4064,24 +4944,72 @@ "if": { "properties": { "handler": { - "const": "headers" + "const": "error" } } }, "then": { - "$ref": "#/definitions/http.handlers.headers" + "$ref": "#/definitions/http.handlers.error" } }, { "if": { "properties": { "handler": { - "const": "metrics" + "const": "map" } } }, "then": { - "$ref": "#/definitions/http.handlers.metrics" + "$ref": "#/definitions/http.handlers.map" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "push" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.push" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "rewrite" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.rewrite" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "cache" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.cache" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "copy_response" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.copy_response" } }, { @@ -4096,6 +5024,150 @@ "$ref": "#/definitions/http.handlers.request_body" } }, + { + "if": { + "properties": { + "handler": { + "const": "static_response" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.static_response" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "vars" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.vars" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "acme_server" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.acme_server" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "authenticator" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.authenticator" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "file_server" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.file_server" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "headers" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.headers" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "reverse_proxy" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.reverse_proxy" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "subroute" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.subroute" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "templates" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.templates" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "tracing" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.tracing" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "authentication" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.authentication" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "copy_response_headers" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.copy_response_headers" + } + }, { "properties": { "handler": { @@ -4103,25 +5175,28 @@ "markdownDescription": "key to identify `handle` module. \nhandler: `string` \nModule: `http.handlers`", "type": "string", "enum": [ - "authentication", - "static_response", - "file_server", - "map", - "reverse_proxy", - "templates", - "acme_server", - "copy_response", - "copy_response_headers", - "error", - "push", - "vars", - "rewrite", - "subroute", - "tracing", - "encode", - "headers", "metrics", - "request_body" + "rate_limit", + "encode", + "error", + "map", + "push", + "rewrite", + "cache", + "copy_response", + "request_body", + "static_response", + "vars", + "acme_server", + "authenticator", + "file_server", + "headers", + "reverse_proxy", + "subroute", + "templates", + "tracing", + "authentication", + "copy_response_headers" ] } } @@ -4221,48 +5296,12 @@ "if": { "properties": { "handler": { - "const": "reverse_proxy" + "const": "authentication" } } }, "then": { - "$ref": "#/definitions/http.handlers.reverse_proxy" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "templates" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.templates" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "acme_server" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.acme_server" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "copy_response" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.copy_response" + "$ref": "#/definitions/http.handlers.authentication" } }, { @@ -4277,18 +5316,6 @@ "$ref": "#/definitions/http.handlers.copy_response_headers" } }, - { - "if": { - "properties": { - "handler": { - "const": "error" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.error" - } - }, { "if": { "properties": { @@ -4301,6 +5328,138 @@ "$ref": "#/definitions/http.handlers.file_server" } }, + { + "if": { + "properties": { + "handler": { + "const": "headers" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.headers" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "reverse_proxy" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.reverse_proxy" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "subroute" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.subroute" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "templates" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.templates" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "tracing" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.tracing" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "metrics" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.metrics" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "rate_limit" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.rate_limit" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "cache" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.cache" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "copy_response" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.copy_response" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "encode" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.encode" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "error" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.error" + } + }, { "if": { "properties": { @@ -4329,60 +5488,36 @@ "if": { "properties": { "handler": { - "const": "vars" + "const": "rewrite" } } }, "then": { - "$ref": "#/definitions/http.handlers.vars" + "$ref": "#/definitions/http.handlers.rewrite" } }, { "if": { "properties": { "handler": { - "const": "tracing" + "const": "acme_server" } } }, "then": { - "$ref": "#/definitions/http.handlers.tracing" + "$ref": "#/definitions/http.handlers.acme_server" } }, { "if": { "properties": { "handler": { - "const": "encode" + "const": "authenticator" } } }, "then": { - "$ref": "#/definitions/http.handlers.encode" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "headers" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.headers" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "metrics" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.metrics" + "$ref": "#/definitions/http.handlers.authenticator" } }, { @@ -4397,42 +5532,6 @@ "$ref": "#/definitions/http.handlers.request_body" } }, - { - "if": { - "properties": { - "handler": { - "const": "rewrite" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.rewrite" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "subroute" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.subroute" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "authentication" - } - } - }, - "then": { - "$ref": "#/definitions/http.handlers.authentication" - } - }, { "if": { "properties": { @@ -4445,6 +5544,18 @@ "$ref": "#/definitions/http.handlers.static_response" } }, + { + "if": { + "properties": { + "handler": { + "const": "vars" + } + } + }, + "then": { + "$ref": "#/definitions/http.handlers.vars" + } + }, { "properties": { "handler": { @@ -4452,25 +5563,28 @@ "markdownDescription": "key to identify `handle` module. \nhandler: `string` \nModule: `http.handlers`", "type": "string", "enum": [ - "reverse_proxy", - "templates", - "acme_server", - "copy_response", + "authentication", "copy_response_headers", - "error", "file_server", + "headers", + "reverse_proxy", + "subroute", + "templates", + "tracing", + "metrics", + "rate_limit", + "cache", + "copy_response", + "encode", + "error", "map", "push", - "vars", - "tracing", - "encode", - "headers", - "metrics", - "request_body", "rewrite", - "subroute", - "authentication", - "static_response" + "acme_server", + "authenticator", + "request_body", + "static_response", + "vars" ] } } @@ -4542,8 +5656,8 @@ } }, "http.handlers.templates": { - "description": "templates: object\nModule: http.handlers.templates\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/templates#Templates\nTemplates is a middleware which executes response bodies as Go templates.\nThe syntax is documented in the Go standard library's\n[text/template package](https://golang.org/pkg/text/template/).\n\n⚠️ Template functions/actions are still experimental, so they are subject to change.\n\nCustom template functions can be registered by creating a plugin module under the `http.handlers.templates.functions.*` namespace that implements the `CustomFunctions` interface.\n\n[All Sprig functions](https://masterminds.github.io/sprig/) are supported.\n\nIn addition to the standard functions and the Sprig library, Caddy adds\nextra functions and data that are available to a template:\n\n##### `.Args`\n\nA slice of arguments passed to this page/context, for example as the result of a `include`.\n\n```\n{{index .Args 0}} // first argument\n```\n\n##### `.Cookie`\n\nGets the value of a cookie by name.\n\n```\n{{.Cookie \"cookiename\"}}\n```\n\n##### `env`\n\nGets an environment variable.\n\n```\n{{env \"VAR_NAME\"}}\n```\n\n##### `placeholder`\n\nGets an [placeholder variable](/docs/conventions#placeholders).\nThe braces (`{}`) have to be omitted.\n\n```\n{{placeholder \"http.request.uri.path\"}}\n{{placeholder \"http.error.status_code\"}}\n```\n\n##### `.Host`\n\nReturns the hostname portion (no port) of the Host header of the HTTP request.\n\n```\n{{.Host}}\n```\n\n##### `httpInclude`\n\nIncludes the contents of another file by making a virtual HTTP request (also known as a sub-request). The URI path must exist on the same virtual server because the request does not use sockets; instead, the request is crafted in memory and the handler is invoked directly for increased efficiency.\n\n```\n{{httpInclude \"/foo/bar?q=val\"}}\n```\n\n##### `import`\n\nImports the contents of another file and adds any template definitions to the template stack. If there are no defitions, the filepath will be the defition name. Any {{ define }} blocks will be accessible by {{ template }} or {{ block }}. Imports must happen before the template or block action is called\n\n**filename.html**\n```\n{{ define \"main\" }}\ncontent\n{{ end }}\n```\n\n**index.html**\n```\n{{ import \"/path/to/file.html\" }}\n{{ template \"main\" }}\n```\n\n##### `include`\n\nIncludes the contents of another file and renders in-place. Optionally can pass key-value pairs as arguments to be accessed by the included file.\n\n```\n{{include \"path/to/file.html\"}} // no arguments\n{{include \"path/to/file.html\" \"arg1\" 2 \"value 3\"}} // with arguments\n```\n\n##### `listFiles`\n\nReturns a list of the files in the given directory, which is relative to the template context's file root.\n\n```\n{{listFiles \"/mydir\"}}\n```\n\n##### `markdown`\n\nRenders the given Markdown text as HTML. This uses the\n[Goldmark](https://github.com/yuin/goldmark) library,\nwhich is CommonMark compliant. It also has these plugins\nenabled: Github Flavored Markdown, Footnote and syntax\nhighlighting provided by [Chroma](https://github.com/alecthomas/chroma).\n\n```\n{{markdown \"My _markdown_ text\"}}\n```\n\n##### `.RemoteIP`\n\nReturns the client's IP address.\n\n```\n{{.RemoteIP}}\n```\n\n##### `.Req`\n\nAccesses the current HTTP request, which has various fields, including:\n\n - `.Method` - the method\n - `.URL` - the URL, which in turn has component fields (Scheme, Host, Path, etc.)\n - `.Header` - the header fields\n - `.Host` - the Host or :authority header of the request\n\n```\n{{.Req.Header.Get \"User-Agent\"}}\n```\n\n##### `.OriginalReq`\n\nLike .Req, except it accesses the original HTTP request before rewrites or other internal modifications.\n\n##### `.RespHeader.Add`\n\nAdds a header field to the HTTP response.\n\n```\n{{.RespHeader.Add \"Field-Name\" \"val\"}}\n```\n\n##### `.RespHeader.Del`\n\nDeletes a header field on the HTTP response.\n\n```\n{{.RespHeader.Del \"Field-Name\"}}\n```\n\n##### `.RespHeader.Set`\n\nSets a header field on the HTTP response, replacing any existing value.\n\n```\n{{.RespHeader.Set \"Field-Name\" \"val\"}}\n```\n\n##### `splitFrontMatter`\n\nSplits front matter out from the body. Front matter is metadata that appears at the very beginning of a file or string. Front matter can be in YAML, TOML, or JSON formats:\n\n**TOML** front matter starts and ends with `+++`:\n\n```\n+++\ntemplate = \"blog\"\ntitle = \"Blog Homepage\"\nsitename = \"A Caddy site\"\n+++\n```\n\n**YAML** is surrounded by `---`:\n\n```\n---\ntemplate: blog\ntitle: Blog Homepage\nsitename: A Caddy site\n---\n```\n\n**JSON** is simply `{` and `}`:\n\n```\n{\n\t\"template\": \"blog\",\n\t\"title\": \"Blog Homepage\",\n\t\"sitename\": \"A Caddy site\"\n}\n```\n\nThe resulting front matter will be made available like so:\n\n- `.Meta` to access the metadata fields, for example: `{{$parsed.Meta.title}}`\n- `.Body` to access the body after the front matter, for example: `{{markdown $parsed.Body}}`\n\n##### `stripHTML`\n\nRemoves HTML from a string.\n\n```\n{{stripHTML \"Shows \u003cb\u003eonly\u003c/b\u003e text content\"}}\n```\n\n", - "markdownDescription": "templates: `object` \nModule: `http.handlers.templates` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/templates#Templates) \nTemplates is a middleware which executes response bodies as Go templates.\nThe syntax is documented in the Go standard library's\n[text/template package](https://golang.org/pkg/text/template/).\n\n⚠️ Template functions/actions are still experimental, so they are subject to change.\n\nCustom template functions can be registered by creating a plugin module under the `http.handlers.templates.functions.*` namespace that implements the `CustomFunctions` interface.\n\n[All Sprig functions](https://masterminds.github.io/sprig/) are supported.\n\nIn addition to the standard functions and the Sprig library, Caddy adds\nextra functions and data that are available to a template:\n\n##### `.Args`\n\nA slice of arguments passed to this page/context, for example as the result of a `include`.\n\n```\n{{index .Args 0}} // first argument\n```\n\n##### `.Cookie`\n\nGets the value of a cookie by name.\n\n```\n{{.Cookie \"cookiename\"}}\n```\n\n##### `env`\n\nGets an environment variable.\n\n```\n{{env \"VAR_NAME\"}}\n```\n\n##### `placeholder`\n\nGets an [placeholder variable](/docs/conventions#placeholders).\nThe braces (`{}`) have to be omitted.\n\n```\n{{placeholder \"http.request.uri.path\"}}\n{{placeholder \"http.error.status_code\"}}\n```\n\n##### `.Host`\n\nReturns the hostname portion (no port) of the Host header of the HTTP request.\n\n```\n{{.Host}}\n```\n\n##### `httpInclude`\n\nIncludes the contents of another file by making a virtual HTTP request (also known as a sub-request). The URI path must exist on the same virtual server because the request does not use sockets; instead, the request is crafted in memory and the handler is invoked directly for increased efficiency.\n\n```\n{{httpInclude \"/foo/bar?q=val\"}}\n```\n\n##### `import`\n\nImports the contents of another file and adds any template definitions to the template stack. If there are no defitions, the filepath will be the defition name. Any {{ define }} blocks will be accessible by {{ template }} or {{ block }}. Imports must happen before the template or block action is called\n\n**filename.html**\n```\n{{ define \"main\" }}\ncontent\n{{ end }}\n```\n\n**index.html**\n```\n{{ import \"/path/to/file.html\" }}\n{{ template \"main\" }}\n```\n\n##### `include`\n\nIncludes the contents of another file and renders in-place. Optionally can pass key-value pairs as arguments to be accessed by the included file.\n\n```\n{{include \"path/to/file.html\"}} // no arguments\n{{include \"path/to/file.html\" \"arg1\" 2 \"value 3\"}} // with arguments\n```\n\n##### `listFiles`\n\nReturns a list of the files in the given directory, which is relative to the template context's file root.\n\n```\n{{listFiles \"/mydir\"}}\n```\n\n##### `markdown`\n\nRenders the given Markdown text as HTML. This uses the\n[Goldmark](https://github.com/yuin/goldmark) library,\nwhich is CommonMark compliant. It also has these plugins\nenabled: Github Flavored Markdown, Footnote and syntax\nhighlighting provided by [Chroma](https://github.com/alecthomas/chroma).\n\n```\n{{markdown \"My _markdown_ text\"}}\n```\n\n##### `.RemoteIP`\n\nReturns the client's IP address.\n\n```\n{{.RemoteIP}}\n```\n\n##### `.Req`\n\nAccesses the current HTTP request, which has various fields, including:\n\n - `.Method` - the method\n - `.URL` - the URL, which in turn has component fields (Scheme, Host, Path, etc.)\n - `.Header` - the header fields\n - `.Host` - the Host or :authority header of the request\n\n```\n{{.Req.Header.Get \"User-Agent\"}}\n```\n\n##### `.OriginalReq`\n\nLike .Req, except it accesses the original HTTP request before rewrites or other internal modifications.\n\n##### `.RespHeader.Add`\n\nAdds a header field to the HTTP response.\n\n```\n{{.RespHeader.Add \"Field-Name\" \"val\"}}\n```\n\n##### `.RespHeader.Del`\n\nDeletes a header field on the HTTP response.\n\n```\n{{.RespHeader.Del \"Field-Name\"}}\n```\n\n##### `.RespHeader.Set`\n\nSets a header field on the HTTP response, replacing any existing value.\n\n```\n{{.RespHeader.Set \"Field-Name\" \"val\"}}\n```\n\n##### `splitFrontMatter`\n\nSplits front matter out from the body. Front matter is metadata that appears at the very beginning of a file or string. Front matter can be in YAML, TOML, or JSON formats:\n\n**TOML** front matter starts and ends with `+++`:\n\n```\n+++\ntemplate = \"blog\"\ntitle = \"Blog Homepage\"\nsitename = \"A Caddy site\"\n+++\n```\n\n**YAML** is surrounded by `---`:\n\n```\n---\ntemplate: blog\ntitle: Blog Homepage\nsitename: A Caddy site\n---\n```\n\n**JSON** is simply `{` and `}`:\n\n```\n{\n\t\"template\": \"blog\",\n\t\"title\": \"Blog Homepage\",\n\t\"sitename\": \"A Caddy site\"\n}\n```\n\nThe resulting front matter will be made available like so:\n\n- `.Meta` to access the metadata fields, for example: `{{$parsed.Meta.title}}`\n- `.Body` to access the body after the front matter, for example: `{{markdown $parsed.Body}}`\n\n##### `stripHTML`\n\nRemoves HTML from a string.\n\n```\n{{stripHTML \"Shows \u003cb\u003eonly\u003c/b\u003e text content\"}}\n```\n \n", + "description": "templates: object\nModule: http.handlers.templates\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/templates#Templates", + "markdownDescription": "templates: `object` \nModule: `http.handlers.templates` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/templates#Templates)", "type": "object", "properties": { "delimiters": { @@ -4597,10 +5711,14 @@ "type": "string" }, "http.matchers.file": { - "description": "file: object\nModule: http.matchers.file\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/fileserver#MatchFile\nMatchFile is an HTTP request matcher that can match\nrequests based upon file existence.\n\nUpon matching, three new placeholders will be made\navailable:\n\n- `{http.matchers.file.relative}` The root-relative\npath of the file. This is often useful when rewriting\nrequests.\n- `{http.matchers.file.absolute}` The absolute path\nof the matched file.\n- `{http.matchers.file.type}` Set to \"directory\" if\nthe matched file is a directory, \"file\" otherwise.\n- `{http.matchers.file.remainder}` Set to the remainder\nof the path if the path was split by `split_path`.\n\n", - "markdownDescription": "file: `object` \nModule: `http.matchers.file` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/fileserver#MatchFile) \nMatchFile is an HTTP request matcher that can match\nrequests based upon file existence.\n\nUpon matching, three new placeholders will be made\navailable:\n\n- `{http.matchers.file.relative}` The root-relative\npath of the file. This is often useful when rewriting\nrequests.\n- `{http.matchers.file.absolute}` The absolute path\nof the matched file.\n- `{http.matchers.file.type}` Set to \"directory\" if\nthe matched file is a directory, \"file\" otherwise.\n- `{http.matchers.file.remainder}` Set to the remainder\nof the path if the path was split by `split_path`.\n \n", + "description": "file: object\nModule: http.matchers.file\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/fileserver#MatchFile\nMatchFile is an HTTP request matcher that can match\nrequests based upon file existence.\n\nUpon matching, three new placeholders will be made\navailable:\n\n- `{http.matchers.file.relative}` The root-relative\npath of the file. This is often useful when rewriting\nrequests.\n- `{http.matchers.file.absolute}` The absolute path\nof the matched file.\n- `{http.matchers.file.type}` Set to \"directory\" if\nthe matched file is a directory, \"file\" otherwise.\n- `{http.matchers.file.remainder}` Set to the remainder\nof the path if the path was split by `split_path`.\n\nEven though file matching may depend on the OS path\nseparator, the placeholder values always use /.\n\n", + "markdownDescription": "file: `object` \nModule: `http.matchers.file` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/fileserver#MatchFile) \nMatchFile is an HTTP request matcher that can match\nrequests based upon file existence.\n\nUpon matching, three new placeholders will be made\navailable:\n\n- `{http.matchers.file.relative}` The root-relative\npath of the file. This is often useful when rewriting\nrequests.\n- `{http.matchers.file.absolute}` The absolute path\nof the matched file.\n- `{http.matchers.file.type}` Set to \"directory\" if\nthe matched file is a directory, \"file\" otherwise.\n- `{http.matchers.file.remainder}` Set to the remainder\nof the path if the path was split by `split_path`.\n\nEven though file matching may depend on the OS path\nseparator, the placeholder values always use /.\n \n", "type": "object", "properties": { + "file_system": { + "description": "file_system: any\nModule: caddy.fs\nThe file system implementation to use. By default, the\nlocal disk file system will be used.\n", + "markdownDescription": "file_system: `any` \nModule: `caddy.fs` \nThe file system implementation to use. By default, the\nlocal disk file system will be used. \n" + }, "root": { "description": "root: string\nModule: http.matchers.file\nThe root directory, used for creating absolute\nfile paths, and required when working with\nrelative paths; if not specified, `{http.vars.root}`\nwill be used, if set; otherwise, the current\ndirectory is assumed. Accepts placeholders.\n", "markdownDescription": "root: `string` \nModule: `http.matchers.file` \nThe root directory, used for creating absolute\nfile paths, and required when working with\nrelative paths; if not specified, `{http.vars.root}`\nwill be used, if set; otherwise, the current\ndirectory is assumed. Accepts placeholders. \n", @@ -4733,16 +5851,16 @@ } }, "http.matchers.path": { - "description": "path: array\nModule: http.matchers.path\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp#MatchPath\nMatchPath matches requests by the URI's path (case-insensitive). Path\nmatches are exact, but wildcards may be used:\n\n- At the end, for a prefix match (`/prefix/*`)\n- At the beginning, for a suffix match (`*.suffix`)\n- On both sides, for a substring match (`*/contains/*`)\n- In the middle, for a globular match (`/accounts/*/info`)\n\nThis matcher is fast, so it does not support regular expressions or\ncapture groups. For slower but more powerful matching, use the\npath_regexp matcher.\n\n", - "markdownDescription": "path: `array` \nModule: `http.matchers.path` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp#MatchPath) \nMatchPath matches requests by the URI's path (case-insensitive). Path\nmatches are exact, but wildcards may be used:\n\n- At the end, for a prefix match (`/prefix/*`)\n- At the beginning, for a suffix match (`*.suffix`)\n- On both sides, for a substring match (`*/contains/*`)\n- In the middle, for a globular match (`/accounts/*/info`)\n\nThis matcher is fast, so it does not support regular expressions or\ncapture groups. For slower but more powerful matching, use the\npath_regexp matcher.\n \n", + "description": "path: array\nModule: http.matchers.path\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp#MatchPath\nMatchPath case-insensitively matches requests by the URI's path. Path\nmatching is exact, not prefix-based, giving you more control and clarity\nover matching. Wildcards (`*`) may be used:\n\n- At the end only, for a prefix match (`/prefix/*`)\n- At the beginning only, for a suffix match (`*.suffix`)\n- On both sides only, for a substring match (`*/contains/*`)\n- In the middle, for a globular match (`/accounts/*/info`)\n\nSlashes are significant; i.e. `/foo*` matches `/foo`, `/foo/`, `/foo/bar`,\nand `/foobar`; but `/foo/*` does not match `/foo` or `/foobar`. Valid\npaths start with a slash `/`.\n\nBecause there are, in general, multiple possible escaped forms of any\npath, path matchers operate in unescaped space; that is, path matchers\nshould be written in their unescaped form to prevent ambiguities and\npossible security issues, as all request paths will be normalized to\ntheir unescaped forms before matcher evaluation.\n\nHowever, escape sequences in a match pattern are supported; they are\ncompared with the request's raw/escaped path for those bytes only.\nIn other words, a matcher of `/foo%2Fbar` will match a request path\nof precisely `/foo%2Fbar`, but not `/foo/bar`. It follows that matching\nthe literal percent sign (%) in normalized space can be done using the\nescaped form, `%25`.\n\nEven though wildcards (`*`) operate in the normalized space, the special\nescaped wildcard (`%*`), which is not a valid escape sequence, may be\nused in place of a span that should NOT be decoded; that is, `/bands/%*`\nwill match `/bands/AC%2fDC` whereas `/bands/*` will not.\n\nEven though path matching is done in normalized space, the special\nwildcard `%*` may be used in place of a span that should NOT be decoded;\nthat is, `/bands/%*/` will match `/bands/AC%2fDC/` whereas `/bands/*/`\nwill not.\n\nThis matcher is fast, so it does not support regular expressions or\ncapture groups. For slower but more powerful matching, use the\npath_regexp matcher. (Note that due to the special treatment of\nescape sequences in matcher patterns, they may perform slightly slower\nin high-traffic environments.)\n\n", + "markdownDescription": "path: `array` \nModule: `http.matchers.path` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp#MatchPath) \nMatchPath case-insensitively matches requests by the URI's path. Path\nmatching is exact, not prefix-based, giving you more control and clarity\nover matching. Wildcards (`*`) may be used:\n\n- At the end only, for a prefix match (`/prefix/*`)\n- At the beginning only, for a suffix match (`*.suffix`)\n- On both sides only, for a substring match (`*/contains/*`)\n- In the middle, for a globular match (`/accounts/*/info`)\n\nSlashes are significant; i.e. `/foo*` matches `/foo`, `/foo/`, `/foo/bar`,\nand `/foobar`; but `/foo/*` does not match `/foo` or `/foobar`. Valid\npaths start with a slash `/`.\n\nBecause there are, in general, multiple possible escaped forms of any\npath, path matchers operate in unescaped space; that is, path matchers\nshould be written in their unescaped form to prevent ambiguities and\npossible security issues, as all request paths will be normalized to\ntheir unescaped forms before matcher evaluation.\n\nHowever, escape sequences in a match pattern are supported; they are\ncompared with the request's raw/escaped path for those bytes only.\nIn other words, a matcher of `/foo%2Fbar` will match a request path\nof precisely `/foo%2Fbar`, but not `/foo/bar`. It follows that matching\nthe literal percent sign (%) in normalized space can be done using the\nescaped form, `%25`.\n\nEven though wildcards (`*`) operate in the normalized space, the special\nescaped wildcard (`%*`), which is not a valid escape sequence, may be\nused in place of a span that should NOT be decoded; that is, `/bands/%*`\nwill match `/bands/AC%2fDC` whereas `/bands/*` will not.\n\nEven though path matching is done in normalized space, the special\nwildcard `%*` may be used in place of a span that should NOT be decoded;\nthat is, `/bands/%*/` will match `/bands/AC%2fDC/` whereas `/bands/*/`\nwill not.\n\nThis matcher is fast, so it does not support regular expressions or\ncapture groups. For slower but more powerful matching, use the\npath_regexp matcher. (Note that due to the special treatment of\nescape sequences in matcher patterns, they may perform slightly slower\nin high-traffic environments.)\n \n", "type": "array", "items": { "type": "string" } }, "http.matchers.path_regexp": { - "description": "path_regexp: object\nModule: http.matchers.path_regexp\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp#MatchPathRE\nMatchPathRE matches requests by a regular expression on the URI's path.\n\nUpon a match, it adds placeholders to the request: `{http.regexp.name.capture_group}`\nwhere `name` is the regular expression's name, and `capture_group` is either\nthe named or positional capture group from the expression itself. If no name\nis given, then the placeholder omits the name: `{http.regexp.capture_group}`\n(potentially leading to collisions).\n\n", - "markdownDescription": "path_regexp: `object` \nModule: `http.matchers.path_regexp` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp#MatchPathRE) \nMatchPathRE matches requests by a regular expression on the URI's path.\n\nUpon a match, it adds placeholders to the request: `{http.regexp.name.capture_group}`\nwhere `name` is the regular expression's name, and `capture_group` is either\nthe named or positional capture group from the expression itself. If no name\nis given, then the placeholder omits the name: `{http.regexp.capture_group}`\n(potentially leading to collisions).\n \n", + "description": "path_regexp: object\nModule: http.matchers.path_regexp\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp#MatchPathRE\nMatchPathRE matches requests by a regular expression on the URI's path.\nPath matching is performed in the unescaped (decoded) form of the path.\n\nUpon a match, it adds placeholders to the request: `{http.regexp.name.capture_group}`\nwhere `name` is the regular expression's name, and `capture_group` is either\nthe named or positional capture group from the expression itself. If no name\nis given, then the placeholder omits the name: `{http.regexp.capture_group}`\n(potentially leading to collisions).\n\n", + "markdownDescription": "path_regexp: `object` \nModule: `http.matchers.path_regexp` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp#MatchPathRE) \nMatchPathRE matches requests by a regular expression on the URI's path.\nPath matching is performed in the unescaped (decoded) form of the path.\n\nUpon a match, it adds placeholders to the request: `{http.regexp.name.capture_group}`\nwhere `name` is the regular expression's name, and `capture_group` is either\nthe named or positional capture group from the expression itself. If no name\nis given, then the placeholder omits the name: `{http.regexp.capture_group}`\n(potentially leading to collisions).\n \n", "type": "object", "properties": { "name": { @@ -4763,8 +5881,8 @@ "type": "string" }, "http.matchers.query": { - "description": "query: object\nModule: http.matchers.query\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp#MatchQuery\nMatchQuery matches requests by the URI's query string. It takes a JSON object\nkeyed by the query keys, with an array of string values to match for that key.\nQuery key matches are exact, but wildcards may be used for value matches. Both\nkeys and values may be placeholders.\nAn example of the structure to match `?key=value\u0026topic=api\u0026query=something` is:\n\n```json\n{\n\t\"key\": [\"value\"],\n\t\"topic\": [\"api\"],\n\t\"query\": [\"*\"]\n}\n```\n\n", - "markdownDescription": "query: `object` \nModule: `http.matchers.query` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp#MatchQuery) \nMatchQuery matches requests by the URI's query string. It takes a JSON object\nkeyed by the query keys, with an array of string values to match for that key.\nQuery key matches are exact, but wildcards may be used for value matches. Both\nkeys and values may be placeholders.\nAn example of the structure to match `?key=value\u0026topic=api\u0026query=something` is:\n\n```json\n{\n\t\"key\": [\"value\"],\n\t\"topic\": [\"api\"],\n\t\"query\": [\"*\"]\n}\n```\n \n", + "description": "query: object\nModule: http.matchers.query\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp#MatchQuery\nMatchQuery matches requests by the URI's query string. It takes a JSON object\nkeyed by the query keys, with an array of string values to match for that key.\nQuery key matches are exact, but wildcards may be used for value matches. Both\nkeys and values may be placeholders.\nAn example of the structure to match `?key=value\u0026topic=api\u0026query=something` is:\n\n```json\n{\n\t\"key\": [\"value\"],\n\t\"topic\": [\"api\"],\n\t\"query\": [\"*\"]\n}\n```\n\nInvalid query strings, including those with bad escapings or illegal characters\nlike semicolons, will fail to parse and thus fail to match.\n\n", + "markdownDescription": "query: `object` \nModule: `http.matchers.query` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp#MatchQuery) \nMatchQuery matches requests by the URI's query string. It takes a JSON object\nkeyed by the query keys, with an array of string values to match for that key.\nQuery key matches are exact, but wildcards may be used for value matches. Both\nkeys and values may be placeholders.\nAn example of the structure to match `?key=value\u0026topic=api\u0026query=something` is:\n\n```json\n{\n\t\"key\": [\"value\"],\n\t\"topic\": [\"api\"],\n\t\"query\": [\"*\"]\n}\n```\n\nInvalid query strings, including those with bad escapings or illegal characters\nlike semicolons, will fail to parse and thus fail to match.\n \n", "type": "object", "additionalProperties": { "type": "array", @@ -4796,8 +5914,8 @@ } }, "http.matchers.vars": { - "description": "vars: object\nModule: http.matchers.vars\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp#VarsMatcher\nVarsMatcher is an HTTP request matcher which can match\nrequests based on variables in the context. The key is\nthe name of the variable, and the values are possible\nvalues the variable can be in order to match (OR'ed).\n\nAs a special case, this matcher can also match on\nplaceholders generally. If the key is not an HTTP chain\nvariable, it will be checked to see if it is a\nplaceholder name, and if so, will compare its value.\n\n", - "markdownDescription": "vars: `object` \nModule: `http.matchers.vars` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp#VarsMatcher) \nVarsMatcher is an HTTP request matcher which can match\nrequests based on variables in the context. The key is\nthe name of the variable, and the values are possible\nvalues the variable can be in order to match (OR'ed).\n\nAs a special case, this matcher can also match on\nplaceholders generally. If the key is not an HTTP chain\nvariable, it will be checked to see if it is a\nplaceholder name, and if so, will compare its value.\n \n", + "description": "vars: object\nModule: http.matchers.vars\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp#VarsMatcher\nVarsMatcher is an HTTP request matcher which can match\nrequests based on variables in the context or placeholder\nvalues. The key is the placeholder or name of the variable,\nand the values are possible values the variable can be in\norder to match (logical OR'ed).\n\nIf the key is surrounded by `{ }` it is assumed to be a\nplaceholder. Otherwise, it will be considered a variable\nname.\n\nPlaceholders in the keys are not expanded, but\nplaceholders in the values are.\n\n", + "markdownDescription": "vars: `object` \nModule: `http.matchers.vars` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp#VarsMatcher) \nVarsMatcher is an HTTP request matcher which can match\nrequests based on variables in the context or placeholder\nvalues. The key is the placeholder or name of the variable,\nand the values are possible values the variable can be in\norder to match (logical OR'ed).\n\nIf the key is surrounded by `{ }` it is assumed to be a\nplaceholder. Otherwise, it will be considered a variable\nname.\n\nPlaceholders in the keys are not expanded, but\nplaceholders in the values are.\n \n", "type": "object", "additionalProperties": { "type": "array", @@ -4925,6 +6043,11 @@ "markdownDescription": "fastcgi: `object` \nModule: `http.reverse_proxy.transport.fastcgi` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/reverseproxy/fastcgi#Transport)", "type": "object", "properties": { + "capture_stderr": { + "description": "capture_stderr: boolean\nModule: http.reverse_proxy.transport.fastcgi\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/reverseproxy/fastcgi#Transport", + "markdownDescription": "capture_stderr: `boolean` \nModule: `http.reverse_proxy.transport.fastcgi` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/reverseproxy/fastcgi#Transport)", + "type": "boolean" + }, "dial_timeout": { "description": "dial_timeout: number\nModule: http.reverse_proxy.transport.fastcgi\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/reverseproxy/fastcgi#Transport", "markdownDescription": "dial_timeout: `number` \nModule: `http.reverse_proxy.transport.fastcgi` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/reverseproxy/fastcgi#Transport)", @@ -5038,6 +6161,11 @@ "markdownDescription": "read_buffer_size: `number` \nModule: `http.reverse_proxy.transport.http` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/reverseproxy#HTTPTransport)", "type": "number" }, + "read_timeout": { + "description": "read_timeout: number\nModule: http.reverse_proxy.transport.http\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/reverseproxy#HTTPTransport", + "markdownDescription": "read_timeout: `number` \nModule: `http.reverse_proxy.transport.http` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/reverseproxy#HTTPTransport)", + "type": "number" + }, "resolver": { "description": "resolver: object\nModule: http.reverse_proxy.transport.http\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/reverseproxy#HTTPTransport", "markdownDescription": "resolver: `object` \nModule: `http.reverse_proxy.transport.http` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/reverseproxy#HTTPTransport)", @@ -5136,6 +6264,11 @@ "description": "write_buffer_size: number\nModule: http.reverse_proxy.transport.http\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/reverseproxy#HTTPTransport", "markdownDescription": "write_buffer_size: `number` \nModule: `http.reverse_proxy.transport.http` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/reverseproxy#HTTPTransport)", "type": "number" + }, + "write_timeout": { + "description": "write_timeout: number\nModule: http.reverse_proxy.transport.http\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/reverseproxy#HTTPTransport", + "markdownDescription": "write_timeout: `number` \nModule: `http.reverse_proxy.transport.http` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/reverseproxy#HTTPTransport)", + "type": "number" } } }, @@ -5186,6 +6319,75 @@ } } }, + "http.reverse_proxy.upstreams.multi": { + "description": "multi: object\nModule: http.reverse_proxy.upstreams.multi\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/reverseproxy#MultiUpstreams", + "markdownDescription": "multi: `object` \nModule: `http.reverse_proxy.upstreams.multi` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/reverseproxy#MultiUpstreams)", + "type": "object", + "properties": { + "sources": { + "description": "sources: array\nModule: http.reverse_proxy.upstreams", + "markdownDescription": "sources: `array` \nModule: `http.reverse_proxy.upstreams`", + "type": "array", + "items": { + "required": [ + "source" + ], + "allOf": [ + { + "if": { + "properties": { + "source": { + "const": "a" + } + } + }, + "then": { + "$ref": "#/definitions/http.reverse_proxy.upstreams.a" + } + }, + { + "if": { + "properties": { + "source": { + "const": "multi" + } + } + }, + "then": { + "$ref": "#/definitions/http.reverse_proxy.upstreams.multi" + } + }, + { + "if": { + "properties": { + "source": { + "const": "srv" + } + } + }, + "then": { + "$ref": "#/definitions/http.reverse_proxy.upstreams.srv" + } + }, + { + "properties": { + "source": { + "description": "key to identify sources module.\nsource: string\nModule: http.reverse_proxy.upstreams", + "markdownDescription": "key to identify `sources` module. \nsource: `string` \nModule: `http.reverse_proxy.upstreams`", + "type": "string", + "enum": [ + "a", + "multi", + "srv" + ] + } + } + } + ] + } + } + } + }, "http.reverse_proxy.upstreams.srv": { "description": "srv: object\nModule: http.reverse_proxy.upstreams.srv\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/reverseproxy#SRVUpstreams", "markdownDescription": "srv: `object` \nModule: `http.reverse_proxy.upstreams.srv` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddyhttp/reverseproxy#SRVUpstreams)", @@ -5277,18 +6479,6 @@ "handler" ], "allOf": [ - { - "if": { - "properties": { - "handler": { - "const": "throttle" - } - } - }, - "then": { - "$ref": "#/definitions/layer4.handlers.throttle" - } - }, { "if": { "properties": { @@ -5361,6 +6551,18 @@ "$ref": "#/definitions/layer4.handlers.tee" } }, + { + "if": { + "properties": { + "handler": { + "const": "throttle" + } + } + }, + "then": { + "$ref": "#/definitions/layer4.handlers.throttle" + } + }, { "properties": { "handler": { @@ -5368,13 +6570,13 @@ "markdownDescription": "key to identify `handle` module. \nhandler: `string` \nModule: `layer4.handlers`", "type": "string", "enum": [ - "throttle", "tls", "echo", "proxy", "proxy_protocol", "subroute", - "tee" + "tee", + "throttle" ] } } @@ -5493,42 +6695,6 @@ "policy" ], "allOf": [ - { - "if": { - "properties": { - "policy": { - "const": "random" - } - } - }, - "then": { - "$ref": "#/definitions/layer4.proxy.selection_policies.random" - } - }, - { - "if": { - "properties": { - "policy": { - "const": "random_choose" - } - } - }, - "then": { - "$ref": "#/definitions/layer4.proxy.selection_policies.random_choose" - } - }, - { - "if": { - "properties": { - "policy": { - "const": "round_robin" - } - } - }, - "then": { - "$ref": "#/definitions/layer4.proxy.selection_policies.round_robin" - } - }, { "if": { "properties": { @@ -5565,6 +6731,42 @@ "$ref": "#/definitions/layer4.proxy.selection_policies.least_conn" } }, + { + "if": { + "properties": { + "policy": { + "const": "random" + } + } + }, + "then": { + "$ref": "#/definitions/layer4.proxy.selection_policies.random" + } + }, + { + "if": { + "properties": { + "policy": { + "const": "random_choose" + } + } + }, + "then": { + "$ref": "#/definitions/layer4.proxy.selection_policies.random_choose" + } + }, + { + "if": { + "properties": { + "policy": { + "const": "round_robin" + } + } + }, + "then": { + "$ref": "#/definitions/layer4.proxy.selection_policies.round_robin" + } + }, { "properties": { "policy": { @@ -5572,12 +6774,12 @@ "markdownDescription": "key to identify `selection` module. \npolicy: `string` \nModule: `layer4.proxy.selection_policies`", "type": "string", "enum": [ - "random", - "random_choose", - "round_robin", "first", "ip_hash", - "least_conn" + "least_conn", + "random", + "random_choose", + "round_robin" ] } } @@ -5646,10 +6848,12 @@ "type": "string" }, "except_ports": { - "description": "except_ports: array\nModule: layer4.handlers.proxy\nhttps://pkg.go.dev/github.com/mholt/caddy-l4/modules/l4proxy#Handler", - "markdownDescription": "except_ports: `array` \nModule: `layer4.handlers.proxy` \n[godoc](https://pkg.go.dev/github.com/mholt/caddy-l4/modules/l4proxy#Handler)", + "description": "except_ports: array\nModule: layer4.handlers.proxy\nSkip TLS ports specifies a list of upstream ports on which TLS should not be\nattempted even if it is configured. Handy when using dynamic upstreams that\nreturn HTTP and HTTPS endpoints too.\nWhen specified, TLS will automatically be configured on the transport.\nThe value can be a list of any valid tcp port numbers, default empty.\n", + "markdownDescription": "except_ports: `array` \nModule: `layer4.handlers.proxy` \nSkip TLS ports specifies a list of upstream ports on which TLS should not be\nattempted even if it is configured. Handy when using dynamic upstreams that\nreturn HTTP and HTTPS endpoints too.\nWhen specified, TLS will automatically be configured on the transport.\nThe value can be a list of any valid tcp port numbers, default empty. \n", "type": "array", "items": { + "description": "Skip TLS ports specifies a list of upstream ports on which TLS should not be\nattempted even if it is configured. Handy when using dynamic upstreams that\nreturn HTTP and HTTPS endpoints too.\nWhen specified, TLS will automatically be configured on the transport.\nThe value can be a list of any valid tcp port numbers, default empty.\n", + "markdownDescription": "Skip TLS ports specifies a list of upstream ports on which TLS should not be\nattempted even if it is configured. Handy when using dynamic upstreams that\nreturn HTTP and HTTPS endpoints too.\nWhen specified, TLS will automatically be configured on the transport.\nThe value can be a list of any valid tcp port numbers, default empty. \n", "type": "string" } }, @@ -5664,8 +6868,8 @@ "type": "boolean" }, "renegotiation": { - "description": "renegotiation: string\nModule: layer4.handlers.proxy\nhttps://pkg.go.dev/github.com/mholt/caddy-l4/modules/l4proxy#Handler", - "markdownDescription": "renegotiation: `string` \nModule: `layer4.handlers.proxy` \n[godoc](https://pkg.go.dev/github.com/mholt/caddy-l4/modules/l4proxy#Handler)", + "description": "renegotiation: string\nModule: layer4.handlers.proxy\nTLS renegotiation level. TLS renegotiation is the act of performing\nsubsequent handshakes on a connection after the first.\nThe level can be:\n - \"never\": (the default) disables renegotiation.\n - \"once\": allows a remote server to request renegotiation once per connection.\n - \"freely\": allows a remote server to repeatedly request renegotiation.\n", + "markdownDescription": "renegotiation: `string` \nModule: `layer4.handlers.proxy` \nTLS renegotiation level. TLS renegotiation is the act of performing\nsubsequent handshakes on a connection after the first.\nThe level can be:\n - \"never\": (the default) disables renegotiation.\n - \"once\": allows a remote server to request renegotiation once per connection.\n - \"freely\": allows a remote server to repeatedly request renegotiation. \n", "type": "string" }, "root_ca_pem_files": { @@ -5689,8 +6893,8 @@ } }, "server_name": { - "description": "server_name: string\nModule: layer4.handlers.proxy\nThe server name (SNI) to use in TLS handshakes.\n", - "markdownDescription": "server_name: `string` \nModule: `layer4.handlers.proxy` \nThe server name (SNI) to use in TLS handshakes. \n", + "description": "server_name: string\nModule: layer4.handlers.proxy\nThe server name used when verifying the certificate received in the TLS\nhandshake. By default, this will use the upstream address' host part.\nYou only need to override this if your upstream address does not match the\ncertificate the upstream is likely to use. For example if the upstream\naddress is an IP address, then you would need to configure this to the\nhostname being served by the upstream server. Currently, this does not\nsupport placeholders because the TLS config is not provisioned on each\nconnection, so a static value must be used.\n", + "markdownDescription": "server_name: `string` \nModule: `layer4.handlers.proxy` \nThe server name used when verifying the certificate received in the TLS\nhandshake. By default, this will use the upstream address' host part.\nYou only need to override this if your upstream address does not match the\ncertificate the upstream is likely to use. For example if the upstream\naddress is an IP address, then you would need to configure this to the\nhostname being served by the upstream server. Currently, this does not\nsupport placeholders because the TLS config is not provisioned on each\nconnection, so a static value must be used. \n", "type": "string" } } @@ -5743,30 +6947,6 @@ "handler" ], "allOf": [ - { - "if": { - "properties": { - "handler": { - "const": "echo" - } - } - }, - "then": { - "$ref": "#/definitions/layer4.handlers.echo" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "proxy" - } - } - }, - "then": { - "$ref": "#/definitions/layer4.handlers.proxy" - } - }, { "if": { "properties": { @@ -5827,6 +7007,30 @@ "$ref": "#/definitions/layer4.handlers.tls" } }, + { + "if": { + "properties": { + "handler": { + "const": "echo" + } + } + }, + "then": { + "$ref": "#/definitions/layer4.handlers.echo" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "proxy" + } + } + }, + "then": { + "$ref": "#/definitions/layer4.handlers.proxy" + } + }, { "properties": { "handler": { @@ -5834,13 +7038,13 @@ "markdownDescription": "key to identify `handle` module. \nhandler: `string` \nModule: `layer4.handlers`", "type": "string", "enum": [ - "echo", - "proxy", "proxy_protocol", "subroute", "tee", "throttle", - "tls" + "tls", + "echo", + "proxy" ] } } @@ -5896,6 +7100,42 @@ "handler" ], "allOf": [ + { + "if": { + "properties": { + "handler": { + "const": "echo" + } + } + }, + "then": { + "$ref": "#/definitions/layer4.handlers.echo" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "proxy" + } + } + }, + "then": { + "$ref": "#/definitions/layer4.handlers.proxy" + } + }, + { + "if": { + "properties": { + "handler": { + "const": "proxy_protocol" + } + } + }, + "then": { + "$ref": "#/definitions/layer4.handlers.proxy_protocol" + } + }, { "if": { "properties": { @@ -5944,42 +7184,6 @@ "$ref": "#/definitions/layer4.handlers.tls" } }, - { - "if": { - "properties": { - "handler": { - "const": "echo" - } - } - }, - "then": { - "$ref": "#/definitions/layer4.handlers.echo" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "proxy" - } - } - }, - "then": { - "$ref": "#/definitions/layer4.handlers.proxy" - } - }, - { - "if": { - "properties": { - "handler": { - "const": "proxy_protocol" - } - } - }, - "then": { - "$ref": "#/definitions/layer4.handlers.proxy_protocol" - } - }, { "properties": { "handler": { @@ -5987,13 +7191,13 @@ "markdownDescription": "key to identify `branch` module. \nhandler: `string` \nModule: `layer4.handlers`", "type": "string", "enum": [ + "echo", + "proxy", + "proxy_protocol", "subroute", "tee", "throttle", - "tls", - "echo", - "proxy", - "proxy_protocol" + "tls" ] } } @@ -6152,20 +7356,22 @@ } }, "trusted_leaf_certs": { - "description": "trusted_leaf_certs: array\nModule: layer4.handlers.tls\nA list of base64 DER-encoded client leaf certs\nto accept. If this list is not empty, client certs\nwhich are not in this list will be rejected.\n", - "markdownDescription": "trusted_leaf_certs: `array` \nModule: `layer4.handlers.tls` \nA list of base64 DER-encoded client leaf certs\nto accept. If this list is not empty, client certs\nwhich are not in this list will be rejected. \n", + "description": "trusted_leaf_certs: array\nModule: layer4.handlers.tls\nDEPRECATED: This field is deprecated and will be removed in\na future version. Please use the `validators` field instead\nwith the tls.client_auth.leaf module instead.\n\nA list of base64 DER-encoded client leaf certs\nto accept. If this list is not empty, client certs\nwhich are not in this list will be rejected.\n", + "markdownDescription": "trusted_leaf_certs: `array` \nModule: `layer4.handlers.tls` \nDEPRECATED: This field is deprecated and will be removed in\na future version. Please use the `validators` field instead\nwith the tls.client_auth.leaf module instead.\n\nA list of base64 DER-encoded client leaf certs\nto accept. If this list is not empty, client certs\nwhich are not in this list will be rejected. \n", "type": "array", "items": { - "description": "A list of base64 DER-encoded client leaf certs\nto accept. If this list is not empty, client certs\nwhich are not in this list will be rejected.\n", - "markdownDescription": "A list of base64 DER-encoded client leaf certs\nto accept. If this list is not empty, client certs\nwhich are not in this list will be rejected. \n", + "description": "DEPRECATED: This field is deprecated and will be removed in\na future version. Please use the `validators` field instead\nwith the tls.client_auth.leaf module instead.\n\nA list of base64 DER-encoded client leaf certs\nto accept. If this list is not empty, client certs\nwhich are not in this list will be rejected.\n", + "markdownDescription": "DEPRECATED: This field is deprecated and will be removed in\na future version. Please use the `validators` field instead\nwith the tls.client_auth.leaf module instead.\n\nA list of base64 DER-encoded client leaf certs\nto accept. If this list is not empty, client certs\nwhich are not in this list will be rejected. \n", "type": "string" } }, "verifiers": { - "description": "verifiers: array\nModule: tls.client_auth", - "markdownDescription": "verifiers: `array` \nModule: `tls.client_auth`", + "description": "verifiers: array\nModule: tls.client_auth\nClient certificate verification modules. These can perform\ncustom client authentication checks, such as ensuring the\ncertificate is not revoked.\n", + "markdownDescription": "verifiers: `array` \nModule: `tls.client_auth` \nClient certificate verification modules. These can perform\ncustom client authentication checks, such as ensuring the\ncertificate is not revoked. \n", "type": "array", "items": { + "description": "Client certificate verification modules. These can perform\ncustom client authentication checks, such as ensuring the\ncertificate is not revoked.\n", + "markdownDescription": "Client certificate verification modules. These can perform\ncustom client authentication checks, such as ensuring the\ncertificate is not revoked. \n", "required": [ "verifier" ], @@ -6214,6 +7420,11 @@ "markdownDescription": "default_sni: `string` \nModule: `layer4.handlers.tls` \nDefaultSNI becomes the ServerName in a ClientHello if there\nis no policy configured for the empty SNI value. \n", "type": "string" }, + "insecure_secrets_log": { + "description": "insecure_secrets_log: string\nModule: layer4.handlers.tls\nAlso known as \"SSLKEYLOGFILE\", TLS secrets will be written to\nthis file in NSS key log format which can then be parsed by\nWireshark and other tools. This is INSECURE as it allows other\nprograms or tools to decrypt TLS connections. However, this\ncapability can be useful for debugging and troubleshooting.\n**ENABLING THIS LOG COMPROMISES SECURITY!**\n\nThis feature is EXPERIMENTAL and subject to change or removal.\n", + "markdownDescription": "insecure_secrets_log: `string` \nModule: `layer4.handlers.tls` \nAlso known as \"SSLKEYLOGFILE\", TLS secrets will be written to\nthis file in NSS key log format which can then be parsed by\nWireshark and other tools. This is INSECURE as it allows other\nprograms or tools to decrypt TLS connections. However, this\ncapability can be useful for debugging and troubleshooting.\n**ENABLING THIS LOG COMPROMISES SECURITY!**\n\nThis feature is EXPERIMENTAL and subject to change or removal. \n", + "type": "string" + }, "match": { "description": "match: object\nModule: tls.handshake_match\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2#ModuleMap\nHow to match this policy with a TLS ClientHello. If\nthis policy is the first to match, it will be used.\n\n\nModuleMap is a map that can contain multiple modules,\nwhere the map key is the module's name. (The namespace\nis usually read from an associated field's struct tag.)\nBecause the module's name is given as the key in a\nmodule map, the name does not have to be given in the\njson.RawMessage.\n", "markdownDescription": "match: `object` \nModule: `tls.handshake_match` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2#ModuleMap) \nHow to match this policy with a TLS ClientHello. If\nthis policy is the first to match, it will be used.\n\n\nModuleMap is a map that can contain multiple modules,\nwhere the map key is the module's name. (The namespace\nis usually read from an associated field's struct tag.)\nBecause the module's name is given as the key in a\nmodule map, the name does not have to be given in the\njson.RawMessage. \n", @@ -6449,6 +7660,1288 @@ } } }, + "security": { + "description": "security: object\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App\nApp implements security manager.\n\n", + "markdownDescription": "security: `object` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App) \nApp implements security manager.\n \n", + "type": "object", + "properties": { + "config": { + "description": "config: object\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/go-authcrunch#Config\nConfig is a configuration of Server.\n\n", + "markdownDescription": "config: `object` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch#Config) \nConfig is a configuration of Server.\n \n", + "type": "object", + "properties": { + "authentication_portals": { + "description": "authentication_portals: array\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authn#PortalConfig\nPortalConfig represents Portal configuration.\n\n", + "markdownDescription": "authentication_portals: `array` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authn#PortalConfig) \nPortalConfig represents Portal configuration.\n \n", + "type": "array", + "items": { + "description": "https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authn#PortalConfig\nPortalConfig represents Portal configuration.\n\n", + "markdownDescription": "[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authn#PortalConfig) \nPortalConfig represents Portal configuration.\n \n", + "type": "object", + "properties": { + "access_list_configs": { + "description": "access_list_configs: array\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/acl#RuleConfiguration\nAccessListConfigs hold the configurations for the ACL of the token validator.\n\n\nRuleConfiguration consists of a list of conditions and and actions\n", + "markdownDescription": "access_list_configs: `array` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/acl#RuleConfiguration) \nAccessListConfigs hold the configurations for the ACL of the token validator.\n\n\nRuleConfiguration consists of a list of conditions and and actions \n", + "type": "array", + "items": { + "description": "https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/acl#RuleConfiguration\nAccessListConfigs hold the configurations for the ACL of the token validator.\n\n\nRuleConfiguration consists of a list of conditions and and actions\n", + "markdownDescription": "[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/acl#RuleConfiguration) \nAccessListConfigs hold the configurations for the ACL of the token validator.\n\n\nRuleConfiguration consists of a list of conditions and and actions \n", + "type": "object", + "properties": { + "action": { + "description": "action: string\nModule: security\n", + "markdownDescription": "action: `string` \nModule: `security` \n", + "type": "string" + }, + "comment": { + "description": "comment: string\nModule: security\n", + "markdownDescription": "comment: `string` \nModule: `security` \n", + "type": "string" + }, + "conditions": { + "description": "conditions: array\nModule: security\n", + "markdownDescription": "conditions: `array` \nModule: `security` \n", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "api": { + "description": "api: object\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authn#APIConfig\nAPI holds the configuration for API endpoints.\n\n\nAPIConfig holds the configuration for API endpoints.\n", + "markdownDescription": "api: `object` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authn#APIConfig) \nAPI holds the configuration for API endpoints.\n\n\nAPIConfig holds the configuration for API endpoints. \n", + "type": "object", + "properties": { + "enabled": { + "description": "enabled: boolean\nModule: security\n", + "markdownDescription": "enabled: `boolean` \nModule: `security` \n", + "type": "boolean" + } + } + }, + "cookie_config": { + "description": "cookie_config: object\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authn/cookie#Config\nCookieConfig holds the configuration for the cookies issues by Authenticator.\n\n\nConfig represents a common set of configuration settings\napplicable to the cookies issued by authn.Authenticator.\n", + "markdownDescription": "cookie_config: `object` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authn/cookie#Config) \nCookieConfig holds the configuration for the cookies issues by Authenticator.\n\n\nConfig represents a common set of configuration settings\napplicable to the cookies issued by authn.Authenticator. \n", + "type": "object", + "properties": { + "domains": { + "description": "domains: object\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authn/cookie#DomainConfig\nDomainConfig represents a common set of configuration settings\napplicable to the cookies issued by authn.Authenticator.\n\n", + "markdownDescription": "domains: `object` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authn/cookie#DomainConfig) \nDomainConfig represents a common set of configuration settings\napplicable to the cookies issued by authn.Authenticator.\n \n", + "type": "object", + "additionalProperties": { + "description": "https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authn/cookie#DomainConfig\nDomainConfig represents a common set of configuration settings\napplicable to the cookies issued by authn.Authenticator.\n\n", + "markdownDescription": "[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authn/cookie#DomainConfig) \nDomainConfig represents a common set of configuration settings\napplicable to the cookies issued by authn.Authenticator.\n \n", + "properties": { + "domain": { + "description": "domain: string\nModule: security\n", + "markdownDescription": "domain: `string` \nModule: `security` \n", + "type": "string" + }, + "insecure": { + "description": "insecure: boolean\nModule: security\n", + "markdownDescription": "insecure: `boolean` \nModule: `security` \n", + "type": "boolean" + }, + "lifetime": { + "description": "lifetime: number\nModule: security\n", + "markdownDescription": "lifetime: `number` \nModule: `security` \n", + "type": "number" + }, + "path": { + "description": "path: string\nModule: security\n", + "markdownDescription": "path: `string` \nModule: `security` \n", + "type": "string" + }, + "same_site": { + "description": "same_site: string\nModule: security\n", + "markdownDescription": "same_site: `string` \nModule: `security` \n", + "type": "string" + }, + "seq": { + "description": "seq: number\nModule: security\n", + "markdownDescription": "seq: `number` \nModule: `security` \n", + "type": "number" + }, + "strip_domain_enabled": { + "description": "strip_domain_enabled: boolean\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "strip_domain_enabled: `boolean` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "boolean" + } + } + } + }, + "insecure": { + "description": "insecure: boolean\nModule: security\n", + "markdownDescription": "insecure: `boolean` \nModule: `security` \n", + "type": "boolean" + }, + "lifetime": { + "description": "lifetime: number\nModule: security\n", + "markdownDescription": "lifetime: `number` \nModule: `security` \n", + "type": "number" + }, + "path": { + "description": "path: string\nModule: security\n", + "markdownDescription": "path: `string` \nModule: `security` \n", + "type": "string" + }, + "same_site": { + "description": "same_site: string\nModule: security\n", + "markdownDescription": "same_site: `string` \nModule: `security` \n", + "type": "string" + }, + "strip_domain_enabled": { + "description": "strip_domain_enabled: boolean\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "strip_domain_enabled: `boolean` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "boolean" + } + } + }, + "crypto_key_configs": { + "description": "crypto_key_configs: array\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/kms#CryptoKeyConfig\nCryptoKeyConfigs hold the configurations for the keys used to issue and validate user tokens.\n\n\nCryptoKeyConfig is common token-related configuration settings.\n", + "markdownDescription": "crypto_key_configs: `array` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/kms#CryptoKeyConfig) \nCryptoKeyConfigs hold the configurations for the keys used to issue and validate user tokens.\n\n\nCryptoKeyConfig is common token-related configuration settings. \n", + "type": "array", + "items": { + "description": "https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/kms#CryptoKeyConfig\nCryptoKeyConfigs hold the configurations for the keys used to issue and validate user tokens.\n\n\nCryptoKeyConfig is common token-related configuration settings.\n", + "markdownDescription": "[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/kms#CryptoKeyConfig) \nCryptoKeyConfigs hold the configurations for the keys used to issue and validate user tokens.\n\n\nCryptoKeyConfig is common token-related configuration settings. \n", + "type": "object", + "properties": { + "algorithm": { + "description": "algorithm: string\nModule: security\nAlgorithm is either hmac, rsa, or ecdsa.\n", + "markdownDescription": "algorithm: `string` \nModule: `security` \nAlgorithm is either hmac, rsa, or ecdsa. \n", + "type": "string" + }, + "dir_path": { + "description": "dir_path: string\nModule: security\nDirPath is the path to a directory containing crypto keys.\n", + "markdownDescription": "dir_path: `string` \nModule: `security` \nDirPath is the path to a directory containing crypto keys. \n", + "type": "string" + }, + "env_var_name": { + "description": "env_var_name: string\nModule: security\nEnvVarName is the name of environment variables holding either the value of\na key or the path a directory or file containing a key.\n", + "markdownDescription": "env_var_name: `string` \nModule: `security` \nEnvVarName is the name of environment variables holding either the value of\na key or the path a directory or file containing a key. \n", + "type": "string" + }, + "env_var_type": { + "description": "env_var_type: string\nModule: security\nEnvVarType indicates how to interpret the value found in the EnvVarName. If\nit is blank, then the assumption is the environment variable value\ncontains either public or private key.\n", + "markdownDescription": "env_var_type: `string` \nModule: `security` \nEnvVarType indicates how to interpret the value found in the EnvVarName. If\nit is blank, then the assumption is the environment variable value\ncontains either public or private key. \n", + "type": "string" + }, + "env_var_value": { + "description": "env_var_value: string\nModule: security\nEnvVarValue is the value associated with the environment variable set by EnvVarName.\n", + "markdownDescription": "env_var_value: `string` \nModule: `security` \nEnvVarValue is the value associated with the environment variable set by EnvVarName. \n", + "type": "string" + }, + "file_path": { + "description": "file_path: string\nModule: security\nFilePath is the path of a file containing either private or public key.\n", + "markdownDescription": "file_path: `string` \nModule: `security` \nFilePath is the path of a file containing either private or public key. \n", + "type": "string" + }, + "id": { + "description": "id: string\nModule: security\nID is the key ID, aka kid.\n", + "markdownDescription": "id: `string` \nModule: `security` \nID is the key ID, aka kid. \n", + "type": "string" + }, + "seq": { + "description": "seq: number\nModule: security\nSeq is the order in which a key would be processed.\n", + "markdownDescription": "seq: `number` \nModule: `security` \nSeq is the order in which a key would be processed. \n", + "type": "number" + }, + "source": { + "description": "source: string\nModule: security\nSource is either config or env.\n", + "markdownDescription": "source: `string` \nModule: `security` \nSource is either config or env. \n", + "type": "string" + }, + "token_eval_expr": { + "description": "token_eval_expr: array\nModule: security\nEvalExpr is a list of expressions evaluated whether a specific key\nshould be used for signing and verification.\n", + "markdownDescription": "token_eval_expr: `array` \nModule: `security` \nEvalExpr is a list of expressions evaluated whether a specific key\nshould be used for signing and verification. \n", + "type": "array", + "items": { + "description": "EvalExpr is a list of expressions evaluated whether a specific key\nshould be used for signing and verification.\n", + "markdownDescription": "EvalExpr is a list of expressions evaluated whether a specific key\nshould be used for signing and verification. \n", + "type": "string" + } + }, + "token_lifetime": { + "description": "token_lifetime: number\nModule: security\nTokenLifetime is the expected token grant lifetime in seconds.\n", + "markdownDescription": "token_lifetime: `number` \nModule: `security` \nTokenLifetime is the expected token grant lifetime in seconds. \n", + "type": "number" + }, + "token_name": { + "description": "token_name: string\nModule: security\nTokenName is the token name associated with the key.\n", + "markdownDescription": "token_name: `string` \nModule: `security` \nTokenName is the token name associated with the key. \n", + "type": "string" + }, + "token_secret": { + "description": "token_secret: string\nModule: security\nSecret is the shared key used with HMAC algorithm.\n", + "markdownDescription": "token_secret: `string` \nModule: `security` \nSecret is the shared key used with HMAC algorithm. \n", + "type": "string" + }, + "token_sign_method": { + "description": "token_sign_method: string\nModule: security\nPreferredSignMethod is the preferred method to sign tokens, e.g.\nall HMAC keys could use HS256, HS384, and HS512 methods. By default,\nthe preferred method is HS512. However, one may prefer using HS256.\n", + "markdownDescription": "token_sign_method: `string` \nModule: `security` \nPreferredSignMethod is the preferred method to sign tokens, e.g.\nall HMAC keys could use HS256, HS384, and HS512 methods. By default,\nthe preferred method is HS512. However, one may prefer using HS256. \n", + "type": "string" + }, + "usage": { + "description": "usage: string\nModule: security\nUsage is the intended key usage. The values are: sign, verify, both,\nor auto.\n", + "markdownDescription": "usage: `string` \nModule: `security` \nUsage is the intended key usage. The values are: sign, verify, both,\nor auto. \n", + "type": "string" + } + } + } + }, + "crypto_key_store_config": { + "description": "crypto_key_store_config: object\nModule: security\nCryptoKeyStoreConfig hold the default configuration for the keys, e.g. token name and lifetime.\n", + "markdownDescription": "crypto_key_store_config: `object` \nModule: `security` \nCryptoKeyStoreConfig hold the default configuration for the keys, e.g. token name and lifetime. \n", + "type": "object", + "additionalProperties": { + "description": "CryptoKeyStoreConfig hold the default configuration for the keys, e.g. token name and lifetime.\n", + "markdownDescription": "CryptoKeyStoreConfig hold the default configuration for the keys, e.g. token name and lifetime. \n" + } + }, + "identity_providers": { + "description": "identity_providers: array\nModule: security\nThe names of identity providers.\n", + "markdownDescription": "identity_providers: `array` \nModule: `security` \nThe names of identity providers. \n", + "type": "array", + "items": { + "description": "The names of identity providers.\n", + "markdownDescription": "The names of identity providers. \n", + "type": "string" + } + }, + "identity_stores": { + "description": "identity_stores: array\nModule: security\nThe names of identity stores.\n", + "markdownDescription": "identity_stores: `array` \nModule: `security` \nThe names of identity stores. \n", + "type": "array", + "items": { + "description": "The names of identity stores.\n", + "markdownDescription": "The names of identity stores. \n", + "type": "string" + } + }, + "name": { + "description": "name: string\nModule: security\n", + "markdownDescription": "name: `string` \nModule: `security` \n", + "type": "string" + }, + "sso_providers": { + "description": "sso_providers: array\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "sso_providers: `array` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "array", + "items": { + "type": "string" + } + }, + "token_grantor_options": { + "description": "token_grantor_options: object\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authz/options#TokenGrantorOptions\nTokenGrantorOptions holds the configuration for the tokens issues by Authenticator.\n\n\nTokenGrantorOptions provides options for TokenGrantor.\n", + "markdownDescription": "token_grantor_options: `object` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authz/options#TokenGrantorOptions) \nTokenGrantorOptions holds the configuration for the tokens issues by Authenticator.\n\n\nTokenGrantorOptions provides options for TokenGrantor. \n", + "type": "object", + "properties": { + "enable_source_address": { + "description": "enable_source_address: boolean\nModule: security\n", + "markdownDescription": "enable_source_address: `boolean` \nModule: `security` \n", + "type": "boolean" + } + } + }, + "token_validator_options": { + "description": "token_validator_options: object\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authz/options#TokenValidatorOptions\nTokenValidatorOptions holds the configuration for the token validator.\n\n\nTokenValidatorOptions provides options for TokenValidator.\n", + "markdownDescription": "token_validator_options: `object` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authz/options#TokenValidatorOptions) \nTokenValidatorOptions holds the configuration for the token validator.\n\n\nTokenValidatorOptions provides options for TokenValidator. \n", + "type": "object", + "properties": { + "validate_access_list_path_claim": { + "description": "validate_access_list_path_claim: boolean\nModule: security\n", + "markdownDescription": "validate_access_list_path_claim: `boolean` \nModule: `security` \n", + "type": "boolean" + }, + "validate_bearer_header": { + "description": "validate_bearer_header: boolean\nModule: security\n", + "markdownDescription": "validate_bearer_header: `boolean` \nModule: `security` \n", + "type": "boolean" + }, + "validate_method_path": { + "description": "validate_method_path: boolean\nModule: security\n", + "markdownDescription": "validate_method_path: `boolean` \nModule: `security` \n", + "type": "boolean" + }, + "validate_source_address": { + "description": "validate_source_address: boolean\nModule: security\n", + "markdownDescription": "validate_source_address: `boolean` \nModule: `security` \n", + "type": "boolean" + } + } + }, + "ui": { + "description": "ui: object\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authn/ui#Parameters\nUI holds the configuration for the user interface.\n\n\nParameters represent a common set of configuration settings\nfor HTML UI.\n", + "markdownDescription": "ui: `object` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authn/ui#Parameters) \nUI holds the configuration for the user interface.\n\n\nParameters represent a common set of configuration settings\nfor HTML UI. \n", + "type": "object", + "properties": { + "allow_role_selection": { + "description": "allow_role_selection: boolean\nModule: security\n", + "markdownDescription": "allow_role_selection: `boolean` \nModule: `security` \n", + "type": "boolean" + }, + "auto_redirect_url": { + "description": "auto_redirect_url: string\nModule: security\n", + "markdownDescription": "auto_redirect_url: `string` \nModule: `security` \n", + "type": "string" + }, + "custom_css_path": { + "description": "custom_css_path: string\nModule: security\n", + "markdownDescription": "custom_css_path: `string` \nModule: `security` \n", + "type": "string" + }, + "custom_js_path": { + "description": "custom_js_path: string\nModule: security\n", + "markdownDescription": "custom_js_path: `string` \nModule: `security` \n", + "type": "string" + }, + "disabled_pages": { + "description": "disabled_pages: object\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "disabled_pages: `object` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "object", + "additionalProperties": {} + }, + "language": { + "description": "language: string\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "language: `string` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "string" + }, + "logo_description": { + "description": "logo_description: string\nModule: security\n", + "markdownDescription": "logo_description: `string` \nModule: `security` \n", + "type": "string" + }, + "logo_url": { + "description": "logo_url: string\nModule: security\n", + "markdownDescription": "logo_url: `string` \nModule: `security` \n", + "type": "string" + }, + "meta_author": { + "description": "meta_author: string\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "meta_author: `string` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "string" + }, + "meta_description": { + "description": "meta_description: string\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "meta_description: `string` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "string" + }, + "meta_title": { + "description": "meta_title: string\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "meta_title: `string` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "string" + }, + "password_recovery_enabled": { + "description": "password_recovery_enabled: boolean\nModule: security\n", + "markdownDescription": "password_recovery_enabled: `boolean` \nModule: `security` \n", + "type": "boolean" + }, + "private_links": { + "description": "private_links: array\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authn/ui#Link\nLink represents a single HTML link.\n\n", + "markdownDescription": "private_links: `array` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authn/ui#Link) \nLink represents a single HTML link.\n \n", + "type": "array", + "items": { + "description": "https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authn/ui#Link\nLink represents a single HTML link.\n\n", + "markdownDescription": "[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authn/ui#Link) \nLink represents a single HTML link.\n \n", + "type": "object", + "properties": { + "icon_enabled": { + "description": "icon_enabled: boolean\nModule: security\n", + "markdownDescription": "icon_enabled: `boolean` \nModule: `security` \n", + "type": "boolean" + }, + "icon_name": { + "description": "icon_name: string\nModule: security\n", + "markdownDescription": "icon_name: `string` \nModule: `security` \n", + "type": "string" + }, + "link": { + "description": "link: string\nModule: security\n", + "markdownDescription": "link: `string` \nModule: `security` \n", + "type": "string" + }, + "open_new_window": { + "description": "open_new_window: boolean\nModule: security\n", + "markdownDescription": "open_new_window: `boolean` \nModule: `security` \n", + "type": "boolean" + }, + "style": { + "description": "style: string\nModule: security\n", + "markdownDescription": "style: `string` \nModule: `security` \n", + "type": "string" + }, + "target": { + "description": "target: string\nModule: security\n", + "markdownDescription": "target: `string` \nModule: `security` \n", + "type": "string" + }, + "target_enabled": { + "description": "target_enabled: boolean\nModule: security\n", + "markdownDescription": "target_enabled: `boolean` \nModule: `security` \n", + "type": "boolean" + }, + "title": { + "description": "title: string\nModule: security\n", + "markdownDescription": "title: `string` \nModule: `security` \n", + "type": "string" + } + } + } + }, + "realms": { + "description": "realms: array\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authn/ui#UserRealm\nUserRealm represents a single authentication realm/domain.\n\n", + "markdownDescription": "realms: `array` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authn/ui#UserRealm) \nUserRealm represents a single authentication realm/domain.\n \n", + "type": "array", + "items": { + "description": "https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authn/ui#UserRealm\nUserRealm represents a single authentication realm/domain.\n\n", + "markdownDescription": "[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authn/ui#UserRealm) \nUserRealm represents a single authentication realm/domain.\n \n", + "type": "object", + "properties": { + "label": { + "description": "label: string\nModule: security\n", + "markdownDescription": "label: `string` \nModule: `security` \n", + "type": "string" + }, + "name": { + "description": "name: string\nModule: security\n", + "markdownDescription": "name: `string` \nModule: `security` \n", + "type": "string" + } + } + } + }, + "templates": { + "description": "templates: object\nModule: security\n", + "markdownDescription": "templates: `object` \nModule: `security` \n", + "type": "object", + "additionalProperties": {} + }, + "theme": { + "description": "theme: string\nModule: security\n", + "markdownDescription": "theme: `string` \nModule: `security` \n", + "type": "string" + }, + "title": { + "description": "title: string\nModule: security\n", + "markdownDescription": "title: `string` \nModule: `security` \n", + "type": "string" + } + } + }, + "user_registries": { + "description": "user_registries: array\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "user_registries: `array` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "array", + "items": { + "type": "string" + } + }, + "user_transformer_configs": { + "description": "user_transformer_configs: array\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authn/transformer#Config\nUserTransformerConfig holds the configuration for the user transformer.\n\n\nConfig represents a common set of configuration settings\napplicable to the cookies issued by authn.Authenticator.\n", + "markdownDescription": "user_transformer_configs: `array` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authn/transformer#Config) \nUserTransformerConfig holds the configuration for the user transformer.\n\n\nConfig represents a common set of configuration settings\napplicable to the cookies issued by authn.Authenticator. \n", + "type": "array", + "items": { + "description": "https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authn/transformer#Config\nUserTransformerConfig holds the configuration for the user transformer.\n\n\nConfig represents a common set of configuration settings\napplicable to the cookies issued by authn.Authenticator.\n", + "markdownDescription": "[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authn/transformer#Config) \nUserTransformerConfig holds the configuration for the user transformer.\n\n\nConfig represents a common set of configuration settings\napplicable to the cookies issued by authn.Authenticator. \n", + "type": "object", + "properties": { + "actions": { + "description": "actions: array\nModule: security\n", + "markdownDescription": "actions: `array` \nModule: `security` \n", + "type": "array", + "items": { + "type": "string" + } + }, + "matchers": { + "description": "matchers: array\nModule: security\n", + "markdownDescription": "matchers: `array` \nModule: `security` \n", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + }, + "authorization_policies": { + "description": "authorization_policies: array\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authz#PolicyConfig\nPolicyConfig is Gatekeeper configuration.\n\n", + "markdownDescription": "authorization_policies: `array` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authz#PolicyConfig) \nPolicyConfig is Gatekeeper configuration.\n \n", + "type": "array", + "items": { + "description": "https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authz#PolicyConfig\nPolicyConfig is Gatekeeper configuration.\n\n", + "markdownDescription": "[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authz#PolicyConfig) \nPolicyConfig is Gatekeeper configuration.\n \n", + "type": "object", + "properties": { + "access_list_rules": { + "description": "access_list_rules: array\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/acl#RuleConfiguration\nRuleConfiguration consists of a list of conditions and and actions\n\n", + "markdownDescription": "access_list_rules: `array` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/acl#RuleConfiguration) \nRuleConfiguration consists of a list of conditions and and actions\n \n", + "type": "array", + "items": { + "description": "https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/acl#RuleConfiguration\nRuleConfiguration consists of a list of conditions and and actions\n\n", + "markdownDescription": "[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/acl#RuleConfiguration) \nRuleConfiguration consists of a list of conditions and and actions\n \n", + "type": "object", + "properties": { + "action": { + "description": "action: string\nModule: security\n", + "markdownDescription": "action: `string` \nModule: `security` \n", + "type": "string" + }, + "comment": { + "description": "comment: string\nModule: security\n", + "markdownDescription": "comment: `string` \nModule: `security` \n", + "type": "string" + }, + "conditions": { + "description": "conditions: array\nModule: security\n", + "markdownDescription": "conditions: `array` \nModule: `security` \n", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "additional_scopes": { + "description": "additional_scopes: boolean\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "additional_scopes: `boolean` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "boolean" + }, + "allowed_token_sources": { + "description": "allowed_token_sources: array\nModule: security\n", + "markdownDescription": "allowed_token_sources: `array` \nModule: `security` \n", + "type": "array", + "items": { + "type": "string" + } + }, + "auth_proxy_config": { + "description": "auth_proxy_config: object\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authproxy#Config\nConfig is a config for an identity provider.\n\n", + "markdownDescription": "auth_proxy_config: `object` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authproxy#Config) \nConfig is a config for an identity provider.\n \n", + "type": "object", + "properties": { + "api_key_auth": { + "description": "api_key_auth: object\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authproxy#APIKeyAuthConfig\nAPIKeyAuthConfig is a config for API key-based authentication.\n\n", + "markdownDescription": "api_key_auth: `object` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authproxy#APIKeyAuthConfig) \nAPIKeyAuthConfig is a config for API key-based authentication.\n \n", + "type": "object", + "properties": { + "enabled": { + "description": "enabled: boolean\nModule: security\n", + "markdownDescription": "enabled: `boolean` \nModule: `security` \n", + "type": "boolean" + }, + "realms": { + "description": "realms: object\nModule: security\n", + "markdownDescription": "realms: `object` \nModule: `security` \n", + "type": "object", + "additionalProperties": {} + } + } + }, + "basic_auth": { + "description": "basic_auth: object\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authproxy#BasicAuthConfig\nBasicAuthConfig is a config for basic authentication.\n\n", + "markdownDescription": "basic_auth: `object` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authproxy#BasicAuthConfig) \nBasicAuthConfig is a config for basic authentication.\n \n", + "type": "object", + "properties": { + "enabled": { + "description": "enabled: boolean\nModule: security\n", + "markdownDescription": "enabled: `boolean` \nModule: `security` \n", + "type": "boolean" + }, + "realms": { + "description": "realms: object\nModule: security\n", + "markdownDescription": "realms: `object` \nModule: `security` \n", + "type": "object", + "additionalProperties": {} + } + } + }, + "portal_name": { + "description": "portal_name: string\nModule: security\n", + "markdownDescription": "portal_name: `string` \nModule: `security` \n", + "type": "string" + } + } + }, + "auth_redirect_query_param": { + "description": "auth_redirect_query_param: string\nModule: security\n", + "markdownDescription": "auth_redirect_query_param: `string` \nModule: `security` \n", + "type": "string" + }, + "auth_redirect_status_code": { + "description": "auth_redirect_status_code: number\nModule: security\nThe status code for the HTTP redirect for non-authorized users.\n", + "markdownDescription": "auth_redirect_status_code: `number` \nModule: `security` \nThe status code for the HTTP redirect for non-authorized users. \n", + "type": "number" + }, + "auth_url_path": { + "description": "auth_url_path: string\nModule: security\n", + "markdownDescription": "auth_url_path: `string` \nModule: `security` \n", + "type": "string" + }, + "bypass_configs": { + "description": "bypass_configs: array\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authz/bypass#Config\nThe list of URI prefixes which bypass authorization.\n\n\nConfig contains the entry for the authorization bypass.\n", + "markdownDescription": "bypass_configs: `array` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authz/bypass#Config) \nThe list of URI prefixes which bypass authorization.\n\n\nConfig contains the entry for the authorization bypass. \n", + "type": "array", + "items": { + "description": "https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authz/bypass#Config\nThe list of URI prefixes which bypass authorization.\n\n\nConfig contains the entry for the authorization bypass.\n", + "markdownDescription": "[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authz/bypass#Config) \nThe list of URI prefixes which bypass authorization.\n\n\nConfig contains the entry for the authorization bypass. \n", + "type": "object", + "properties": { + "match_type": { + "description": "match_type: string\nModule: security\n", + "markdownDescription": "match_type: `string` \nModule: `security` \n", + "type": "string" + }, + "uri": { + "description": "uri: string\nModule: security\n", + "markdownDescription": "uri: `string` \nModule: `security` \n", + "type": "string" + } + } + } + }, + "crypto_key_configs": { + "description": "crypto_key_configs: array\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/kms#CryptoKeyConfig\nCryptoKeyConfig is common token-related configuration settings.\n\n", + "markdownDescription": "crypto_key_configs: `array` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/kms#CryptoKeyConfig) \nCryptoKeyConfig is common token-related configuration settings.\n \n", + "type": "array", + "items": { + "description": "https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/kms#CryptoKeyConfig\nCryptoKeyConfig is common token-related configuration settings.\n\n", + "markdownDescription": "[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/kms#CryptoKeyConfig) \nCryptoKeyConfig is common token-related configuration settings.\n \n", + "type": "object", + "properties": { + "algorithm": { + "description": "algorithm: string\nModule: security\nAlgorithm is either hmac, rsa, or ecdsa.\n", + "markdownDescription": "algorithm: `string` \nModule: `security` \nAlgorithm is either hmac, rsa, or ecdsa. \n", + "type": "string" + }, + "dir_path": { + "description": "dir_path: string\nModule: security\nDirPath is the path to a directory containing crypto keys.\n", + "markdownDescription": "dir_path: `string` \nModule: `security` \nDirPath is the path to a directory containing crypto keys. \n", + "type": "string" + }, + "env_var_name": { + "description": "env_var_name: string\nModule: security\nEnvVarName is the name of environment variables holding either the value of\na key or the path a directory or file containing a key.\n", + "markdownDescription": "env_var_name: `string` \nModule: `security` \nEnvVarName is the name of environment variables holding either the value of\na key or the path a directory or file containing a key. \n", + "type": "string" + }, + "env_var_type": { + "description": "env_var_type: string\nModule: security\nEnvVarType indicates how to interpret the value found in the EnvVarName. If\nit is blank, then the assumption is the environment variable value\ncontains either public or private key.\n", + "markdownDescription": "env_var_type: `string` \nModule: `security` \nEnvVarType indicates how to interpret the value found in the EnvVarName. If\nit is blank, then the assumption is the environment variable value\ncontains either public or private key. \n", + "type": "string" + }, + "env_var_value": { + "description": "env_var_value: string\nModule: security\nEnvVarValue is the value associated with the environment variable set by EnvVarName.\n", + "markdownDescription": "env_var_value: `string` \nModule: `security` \nEnvVarValue is the value associated with the environment variable set by EnvVarName. \n", + "type": "string" + }, + "file_path": { + "description": "file_path: string\nModule: security\nFilePath is the path of a file containing either private or public key.\n", + "markdownDescription": "file_path: `string` \nModule: `security` \nFilePath is the path of a file containing either private or public key. \n", + "type": "string" + }, + "id": { + "description": "id: string\nModule: security\nID is the key ID, aka kid.\n", + "markdownDescription": "id: `string` \nModule: `security` \nID is the key ID, aka kid. \n", + "type": "string" + }, + "seq": { + "description": "seq: number\nModule: security\nSeq is the order in which a key would be processed.\n", + "markdownDescription": "seq: `number` \nModule: `security` \nSeq is the order in which a key would be processed. \n", + "type": "number" + }, + "source": { + "description": "source: string\nModule: security\nSource is either config or env.\n", + "markdownDescription": "source: `string` \nModule: `security` \nSource is either config or env. \n", + "type": "string" + }, + "token_eval_expr": { + "description": "token_eval_expr: array\nModule: security\nEvalExpr is a list of expressions evaluated whether a specific key\nshould be used for signing and verification.\n", + "markdownDescription": "token_eval_expr: `array` \nModule: `security` \nEvalExpr is a list of expressions evaluated whether a specific key\nshould be used for signing and verification. \n", + "type": "array", + "items": { + "description": "EvalExpr is a list of expressions evaluated whether a specific key\nshould be used for signing and verification.\n", + "markdownDescription": "EvalExpr is a list of expressions evaluated whether a specific key\nshould be used for signing and verification. \n", + "type": "string" + } + }, + "token_lifetime": { + "description": "token_lifetime: number\nModule: security\nTokenLifetime is the expected token grant lifetime in seconds.\n", + "markdownDescription": "token_lifetime: `number` \nModule: `security` \nTokenLifetime is the expected token grant lifetime in seconds. \n", + "type": "number" + }, + "token_name": { + "description": "token_name: string\nModule: security\nTokenName is the token name associated with the key.\n", + "markdownDescription": "token_name: `string` \nModule: `security` \nTokenName is the token name associated with the key. \n", + "type": "string" + }, + "token_secret": { + "description": "token_secret: string\nModule: security\nSecret is the shared key used with HMAC algorithm.\n", + "markdownDescription": "token_secret: `string` \nModule: `security` \nSecret is the shared key used with HMAC algorithm. \n", + "type": "string" + }, + "token_sign_method": { + "description": "token_sign_method: string\nModule: security\nPreferredSignMethod is the preferred method to sign tokens, e.g.\nall HMAC keys could use HS256, HS384, and HS512 methods. By default,\nthe preferred method is HS512. However, one may prefer using HS256.\n", + "markdownDescription": "token_sign_method: `string` \nModule: `security` \nPreferredSignMethod is the preferred method to sign tokens, e.g.\nall HMAC keys could use HS256, HS384, and HS512 methods. By default,\nthe preferred method is HS512. However, one may prefer using HS256. \n", + "type": "string" + }, + "usage": { + "description": "usage: string\nModule: security\nUsage is the intended key usage. The values are: sign, verify, both,\nor auto.\n", + "markdownDescription": "usage: `string` \nModule: `security` \nUsage is the intended key usage. The values are: sign, verify, both,\nor auto. \n", + "type": "string" + } + } + } + }, + "crypto_key_store_config": { + "description": "crypto_key_store_config: object\nModule: security\nCryptoKeyStoreConfig hold the default configuration for the keys, e.g. token name and lifetime.\n", + "markdownDescription": "crypto_key_store_config: `object` \nModule: `security` \nCryptoKeyStoreConfig hold the default configuration for the keys, e.g. token name and lifetime. \n", + "type": "object", + "additionalProperties": { + "description": "CryptoKeyStoreConfig hold the default configuration for the keys, e.g. token name and lifetime.\n", + "markdownDescription": "CryptoKeyStoreConfig hold the default configuration for the keys, e.g. token name and lifetime. \n" + } + }, + "disable_auth_redirect": { + "description": "disable_auth_redirect: boolean\nModule: security\n", + "markdownDescription": "disable_auth_redirect: `boolean` \nModule: `security` \n", + "type": "boolean" + }, + "disable_auth_redirect_query": { + "description": "disable_auth_redirect_query: boolean\nModule: security\n", + "markdownDescription": "disable_auth_redirect_query: `boolean` \nModule: `security` \n", + "type": "boolean" + }, + "forbidden_url": { + "description": "forbidden_url: string\nModule: security\n", + "markdownDescription": "forbidden_url: `string` \nModule: `security` \n", + "type": "string" + }, + "header_injection_configs": { + "description": "header_injection_configs: array\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authz/injector#Config\nThe list of mappings between header names and field names.\n\n\nConfig contains the entry for the HTTP header injection.\n", + "markdownDescription": "header_injection_configs: `array` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authz/injector#Config) \nThe list of mappings between header names and field names.\n\n\nConfig contains the entry for the HTTP header injection. \n", + "type": "array", + "items": { + "description": "https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authz/injector#Config\nThe list of mappings between header names and field names.\n\n\nConfig contains the entry for the HTTP header injection.\n", + "markdownDescription": "[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/authz/injector#Config) \nThe list of mappings between header names and field names.\n\n\nConfig contains the entry for the HTTP header injection. \n", + "type": "object", + "properties": { + "field": { + "description": "field: string\nModule: security\n", + "markdownDescription": "field: `string` \nModule: `security` \n", + "type": "string" + }, + "header": { + "description": "header: string\nModule: security\n", + "markdownDescription": "header: `string` \nModule: `security` \n", + "type": "string" + } + } + } + }, + "login_hint_validators": { + "description": "login_hint_validators: array\nModule: security\nValidate the login hint which can be passed to the auth provider\n", + "markdownDescription": "login_hint_validators: `array` \nModule: `security` \nValidate the login hint which can be passed to the auth provider \n", + "type": "array", + "items": { + "description": "Validate the login hint which can be passed to the auth provider\n", + "markdownDescription": "Validate the login hint which can be passed to the auth provider \n", + "type": "string" + } + }, + "name": { + "description": "name: string\nModule: security\n", + "markdownDescription": "name: `string` \nModule: `security` \n", + "type": "string" + }, + "pass_claims_with_headers": { + "description": "pass_claims_with_headers: boolean\nModule: security\nPass claims from JWT token via HTTP X- headers.\n", + "markdownDescription": "pass_claims_with_headers: `boolean` \nModule: `security` \nPass claims from JWT token via HTTP X- headers. \n", + "type": "boolean" + }, + "redirect_with_javascript": { + "description": "redirect_with_javascript: boolean\nModule: security\nEnable the redirect with Javascript, as opposed to HTTP redirect.\n", + "markdownDescription": "redirect_with_javascript: `boolean` \nModule: `security` \nEnable the redirect with Javascript, as opposed to HTTP redirect. \n", + "type": "boolean" + }, + "strip_token_enabled": { + "description": "strip_token_enabled: boolean\nModule: security\n", + "markdownDescription": "strip_token_enabled: `boolean` \nModule: `security` \n", + "type": "boolean" + }, + "user_identity_field": { + "description": "user_identity_field: string\nModule: security\n", + "markdownDescription": "user_identity_field: `string` \nModule: `security` \n", + "type": "string" + }, + "validate_access_list_path_claim": { + "description": "validate_access_list_path_claim: boolean\nModule: security\nValidate HTTP path derived from JWT token.\n", + "markdownDescription": "validate_access_list_path_claim: `boolean` \nModule: `security` \nValidate HTTP path derived from JWT token. \n", + "type": "boolean" + }, + "validate_bearer_header": { + "description": "validate_bearer_header: boolean\nModule: security\nValidate HTTP Authorization header.\n", + "markdownDescription": "validate_bearer_header: `boolean` \nModule: `security` \nValidate HTTP Authorization header. \n", + "type": "boolean" + }, + "validate_method_path": { + "description": "validate_method_path: boolean\nModule: security\nValidate HTTP method and path.\n", + "markdownDescription": "validate_method_path: `boolean` \nModule: `security` \nValidate HTTP method and path. \n", + "type": "boolean" + }, + "validate_source_address": { + "description": "validate_source_address: boolean\nModule: security\nValidate source address matches between HTTP request and JWT token.\n", + "markdownDescription": "validate_source_address: `boolean` \nModule: `security` \nValidate source address matches between HTTP request and JWT token. \n", + "type": "boolean" + } + } + } + }, + "credentials": { + "description": "credentials: object\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/credentials#Config\nConfig represents a collection of various credentials.\n\n", + "markdownDescription": "credentials: `object` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/credentials#Config) \nConfig represents a collection of various credentials.\n \n", + "type": "object", + "properties": { + "generic": { + "description": "generic: array\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/credentials#Generic\nGeneric represents username and password credentials, with optional\ndomain name field.\n\n", + "markdownDescription": "generic: `array` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/credentials#Generic) \nGeneric represents username and password credentials, with optional\ndomain name field.\n \n", + "type": "array", + "items": { + "description": "https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/credentials#Generic\nGeneric represents username and password credentials, with optional\ndomain name field.\n\n", + "markdownDescription": "[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/credentials#Generic) \nGeneric represents username and password credentials, with optional\ndomain name field.\n \n", + "type": "object", + "properties": { + "domain": { + "description": "domain: string\nModule: security\n", + "markdownDescription": "domain: `string` \nModule: `security` \n", + "type": "string" + }, + "name": { + "description": "name: string\nModule: security\n", + "markdownDescription": "name: `string` \nModule: `security` \n", + "type": "string" + }, + "password": { + "description": "password: string\nModule: security\n", + "markdownDescription": "password: `string` \nModule: `security` \n", + "type": "string" + }, + "username": { + "description": "username: string\nModule: security\n", + "markdownDescription": "username: `string` \nModule: `security` \n", + "type": "string" + } + } + } + } + } + }, + "identity_providers": { + "description": "identity_providers: array\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/idp#IdentityProviderConfig\nIdentityProviderConfig represents an identity provider configuration.\n\n", + "markdownDescription": "identity_providers: `array` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/idp#IdentityProviderConfig) \nIdentityProviderConfig represents an identity provider configuration.\n \n", + "type": "array", + "items": { + "description": "https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/idp#IdentityProviderConfig\nIdentityProviderConfig represents an identity provider configuration.\n\n", + "markdownDescription": "[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/idp#IdentityProviderConfig) \nIdentityProviderConfig represents an identity provider configuration.\n \n", + "type": "object", + "properties": { + "kind": { + "description": "kind: string\nModule: security\n", + "markdownDescription": "kind: `string` \nModule: `security` \n", + "type": "string" + }, + "name": { + "description": "name: string\nModule: security\n", + "markdownDescription": "name: `string` \nModule: `security` \n", + "type": "string" + }, + "params": { + "description": "params: object\nModule: security\n", + "markdownDescription": "params: `object` \nModule: `security` \n", + "type": "object", + "additionalProperties": {} + } + } + } + }, + "identity_stores": { + "description": "identity_stores: array\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/ids#IdentityStoreConfig\nIdentityStoreConfig represents an identity store configuration.\n\n", + "markdownDescription": "identity_stores: `array` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/ids#IdentityStoreConfig) \nIdentityStoreConfig represents an identity store configuration.\n \n", + "type": "array", + "items": { + "description": "https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/ids#IdentityStoreConfig\nIdentityStoreConfig represents an identity store configuration.\n\n", + "markdownDescription": "[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/ids#IdentityStoreConfig) \nIdentityStoreConfig represents an identity store configuration.\n \n", + "type": "object", + "properties": { + "kind": { + "description": "kind: string\nModule: security\n", + "markdownDescription": "kind: `string` \nModule: `security` \n", + "type": "string" + }, + "name": { + "description": "name: string\nModule: security\n", + "markdownDescription": "name: `string` \nModule: `security` \n", + "type": "string" + }, + "params": { + "description": "params: object\nModule: security\n", + "markdownDescription": "params: `object` \nModule: `security` \n", + "type": "object", + "additionalProperties": {} + } + } + } + }, + "messaging": { + "description": "messaging: object\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/messaging#Config\nConfig represents a collection of various messaging providers.\n\n", + "markdownDescription": "messaging: `object` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/messaging#Config) \nConfig represents a collection of various messaging providers.\n \n", + "type": "object", + "properties": { + "email_providers": { + "description": "email_providers: array\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/messaging#EmailProvider\nEmailProvider represents email messaging provider.\n\n", + "markdownDescription": "email_providers: `array` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/messaging#EmailProvider) \nEmailProvider represents email messaging provider.\n \n", + "type": "array", + "items": { + "description": "https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/messaging#EmailProvider\nEmailProvider represents email messaging provider.\n\n", + "markdownDescription": "[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/messaging#EmailProvider) \nEmailProvider represents email messaging provider.\n \n", + "type": "object", + "properties": { + "address": { + "description": "address: string\nModule: security\n", + "markdownDescription": "address: `string` \nModule: `security` \n", + "type": "string" + }, + "blind_carbon_copy": { + "description": "blind_carbon_copy: array\nModule: security\n", + "markdownDescription": "blind_carbon_copy: `array` \nModule: `security` \n", + "type": "array", + "items": { + "type": "string" + } + }, + "credentials": { + "description": "credentials: string\nModule: security\n", + "markdownDescription": "credentials: `string` \nModule: `security` \n", + "type": "string" + }, + "name": { + "description": "name: string\nModule: security\n", + "markdownDescription": "name: `string` \nModule: `security` \n", + "type": "string" + }, + "passwordless": { + "description": "passwordless: boolean\nModule: security\n", + "markdownDescription": "passwordless: `boolean` \nModule: `security` \n", + "type": "boolean" + }, + "protocol": { + "description": "protocol: string\nModule: security\n", + "markdownDescription": "protocol: `string` \nModule: `security` \n", + "type": "string" + }, + "sender_email": { + "description": "sender_email: string\nModule: security\n", + "markdownDescription": "sender_email: `string` \nModule: `security` \n", + "type": "string" + }, + "sender_name": { + "description": "sender_name: string\nModule: security\n", + "markdownDescription": "sender_name: `string` \nModule: `security` \n", + "type": "string" + }, + "templates": { + "description": "templates: object\nModule: security\n", + "markdownDescription": "templates: `object` \nModule: `security` \n", + "type": "object", + "additionalProperties": {} + } + } + } + }, + "file_providers": { + "description": "file_providers: array\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/messaging#FileProvider\nFileProvider represents file messaging provider which writes messages\nto a local file system,\n\n", + "markdownDescription": "file_providers: `array` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/messaging#FileProvider) \nFileProvider represents file messaging provider which writes messages\nto a local file system,\n \n", + "type": "array", + "items": { + "description": "https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/messaging#FileProvider\nFileProvider represents file messaging provider which writes messages\nto a local file system,\n\n", + "markdownDescription": "[godoc](https://pkg.go.dev/github.com/greenpau/go-authcrunch/pkg/messaging#FileProvider) \nFileProvider represents file messaging provider which writes messages\nto a local file system,\n \n", + "type": "object", + "properties": { + "name": { + "description": "name: string\nModule: security\n", + "markdownDescription": "name: `string` \nModule: `security` \n", + "type": "string" + }, + "root_dir": { + "description": "root_dir: string\nModule: security\n", + "markdownDescription": "root_dir: `string` \nModule: `security` \n", + "type": "string" + }, + "templates": { + "description": "templates: object\nModule: security\n", + "markdownDescription": "templates: `object` \nModule: `security` \n", + "type": "object", + "additionalProperties": {} + } + } + } + } + } + }, + "sso_providers": { + "description": "sso_providers: array\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "sso_providers: `array` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "array", + "items": { + "type": "object", + "properties": { + "cert_path": { + "description": "cert_path: string\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "cert_path: `string` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "string" + }, + "driver": { + "description": "driver: string\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "driver: `string` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "string" + }, + "entity_id": { + "description": "entity_id: string\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "entity_id: `string` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "string" + }, + "locations": { + "description": "locations: array\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "locations: `array` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "name: string\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "name: `string` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "string" + }, + "private_key_path": { + "description": "private_key_path: string\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "private_key_path: `string` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "string" + } + } + } + }, + "user_registries": { + "description": "user_registries: array\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "user_registries: `array` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "array", + "items": { + "type": "object", + "properties": { + "admin_emails": { + "description": "admin_emails: array\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "admin_emails: `array` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "array", + "items": { + "type": "string" + } + }, + "code": { + "description": "code: string\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "code: `string` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "string" + }, + "credentials": { + "description": "credentials: object\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "credentials: `object` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "object", + "properties": { + "generic": { + "description": "generic: array\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "generic: `array` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "array", + "items": { + "type": "object", + "properties": { + "domain": { + "description": "domain: string\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "domain: `string` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "string" + }, + "name": { + "description": "name: string\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "name: `string` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "string" + }, + "password": { + "description": "password: string\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "password: `string` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "string" + }, + "username": { + "description": "username: string\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "username: `string` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "string" + } + } + } + } + } + }, + "disabled": { + "description": "disabled: boolean\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "disabled: `boolean` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "boolean" + }, + "dropbox": { + "description": "dropbox: string\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "dropbox: `string` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "string" + }, + "email_provider": { + "description": "email_provider: string\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "email_provider: `string` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "string" + }, + "identity_store": { + "description": "identity_store: string\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "identity_store: `string` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "string" + }, + "messaging": { + "description": "messaging: object\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "messaging: `object` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "object", + "properties": { + "email_providers": { + "description": "email_providers: array\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "email_providers: `array` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "array", + "items": { + "type": "object", + "properties": { + "address": { + "description": "address: string\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "address: `string` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "string" + }, + "blind_carbon_copy": { + "description": "blind_carbon_copy: array\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "blind_carbon_copy: `array` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "array", + "items": { + "type": "string" + } + }, + "credentials": { + "description": "credentials: string\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "credentials: `string` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "string" + }, + "name": { + "description": "name: string\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "name: `string` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "string" + }, + "passwordless": { + "description": "passwordless: boolean\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "passwordless: `boolean` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "boolean" + }, + "protocol": { + "description": "protocol: string\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "protocol: `string` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "string" + }, + "sender_email": { + "description": "sender_email: string\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "sender_email: `string` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "string" + }, + "sender_name": { + "description": "sender_name: string\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "sender_name: `string` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "string" + }, + "templates": { + "description": "templates: object\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "templates: `object` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "object", + "additionalProperties": {} + } + } + } + }, + "file_providers": { + "description": "file_providers: array\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "file_providers: `array` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "description": "name: string\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "name: `string` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "string" + }, + "root_dir": { + "description": "root_dir: string\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "root_dir: `string` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "string" + }, + "templates": { + "description": "templates: object\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "templates: `object` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "object", + "additionalProperties": {} + } + } + } + } + } + }, + "name": { + "description": "name: string\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "name: `string` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "string" + }, + "privacy_policy_link": { + "description": "privacy_policy_link: string\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "privacy_policy_link: `string` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "string" + }, + "require_accept_terms": { + "description": "require_accept_terms: boolean\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "require_accept_terms: `boolean` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "boolean" + }, + "require_domain_mx": { + "description": "require_domain_mx: boolean\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "require_domain_mx: `boolean` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "boolean" + }, + "terms_conditions_link": { + "description": "terms_conditions_link: string\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "terms_conditions_link: `string` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "string" + }, + "title": { + "description": "title: string\nModule: security\nhttps://pkg.go.dev/github.com/greenpau/caddy-security#App", + "markdownDescription": "title: `string` \nModule: `security` \n[godoc](https://pkg.go.dev/github.com/greenpau/caddy-security#App)", + "type": "string" + } + } + } + } + } + } + } + }, "tls": { "description": "tls: object\nModule: tls\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddytls#TLS\nTLS provides TLS facilities including certificate\nloading and management, client auth, and more.\n\n", "markdownDescription": "tls: `object` \nModule: `tls` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddytls#TLS) \nTLS provides TLS facilities including certificate\nloading and management, client auth, and more.\n \n", @@ -6569,18 +9062,6 @@ "module" ], "allOf": [ - { - "if": { - "properties": { - "module": { - "const": "zerossl" - } - } - }, - "then": { - "$ref": "#/definitions/tls.issuance.zerossl" - } - }, { "if": { "properties": { @@ -6605,6 +9086,18 @@ "$ref": "#/definitions/tls.issuance.internal" } }, + { + "if": { + "properties": { + "module": { + "const": "zerossl" + } + } + }, + "then": { + "$ref": "#/definitions/tls.issuance.zerossl" + } + }, { "properties": { "module": { @@ -6612,9 +9105,9 @@ "markdownDescription": "key to identify `issuers` module. \nmodule: `string` \nModule: `tls.issuance`", "type": "string", "enum": [ - "zerossl", "acme", - "internal" + "internal", + "zerossl" ] } } @@ -6659,18 +9152,6 @@ "module" ], "allOf": [ - { - "if": { - "properties": { - "module": { - "const": "consul" - } - } - }, - "then": { - "$ref": "#/definitions/caddy.storage.consul" - } - }, { "if": { "properties": { @@ -6683,6 +9164,18 @@ "$ref": "#/definitions/caddy.storage.file_system" } }, + { + "if": { + "properties": { + "module": { + "const": "consul" + } + } + }, + "then": { + "$ref": "#/definitions/caddy.storage.consul" + } + }, { "properties": { "module": { @@ -6690,8 +9183,8 @@ "markdownDescription": "key to identify `storage` module. \nmodule: `string` \nModule: `caddy.storage`", "type": "string", "enum": [ - "consul", - "file_system" + "file_system", + "consul" ] } } @@ -6968,8 +9461,8 @@ } }, "tls.client_auth.leaf": { - "description": "leaf: any\nModule: tls.client_auth.leaf\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddytls#LeafCertClientAuth", - "markdownDescription": "leaf: `any` \nModule: `tls.client_auth.leaf` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddytls#LeafCertClientAuth)" + "description": "leaf: any\nModule: tls.client_auth.leaf\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddytls#LeafCertClientAuth\nLeafCertClientAuth verifies the client's leaf certificate.\n\n", + "markdownDescription": "leaf: `any` \nModule: `tls.client_auth.leaf` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddytls#LeafCertClientAuth) \nLeafCertClientAuth verifies the client's leaf certificate.\n \n" }, "tls.get_certificate.http": { "description": "http: object\nModule: tls.get_certificate.http\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddytls#HTTPCertGetter\nHTTPCertGetter can get a certificate via HTTP(S) request.\n\n", @@ -7239,8 +9732,8 @@ } }, "tls.issuance.zerossl": { - "description": "zerossl: object\nModule: tls.issuance.zerossl\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddytls#ZeroSSLIssuer\nZeroSSLIssuer makes an ACME manager\nfor managing certificates using ACME.\n\n", - "markdownDescription": "zerossl: `object` \nModule: `tls.issuance.zerossl` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddytls#ZeroSSLIssuer) \nZeroSSLIssuer makes an ACME manager\nfor managing certificates using ACME.\n \n", + "description": "zerossl: object\nModule: tls.issuance.zerossl\nhttps://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddytls#ZeroSSLIssuer\nZeroSSLIssuer makes an ACME issuer for getting certificates\nfrom ZeroSSL by automatically generating EAB credentials.\nPlease be sure to set a valid email address in your config\nso you can access/manage your domains in your ZeroSSL account.\n\nThis issuer is only needed for automatic generation of EAB\ncredentials. If manually configuring/reusing EAB credentials,\nthe standard ACMEIssuer may be used if desired.\n\n", + "markdownDescription": "zerossl: `object` \nModule: `tls.issuance.zerossl` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2/modules/caddytls#ZeroSSLIssuer) \nZeroSSLIssuer makes an ACME issuer for getting certificates\nfrom ZeroSSL by automatically generating EAB credentials.\nPlease be sure to set a valid email address in your config\nso you can access/manage your domains in your ZeroSSL account.\n\nThis issuer is only needed for automatic generation of EAB\ncredentials. If manually configuring/reusing EAB credentials,\nthe standard ACMEIssuer may be used if desired.\n \n", "type": "object", "properties": { "account_key": { @@ -7254,8 +9747,8 @@ "type": "number" }, "api_key": { - "description": "api_key: string\nModule: tls.issuance.zerossl\nThe API key (or \"access key\") for using the ZeroSSL API.\n", - "markdownDescription": "api_key: `string` \nModule: `tls.issuance.zerossl` \nThe API key (or \"access key\") for using the ZeroSSL API. \n", + "description": "api_key: string\nModule: tls.issuance.zerossl\nThe API key (or \"access key\") for using the ZeroSSL API.\nThis is optional, but can be used if you have an API key\nalready and don't want to supply your email address.\n", + "markdownDescription": "api_key: `string` \nModule: `tls.issuance.zerossl` \nThe API key (or \"access key\") for using the ZeroSSL API.\nThis is optional, but can be used if you have an API key\nalready and don't want to supply your email address. \n", "type": "string" }, "ca": { @@ -7717,6 +10210,12 @@ "markdownDescription": "apps: `object` \n[godoc](https://pkg.go.dev/github.com/caddyserver/caddy/v2#ModuleMap) \nAppsRaw are the apps that Caddy will load and run. The\napp module name is the key, and the app's config is the\nassociated value.\n\n\nModuleMap is a map that can contain multiple modules,\nwhere the map key is the module's name. (The namespace\nis usually read from an associated field's struct tag.)\nBecause the module's name is given as the key in a\nmodule map, the name does not have to be given in the\njson.RawMessage. \n", "type": "object", "properties": { + "cache": { + "$ref": "#/definitions/cache" + }, + "events": { + "$ref": "#/definitions/events" + }, "http": { "$ref": "#/definitions/http" }, @@ -7726,6 +10225,9 @@ "pki": { "$ref": "#/definitions/pki" }, + "security": { + "$ref": "#/definitions/security" + }, "tls": { "$ref": "#/definitions/tls" } @@ -7953,6 +10455,30 @@ "output" ], "allOf": [ + { + "if": { + "properties": { + "output": { + "const": "discard" + } + } + }, + "then": { + "$ref": "#/definitions/caddy.logging.writers.discard" + } + }, + { + "if": { + "properties": { + "output": { + "const": "file" + } + } + }, + "then": { + "$ref": "#/definitions/caddy.logging.writers.file" + } + }, { "if": { "properties": { @@ -7989,30 +10515,6 @@ "$ref": "#/definitions/caddy.logging.writers.stdout" } }, - { - "if": { - "properties": { - "output": { - "const": "discard" - } - } - }, - "then": { - "$ref": "#/definitions/caddy.logging.writers.discard" - } - }, - { - "if": { - "properties": { - "output": { - "const": "file" - } - } - }, - "then": { - "$ref": "#/definitions/caddy.logging.writers.file" - } - }, { "properties": { "output": { @@ -8020,11 +10522,11 @@ "markdownDescription": "key to identify `writer` module. \noutput: `string` \nModule: `caddy.logging.writers`", "type": "string", "enum": [ + "discard", + "file", "net", "stderr", - "stdout", - "discard", - "file" + "stdout" ] } }