use request uri and regex to choose callbacks
This commit is contained in:
parent
766b1d2aff
commit
eefdecb1e9
42
main.lua
42
main.lua
|
@ -12,33 +12,45 @@ function log(msg)
|
||||||
end
|
end
|
||||||
|
|
||||||
local WANTED_SCRIPTS = {
|
local WANTED_SCRIPTS = {
|
||||||
'scripts.webfinger_allowlist'
|
['scripts.webfinger_allowlist'] = {accounts = {"example@example.com"}}
|
||||||
}
|
}
|
||||||
|
|
||||||
local compiled_chain = {}
|
local compiled_chain = {}
|
||||||
|
|
||||||
for _, module_name in pairs(WANTED_SCRIPTS) do
|
for module_name, module_config in pairs(WANTED_SCRIPTS) do
|
||||||
log('load module', module_name)
|
module = require(module_name)
|
||||||
mod = require(module_name)
|
table.insert(compiled_chain, {module, module_config})
|
||||||
log('load module', mod)
|
|
||||||
table.insert(compiled_chain, mod)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local function onRequest()
|
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 = filter[1], filter[2]
|
||||||
|
|
||||||
|
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})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
log('AWOOOOGA')
|
log('AWOOOOGA')
|
||||||
|
|
||||||
for _,mod in ipairs(compiled_chain) do
|
for _,tuple in ipairs(callbacks_to_call) do
|
||||||
log(mod)
|
local callback_function, config = tuple[1], tuple[2]
|
||||||
local mod_config = {accounts = {"a@a.com"}}
|
local result, body = callback_function(config)
|
||||||
local result, body = mod.callback(mod_config)
|
log(result)
|
||||||
log(result)
|
log(body)
|
||||||
log(body)
|
if not result then
|
||||||
if not result then
|
|
||||||
ngx.status = 400
|
ngx.status = 400
|
||||||
ngx.say(body or "request denied")
|
ngx.say(body or "request denied")
|
||||||
ngx.exit(400)
|
ngx.exit(400)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
return onRequest
|
return onRequest
|
||||||
|
|
|
@ -6,6 +6,11 @@ function webfingerCallback(cfg)
|
||||||
|
|
||||||
local resource = args['resource']
|
local resource = args['resource']
|
||||||
if resource ~= nil then
|
if resource ~= nil then
|
||||||
|
-- TODO this is O(n) but we can make it O(1) by doing a funny and making
|
||||||
|
-- cfg.accounts be transformed into keys in a table
|
||||||
|
--
|
||||||
|
-- this would require us to do some setup() callback as well as
|
||||||
|
-- the request() callback
|
||||||
for _, account in ipairs(cfg.accounts) do
|
for _, account in ipairs(cfg.accounts) do
|
||||||
if resource == account then
|
if resource == account then
|
||||||
return true
|
return true
|
||||||
|
@ -27,7 +32,6 @@ return {
|
||||||
Useful for small instances.
|
Useful for small instances.
|
||||||
]],
|
]],
|
||||||
apiVersion=1,
|
apiVersion=1,
|
||||||
callback=webfingerCallback,
|
|
||||||
callbacks = {
|
callbacks = {
|
||||||
['/.well-known/webfinger'] = webfingerCallback
|
['/.well-known/webfinger'] = webfingerCallback
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue