73 lines
1.7 KiB
Lua
73 lines
1.7 KiB
Lua
--------------------------------------------------------------------------------
|
|
-- Kong plugin interface for Wasm filters
|
|
--------------------------------------------------------------------------------
|
|
local typedefs = require "kong.db.schema.typedefs"
|
|
local wasm = require "kong.runloop.wasm"
|
|
|
|
|
|
local wasm_filter_config
|
|
|
|
-- lazily load the filter schema as late as possible because it may-or-may-not
|
|
-- branch based on the contents of `kong.configuration`
|
|
local function load_filter_config_schema()
|
|
if not wasm_filter_config then
|
|
local wasm_filter = require "kong.db.schema.others.wasm_filter"
|
|
|
|
for i = 1, #wasm_filter.fields do
|
|
local field = wasm_filter.fields[i]
|
|
local k, v = next(field)
|
|
if k == "config" then
|
|
wasm_filter_config = v
|
|
break
|
|
end
|
|
end
|
|
assert(wasm_filter_config)
|
|
end
|
|
|
|
return wasm_filter_config
|
|
end
|
|
|
|
|
|
local plugins = {}
|
|
|
|
|
|
function plugins.load_plugin(name)
|
|
if not wasm.filters_by_name[name] then
|
|
return false, "no such Wasm plugin"
|
|
end
|
|
|
|
-- XXX: in the future these values may be sourced from filter metadata
|
|
local handler = {
|
|
PRIORITY = 0,
|
|
VERSION = "0.1.0",
|
|
}
|
|
|
|
return true, handler
|
|
end
|
|
|
|
|
|
function plugins.load_schema(name)
|
|
if not wasm.filters_by_name[name] then
|
|
return false, "no such Wasm plugin"
|
|
end
|
|
|
|
local schema = {
|
|
name = name,
|
|
fields = {
|
|
{ name = { type = "string" } },
|
|
{ consumer = typedefs.no_consumer },
|
|
{ protocols = typedefs.protocols_http },
|
|
{ config = load_filter_config_schema() },
|
|
},
|
|
entity_checks = {
|
|
{ mutually_exclusive = { "service", "route", } },
|
|
{ at_least_one_of = { "service", "route", } },
|
|
},
|
|
}
|
|
|
|
return true, schema
|
|
end
|
|
|
|
|
|
return plugins
|