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

88 lines
2.3 KiB
Lua

local MetaSchema = require "kong.db.schema.metaschema"
local Entity = require "kong.db.schema.entity"
local plugin_servers = require "kong.runloop.plugin_servers"
local wasm_plugins = require "kong.runloop.wasm.plugins"
local is_array = require "kong.tools.table".is_array
local load_module_if_exists = require "kong.tools.module".load_module_if_exists
local fmt = string.format
local tostring = tostring
local plugin_loader = {}
function plugin_loader.load_subschema(parent_schema, plugin, errors)
local plugin_schema = "kong.plugins." .. plugin .. ".schema"
local ok, schema = load_module_if_exists(plugin_schema)
if not ok then
ok, schema = wasm_plugins.load_schema(plugin)
end
if not ok then
ok, schema = plugin_servers.load_schema(plugin)
end
if not ok then
return nil, "no configuration schema found for plugin: " .. plugin
end
local err_t
ok, err_t = MetaSchema.MetaSubSchema:validate(schema)
if not ok then
return nil, tostring(errors:schema_violation(err_t))
end
local err
ok, err = Entity.new_subschema(parent_schema, plugin, schema)
if not ok then
return nil, "error initializing schema for plugin: " .. err
end
return schema
end
function plugin_loader.load_entity_schema(plugin, schema_def, errors)
local _, err_t = MetaSchema:validate(schema_def)
if err_t then
return nil, fmt("schema of custom plugin entity '%s.%s' is invalid: %s",
plugin, schema_def.name, tostring(errors:schema_violation(err_t)))
end
local schema, err = Entity.new(schema_def)
if err then
return nil, fmt("schema of custom plugin entity '%s.%s' is invalid: %s",
plugin, schema_def.name, err)
end
return schema
end
function plugin_loader.load_entities(plugin, errors, loader_fn)
local has_daos, daos_schemas = load_module_if_exists("kong.plugins." .. plugin .. ".daos")
if not has_daos then
return {}
end
if not is_array(daos_schemas, "strict") then
return nil, fmt("custom plugin '%s' returned non-array daos definition table", plugin)
end
local res = {}
local schema_def, ret, err
for i = 1, #daos_schemas do
schema_def = daos_schemas[i]
ret, err = loader_fn(plugin, schema_def, errors)
if err then
return nil, err
end
res[schema_def.name] = ret
end
return res
end
return plugin_loader