mod_http: Unhook CORS related event handlers

Prevents CORS related handlers from being left over on reload.

BC: `mod_http.apps[app_name][event_name]` is now a table instead of the
main handler function.
This commit is contained in:
Kim Alvefur 2019-10-10 20:46:27 +02:00
parent 4394dbf275
commit 8340ca2b18

View file

@ -154,7 +154,11 @@ function module.add_host(module)
module:hook_object_event(server, event_name:sub(1, -2), redir_handler, -1);
end
if not app_handlers[event_name] then
app_handlers[event_name] = handler;
app_handlers[event_name] = {
main = handler;
cors = cors_handler;
options = options_handler;
};
module:hook_object_event(server, event_name, handler);
module:hook_object_event(server, event_name, cors_handler, 1);
module:hook_object_event(server, options_event_name, options_handler, -1);
@ -176,8 +180,11 @@ function module.add_host(module)
local function http_app_removed(event)
local app_handlers = apps[event.item.name];
apps[event.item.name] = nil;
for event_name, handler in pairs(app_handlers) do
module:unhook_object_event(server, event_name, handler);
for event_name, handlers in pairs(app_handlers) do
module:unhook_object_event(server, event_name, handlers.main);
module:unhook_object_event(server, event_name, handlers.cors);
local options_event_name = event_name:gsub("^%S+", "OPTIONS");
module:unhook_object_event(server, options_event_name, handlers.options);
end
end