init commit
This commit is contained in:
62
plugins/plugin.lua
Normal file
62
plugins/plugin.lua
Normal file
@@ -0,0 +1,62 @@
|
||||
local log = require("core.log")
|
||||
local ctx = require("core.ctx")
|
||||
local json = require("core.json")
|
||||
|
||||
local _M = {version = 0.2}
|
||||
|
||||
local phases = {
|
||||
request = {
|
||||
'access',
|
||||
'rewrite'
|
||||
},
|
||||
response = {
|
||||
'header_filter',
|
||||
'body_filter'
|
||||
}
|
||||
}
|
||||
|
||||
function _M.run(handle, phase, plugins)
|
||||
if not plugins or #plugins == 0 then
|
||||
return ctx
|
||||
end
|
||||
|
||||
local resp_header = {}
|
||||
|
||||
local context = {
|
||||
headers = handle:headers(),
|
||||
body = handle:body(),
|
||||
log = log.new(handle),
|
||||
var = ctx.set_vars_meta(handle),
|
||||
}
|
||||
|
||||
function context.set_resp_header(key, value)
|
||||
resp_header[key] = value
|
||||
end
|
||||
|
||||
for _, plugin in ipairs(plugins) do
|
||||
local ok, plugin_object = pcall(require, "plugins." .. plugin.name)
|
||||
if ok then
|
||||
local earth_phases = phases[phase]
|
||||
for _, phase_name in ipairs(earth_phases) do
|
||||
local phase_func = plugin_object[phase_name]
|
||||
if type(phase_func) == "function" then
|
||||
handle:logTrace("phase_name: " .. plugin.name .. "." .. phase_name)
|
||||
local status, body = phase_func(plugin.conf, context)
|
||||
if status then
|
||||
resp_header[":status"] = status
|
||||
if type(body) == "table" then
|
||||
body = json.encode(body)
|
||||
end
|
||||
return handle:respond(resp_header, body)
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
handle:logWarn("failed to load plugin ["..plugin.name.."] err: "..plugin_object)
|
||||
end
|
||||
end
|
||||
|
||||
return ctx
|
||||
end
|
||||
|
||||
return _M
|
||||
Reference in New Issue
Block a user