Files
2026-07-13 12:32:21 +08:00

313 lines
7.6 KiB
Lua

local plugins = {
"jwt",
"acl",
"correlation-id",
"cors",
"oauth2",
"tcp-log",
"udp-log",
"file-log",
"http-log",
"key-auth",
"hmac-auth",
"basic-auth",
"ip-restriction",
"request-transformer",
"response-transformer",
"request-size-limiting",
"rate-limiting",
"response-ratelimiting",
"syslog",
"loggly",
"datadog",
"ldap-auth",
"statsd",
"bot-detection",
"aws-lambda",
"request-termination",
"prometheus",
"proxy-cache",
"session",
"acme",
"grpc-gateway",
"grpc-web",
"pre-function",
"post-function",
"azure-functions",
"zipkin",
"opentelemetry",
"ai-proxy",
"ai-prompt-decorator",
"ai-prompt-template",
"ai-prompt-guard",
"ai-request-transformer",
"ai-response-transformer",
"standard-webhooks",
"redirect"
}
local plugin_map = {}
for i = 1, #plugins do
plugin_map[plugins[i]] = true
end
local deprecated_plugins = {} -- no currently deprecated plugin
local deprecated_plugin_map = {}
for _, plugin in ipairs(deprecated_plugins) do
deprecated_plugin_map[plugin] = true
end
local vaults = {
"env",
}
local vault_map = {}
for i = 1, #vaults do
vault_map[vaults[i]] = true
end
local deprecated_vaults = {} -- no currently deprecated vaults
local deprecated_vault_map = {}
for _, vault in ipairs(deprecated_vaults) do
deprecated_vault_map[vault] = true
end
local protocols_with_subsystem = {
http = "http",
https = "http",
tcp = "stream",
tls = "stream",
udp = "stream",
tls_passthrough = "stream",
grpc = "http",
grpcs = "http",
}
local protocols = {}
for p,_ in pairs(protocols_with_subsystem) do
protocols[#protocols + 1] = p
end
table.sort(protocols)
local key_formats_map = {
["jwk"] = true,
["pem"] = true,
}
local key_formats = {}
for k in pairs(key_formats_map) do
key_formats[#key_formats + 1] = k
end
local constants = {
CJSON_MAX_PRECISION = 16,
BUNDLED_PLUGINS = plugin_map,
DEPRECATED_PLUGINS = deprecated_plugin_map,
BUNDLED_VAULTS = vault_map,
DEPRECATED_VAULTS = deprecated_vault_map,
-- non-standard headers, specific to Kong
HEADERS = {
HOST_OVERRIDE = "X-Host-Override",
PROXY_LATENCY = "X-Kong-Proxy-Latency",
RESPONSE_LATENCY = "X-Kong-Response-Latency",
ADMIN_LATENCY = "X-Kong-Admin-Latency",
UPSTREAM_LATENCY = "X-Kong-Upstream-Latency",
UPSTREAM_STATUS = "X-Kong-Upstream-Status",
CONSUMER_ID = "X-Consumer-ID",
CONSUMER_CUSTOM_ID = "X-Consumer-Custom-ID",
CONSUMER_USERNAME = "X-Consumer-Username",
CREDENTIAL_IDENTIFIER = "X-Credential-Identifier",
RATELIMIT_LIMIT = "X-RateLimit-Limit",
RATELIMIT_REMAINING = "X-RateLimit-Remaining",
CONSUMER_GROUPS = "X-Consumer-Groups",
AUTHENTICATED_GROUPS = "X-Authenticated-Groups",
FORWARDED_HOST = "X-Forwarded-Host",
FORWARDED_PATH = "X-Forwarded-Path",
FORWARDED_PREFIX = "X-Forwarded-Prefix",
ANONYMOUS = "X-Anonymous-Consumer",
REQUEST_ID = "X-Kong-Request-Id",
VIA = "Via",
SERVER = "Server"
},
-- Notice that the order in which they are listed is important:
-- schemas of dependencies need to be loaded first.
--
-- This table doubles as a set (e.g. CORE_ENTITIES["routes"] = true)
-- (see below where the set entries are populated)
CORE_ENTITIES = {
"workspaces",
"consumers",
"certificates",
"services",
"routes",
"snis",
"upstreams",
"targets",
"plugins",
"tags",
"ca_certificates",
"clustering_data_planes",
"parameters",
"vaults",
"key_sets",
"keys",
"filter_chains",
},
ENTITY_CACHE_STORE = setmetatable({
consumers = "cache",
certificates = "core_cache",
services = "core_cache",
routes = "core_cache",
snis = "core_cache",
upstreams = "core_cache",
targets = "core_cache",
plugins = "core_cache",
tags = "cache",
ca_certificates = "core_cache",
vaults = "core_cache",
key_sets = "core_cache",
keys = "core_cache",
}, {
__index = function()
return "cache"
end
}),
RATELIMIT = {
PERIODS = {
"second",
"minute",
"hour",
"day",
"month",
"year"
}
},
REPORTS = {
ADDRESS = "kong-hf.konghq.com",
STATS_TLS_PORT = 61833,
},
DICTS = {
"kong",
"kong_locks",
"kong_db_cache",
"kong_db_cache_miss",
"kong_cluster_events",
"kong_healthchecks",
"kong_rate_limiting_counters",
"kong_secrets",
},
DATABASE = {
POSTGRES = {
MIN = "9.5",
},
-- a bit over three years maximum to make it more safe against
-- integer overflow (time() + ttl)
DAO_MAX_TTL = 1e8,
},
PROTOCOLS = protocols,
PROTOCOLS_WITH_SUBSYSTEM = protocols_with_subsystem,
DECLARATIVE_DEFAULT_WORKSPACE_ID = "0dc6f45b-8f8d-40d2-a504-473544ee190b",
DECLARATIVE_LOAD_KEY = "declarative_config:loaded",
DECLARATIVE_HASH_KEY = "declarative_config:hash",
DECLARATIVE_DEFAULT_WORKSPACE_KEY = "declarative_config:default_workspace",
PLUGINS_REBUILD_COUNTER_KEY = "readiness_probe_config:plugins_rebuild_counter",
ROUTERS_REBUILD_COUNTER_KEY = "readiness_probe_config:routers_rebuild_counter",
DECLARATIVE_EMPTY_CONFIG_HASH = string.rep("0", 32),
CLUSTER_ID_PARAM_KEY = "cluster_id",
CLUSTERING_SYNC_STATUS = {
{ UNKNOWN = "unknown", },
{ NORMAL = "normal", },
{ KONG_VERSION_INCOMPATIBLE = "kong_version_incompatible", },
{ PLUGIN_SET_INCOMPATIBLE = "plugin_set_incompatible", },
{ PLUGIN_VERSION_INCOMPATIBLE = "plugin_version_incompatible", },
{ FILTER_SET_INCOMPATIBLE = "filter_set_incompatible", },
},
CLUSTERING_TIMEOUT = 5000, -- 5 seconds
CLUSTERING_PING_INTERVAL = 30, -- 30 seconds
CLUSTERING_OCSP_TIMEOUT = 5000, -- 5 seconds
CLUSTERING_DATA_PLANE_ERROR = {
CONFIG_PARSE = "declarative configuration parse failure",
DELTAS_PARSE = "sync deltas parse failure",
RELOAD = "configuration reload failed",
GENERIC = "generic or unknown error",
},
CLUSTERING_DATA_PLANES_LATEST_VERSION_KEY = "clustering_data_planes:latest_version",
CLEAR_HEALTH_STATUS_DELAY = 300, -- 300 seconds
KEY_FORMATS_MAP = key_formats_map,
KEY_FORMATS = key_formats,
LOG_LEVELS = {
debug = ngx.DEBUG,
info = ngx.INFO,
notice = ngx.NOTICE,
warn = ngx.WARN,
error = ngx.ERR,
crit = ngx.CRIT,
alert = ngx.ALERT,
emerg = ngx.EMERG,
[ngx.DEBUG] = "debug",
[ngx.INFO] = "info",
[ngx.NOTICE] = "notice",
[ngx.WARN] = "warn",
[ngx.ERR] = "error",
[ngx.CRIT] = "crit",
[ngx.ALERT] = "alert",
[ngx.EMERG] = "emerg",
},
DYN_LOG_LEVEL_KEY = "kong:dyn_log_level",
DYN_LOG_LEVEL_TIMEOUT_AT_KEY = "kong:dyn_log_level_timeout_at",
DYN_LOG_LEVEL_DEFAULT_TIMEOUT = 60,
ADMIN_GUI_KCONFIG_CACHE_KEY = "admin:gui:kconfig",
REQUEST_DEBUG_TOKEN_FILE = ".request_debug_token",
REQUEST_DEBUG_LOG_PREFIX = "[request-debug]",
SCHEMA_NAMESPACES = {
PROXY_WASM_FILTERS = "proxy-wasm-filters",
},
RESPONSE_SOURCE = {
TYPES = {
ERROR = "error",
EXIT = "exit",
SERVICE = "service",
},
NAMES = {
error = "kong",
exit = "kong",
service = "upstream",
}
},
SOCKET_DIRECTORY = "sockets",
SOCKETS = {
WORKER_EVENTS = "we",
STREAM_WORKER_EVENTS = "sw",
CLUSTER_PROXY_SSL_TERMINATOR = "cp",
STREAM_CONFIG = "sc",
STREAM_TLS_TERMINATE = "st",
STREAM_TLS_PASSTHROUGH = "sp",
STREAM_RPC = "rp",
},
}
for _, v in ipairs(constants.CLUSTERING_SYNC_STATUS) do
local k, v = next(v)
constants.CLUSTERING_SYNC_STATUS[k] = v
end
-- Make the CORE_ENTITIES table usable both as an ordered array and as a set
for _, v in ipairs(constants.CORE_ENTITIES) do
constants.CORE_ENTITIES[v] = true
end
return constants