aproxy/main.lua

59 lines
1.6 KiB
Lua

local CONFIG_PATH = ".;/etc/aproxy"
-- function loadConfig()
-- -- TODO load config_path
-- return require("./config.lua")
-- end
--
-- local config = loadConfig()
function log(msg)
ngx.log(ngx.STDERR, tostring(msg))
end
local WANTED_SCRIPTS = {
['scripts.webfinger_allowlist'] = {accounts = {"example@example.com"}}
}
local compiled_chain = {}
for module_name, module_config in pairs(WANTED_SCRIPTS) do
local module = require(module_name)
local module_state = module.init(module_config)
-- TODO is it possible to make module_config readonly?
table.insert(compiled_chain, {module, module_config, module_state})
end
local function onRequest()
local request_uri = ngx.var.uri
-- find out which modules to call based on their regexes
local callbacks_to_call = {}
for _, filter in ipairs(compiled_chain) do
local module, module_config, state = unpack(filter)
for callback_regex, callback_function in pairs(module.callbacks) do
local match, error = ngx.re.match(request_uri, callback_regex)
if match then
table.insert(callbacks_to_call, {callback_function, module_config, state})
end
end
end
log('AWOOOOGA')
for _,tuple in ipairs(callbacks_to_call) do
local callback_function, config = tuple[1], tuple[2]
local result, body = callback_function(config)
log(result)
log(body)
if not result then
ngx.status = 400
ngx.say(body or "request denied")
ngx.exit(400)
end
end
end
return onRequest