99 lines
2.2 KiB
Lua
99 lines
2.2 KiB
Lua
local typedefs = require "kong.db.schema.typedefs"
|
|
local validate_header_name = require("kong.tools.http").validate_header_name
|
|
|
|
|
|
local function validate_headers(pair, validate_value)
|
|
local name, value = pair:match("^([^:]+):*(.-)$")
|
|
if validate_header_name(name) == nil then
|
|
return nil, string.format("'%s' is not a valid header", tostring(name))
|
|
end
|
|
|
|
if validate_value then
|
|
if validate_header_name(value) == nil then
|
|
return nil, string.format("'%s' is not a valid header", tostring(value))
|
|
end
|
|
end
|
|
return true
|
|
end
|
|
|
|
|
|
local function validate_colon_headers(pair)
|
|
return validate_headers(pair, true)
|
|
end
|
|
|
|
local string_array = {
|
|
type = "array",
|
|
default = {},
|
|
required = true,
|
|
elements = { type = "string" },
|
|
}
|
|
|
|
|
|
local colon_string_array = {
|
|
type = "array",
|
|
default = {},
|
|
required = true,
|
|
elements = { type = "string", match = "^[^:]+:.*$" },
|
|
}
|
|
|
|
|
|
local string_record = {
|
|
type = "record",
|
|
fields = {
|
|
{ json = string_array },
|
|
{ headers = string_array },
|
|
},
|
|
}
|
|
|
|
|
|
local colon_string_record = {
|
|
type = "record",
|
|
fields = {
|
|
{ json = colon_string_array },
|
|
{ json_types = { description = "List of JSON type names. Specify the types of the JSON values returned when appending\nJSON properties. Each string element can be one of: boolean, number, or string.", type = "array",
|
|
default = {},
|
|
required = true,
|
|
elements = {
|
|
type = "string",
|
|
one_of = { "boolean", "number", "string" }
|
|
}
|
|
} },
|
|
{ headers = colon_string_array },
|
|
},
|
|
}
|
|
|
|
local colon_headers_array = {
|
|
type = "array",
|
|
default = {},
|
|
required = true,
|
|
elements = { type = "string", match = "^[^:]+:.*$", custom_validator = validate_colon_headers },
|
|
}
|
|
|
|
|
|
local colon_rename_strings_array_record = {
|
|
type = "record",
|
|
fields = {
|
|
{ json = colon_string_array },
|
|
{ headers = colon_headers_array }
|
|
},
|
|
}
|
|
|
|
|
|
return {
|
|
name = "response-transformer",
|
|
fields = {
|
|
{ protocols = typedefs.protocols_http },
|
|
{ config = {
|
|
type = "record",
|
|
fields = {
|
|
{ remove = string_record },
|
|
{ rename = colon_rename_strings_array_record },
|
|
{ replace = colon_string_record },
|
|
{ add = colon_string_record },
|
|
{ append = colon_string_record },
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|