Software / code / prosody
Comparison
net/http/server.lua @ 9379:866cba3689f4
net.http.server: Delay host checks until after host-less event
This allows handling events without any hosts enabled.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sun, 23 Sep 2018 18:59:04 +0200 |
| parent | 9375:816591db764d |
| child | 9562:acf74ad0b795 |
comparison
equal
deleted
inserted
replaced
| 9378:a6f54df39624 | 9379:866cba3689f4 |
|---|---|
| 215 | 215 |
| 216 -- Some sanity checking | 216 -- Some sanity checking |
| 217 local err_code, err; | 217 local err_code, err; |
| 218 if not request.path then | 218 if not request.path then |
| 219 err_code, err = 400, "Invalid path"; | 219 err_code, err = 400, "Invalid path"; |
| 220 elseif not hosts[host] then | |
| 221 if hosts[default_host] then | |
| 222 host = default_host; | |
| 223 elseif host then | |
| 224 err_code, err = 404, "Unknown host: "..host; | |
| 225 else | |
| 226 err_code, err = 400, "Missing or invalid 'Host' header"; | |
| 227 end | |
| 228 end | 220 end |
| 229 | 221 |
| 230 if err then | 222 if err then |
| 231 response.status_code = err_code; | 223 response.status_code = err_code; |
| 232 response:send(events.fire_event("http-error", { code = err_code, message = err, response = response })); | 224 response:send(events.fire_event("http-error", { code = err_code, message = err, response = response })); |
| 233 return; | 225 return; |
| 234 end | 226 end |
| 235 | 227 |
| 236 local global_event = request.method.." "..request.path:match("[^?]*"); | 228 local global_event = request.method.." "..request.path:match("[^?]*"); |
| 237 local host_event = request.method.." "..host..request.path:match("[^?]*"); | 229 |
| 238 local payload = { request = request, response = response }; | 230 local payload = { request = request, response = response }; |
| 239 log("debug", "Firing event: %s", global_event); | 231 log("debug", "Firing event: %s", global_event); |
| 240 local result = events.fire_event(global_event, payload); | 232 local result = events.fire_event(global_event, payload); |
| 241 if result == nil then | 233 if result == nil then |
| 234 if not hosts[host] then | |
| 235 if hosts[default_host] then | |
| 236 host = default_host; | |
| 237 elseif host then | |
| 238 err_code, err = 404, "Unknown host: "..host; | |
| 239 else | |
| 240 err_code, err = 400, "Missing or invalid 'Host' header"; | |
| 241 end | |
| 242 end | |
| 243 local host_event = request.method.." "..host..request.path:match("[^?]*"); | |
| 244 | |
| 245 if err then | |
| 246 response.status_code = err_code; | |
| 247 response:send(events.fire_event("http-error", { code = err_code, message = err, response = response })); | |
| 248 return; | |
| 249 end | |
| 250 | |
| 242 log("debug", "Firing event: %s", host_event); | 251 log("debug", "Firing event: %s", host_event); |
| 243 result = events.fire_event(host_event, payload); | 252 result = events.fire_event(host_event, payload); |
| 244 end | 253 end |
| 245 if result ~= nil then | 254 if result ~= nil then |
| 246 if result ~= true then | 255 if result ~= true then |