79 lines
4.1 KiB
Lua
79 lines
4.1 KiB
Lua
local typedefs = require "kong.db.schema.typedefs"
|
|
local url = require "socket.url"
|
|
|
|
|
|
return {
|
|
name = "http-log",
|
|
fields = {
|
|
{ protocols = typedefs.protocols },
|
|
{ config = {
|
|
type = "record",
|
|
fields = {
|
|
{ http_endpoint = typedefs.url({ required = true, encrypted = true, referenceable = true }) }, -- encrypted = true is a Kong-Enterprise exclusive feature, does nothing in Kong CE
|
|
{ method = { description = "An optional method used to send data to the HTTP server. Supported values are `POST` (default), `PUT`, and `PATCH`.", type = "string", default = "POST", one_of = { "POST", "PUT", "PATCH" }, }, },
|
|
{ content_type = { description = "Indicates the type of data sent. The only available option is `application/json`.", type = "string", default = "application/json", one_of = { "application/json", "application/json; charset=utf-8" }, }, },
|
|
{ timeout = { description = "An optional timeout in milliseconds when sending data to the upstream server.", type = "number", default = 10000 }, },
|
|
{ keepalive = { description = "An optional value in milliseconds that defines how long an idle connection will live before being closed.", type = "number", default = 60000 }, },
|
|
{ retry_count = {
|
|
description = "Number of times to retry when sending data to the upstream server.",
|
|
type = "integer",
|
|
deprecation = {
|
|
message = "http-log: config.retry_count no longer works, please use config.queue.max_retry_time instead",
|
|
removal_in_version = "4.0",
|
|
old_default = 10 }, }, },
|
|
{ queue_size = {
|
|
description = "Maximum number of log entries to be sent on each message to the upstream server.",
|
|
type = "integer",
|
|
deprecation = {
|
|
message = "http-log: config.queue_size is deprecated, please use config.queue.max_batch_size instead",
|
|
removal_in_version = "4.0",
|
|
old_default = 1 }, }, },
|
|
{ flush_timeout = {
|
|
description = "Optional time in seconds. If `queue_size` > 1, this is the max idle time before sending a log with less than `queue_size` records.",
|
|
type = "number",
|
|
deprecation = {
|
|
message = "http-log: config.flush_timeout is deprecated, please use config.queue.max_coalescing_delay instead",
|
|
removal_in_version = "4.0",
|
|
old_default = 2 }, }, },
|
|
{ headers = { description = "An optional table of headers included in the HTTP message to the upstream server. Values are indexed by header name, and each header name accepts a single string.", type = "map",
|
|
keys = typedefs.header_name {
|
|
match_none = {
|
|
{
|
|
pattern = "^[Hh][Oo][Ss][Tt]$",
|
|
err = "cannot contain 'Host' header",
|
|
},
|
|
{
|
|
pattern = "^[Cc][Oo][Nn][Tt][Ee][Nn][Tt]%-[Ll][Ee][nn][Gg][Tt][Hh]$",
|
|
err = "cannot contain 'Content-Length' header",
|
|
},
|
|
{
|
|
pattern = "^[Cc][Oo][Nn][Tt][Ee][Nn][Tt]%-[Tt][Yy][Pp][Ee]$",
|
|
err = "cannot contain 'Content-Type' header",
|
|
},
|
|
},
|
|
},
|
|
values = {
|
|
type = "string",
|
|
referenceable = true,
|
|
},
|
|
}},
|
|
{ queue = typedefs.queue },
|
|
{ custom_fields_by_lua = typedefs.lua_code },
|
|
},
|
|
custom_validator = function(config)
|
|
-- check no double userinfo + authorization header
|
|
local parsed_url = url.parse(config.http_endpoint)
|
|
if parsed_url.userinfo and config.headers and config.headers ~= ngx.null then
|
|
for hname, hvalue in pairs(config.headers) do
|
|
if hname:lower() == "authorization" then
|
|
return false, "specifying both an 'Authorization' header and user info in 'http_endpoint' is not allowed"
|
|
end
|
|
end
|
|
end
|
|
return true
|
|
end,
|
|
},
|
|
},
|
|
},
|
|
}
|