net.http.server: Delay host checks until after host-less event
This allows handling events without any hosts enabled.
--- a/net/http/server.lua Sat Sep 22 00:02:16 2018 +0200
+++ b/net/http/server.lua Sun Sep 23 18:59:04 2018 +0200
@@ -217,14 +217,6 @@
local err_code, err;
if not request.path then
err_code, err = 400, "Invalid path";
- elseif not hosts[host] then
- if hosts[default_host] then
- host = default_host;
- elseif host then
- err_code, err = 404, "Unknown host: "..host;
- else
- err_code, err = 400, "Missing or invalid 'Host' header";
- end
end
if err then
@@ -234,11 +226,28 @@
end
local global_event = request.method.." "..request.path:match("[^?]*");
- local host_event = request.method.." "..host..request.path:match("[^?]*");
+
local payload = { request = request, response = response };
log("debug", "Firing event: %s", global_event);
local result = events.fire_event(global_event, payload);
if result == nil then
+ if not hosts[host] then
+ if hosts[default_host] then
+ host = default_host;
+ elseif host then
+ err_code, err = 404, "Unknown host: "..host;
+ else
+ err_code, err = 400, "Missing or invalid 'Host' header";
+ end
+ end
+ local host_event = request.method.." "..host..request.path:match("[^?]*");
+
+ if err then
+ response.status_code = err_code;
+ response:send(events.fire_event("http-error", { code = err_code, message = err, response = response }));
+ return;
+ end
+
log("debug", "Firing event: %s", host_event);
result = events.fire_event(host_event, payload);
end