Files
kong--kong/kong/plugins/request-termination/handler.lua
T
2026-07-13 12:32:21 +08:00

78 lines
2.0 KiB
Lua

local kong = kong
local kong_meta = require "kong.meta"
local DEFAULT_RESPONSE = {
[401] = "Unauthorized",
[404] = "Not found",
[405] = "Method not allowed",
[500] = "An unexpected error occurred",
[502] = "Bad Gateway",
[503] = "Service unavailable",
}
local RequestTerminationHandler = {}
RequestTerminationHandler.PRIORITY = 2
RequestTerminationHandler.VERSION = kong_meta.version
function RequestTerminationHandler:access(conf)
local status = conf.status_code
local content = conf.body
local req_headers, req_query
if conf.trigger or conf.echo then
req_headers = kong.request.get_headers()
req_query = kong.request.get_query()
if conf.trigger
and not req_headers[conf.trigger]
and not req_query[conf.trigger] then
return -- trigger set but not found, nothing to do
end
end
if conf.echo then
content = {
message = conf.message or DEFAULT_RESPONSE[status],
kong = {
node_id = kong.node.get_id(),
worker_pid = ngx.worker.pid(),
hostname = kong.node.get_hostname(),
},
request = {
scheme = kong.request.get_scheme(),
host = kong.request.get_host(),
port = kong.request.get_port(),
headers = req_headers,
query = req_query,
body = kong.request.get_body(),
raw_body = kong.request.get_raw_body(),
method = kong.request.get_method(),
path = kong.request.get_path(),
uri_captures = kong.request.get_uri_captures(),
},
matched_route = kong.router.get_route(),
matched_service = kong.router.get_service(),
}
return kong.response.exit(status, content)
end
if content then
local headers = {
["Content-Type"] = conf.content_type
}
return kong.response.exit(status, content, headers)
end
local message = conf.message or DEFAULT_RESPONSE[status]
return kong.response.exit(status, message and { message = message } or nil)
end
return RequestTerminationHandler