Mercurial > prosody-modules
annotate mod_log_http/mod_log_http.lua @ 4931:13070c6a7ce8
mod_http_muc_log: Fix exception on lack of trailing slash in room path
A request to /room leads to the match call returning nil which in turn
calls nodeprep(nil). In Prosody 0.11.x this does nothing and simply
returns the nil, while in 0.12 it is an error.
Now it redirects to the calendar view at /room/ - even for non-existant
rooms.
Discovered at a deployment with http_paths = { muc_log = "/" } and
requests to /robots.txt and similar, which now result in a uses redirect
before returning 404.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 22 Apr 2022 14:29:32 +0200 |
parents | 456b9f608fcf |
children | 3bd725430f40 |
rev | line source |
---|---|
4317
456b9f608fcf
mod_log_http: Switch to line buffering (thanks Zash+Ge0rG)
Matthew Wild <mwild1@gmail.com>
parents:
2705
diff
changeset
|
1 Addmodule:set_global(); |
2700
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 local http = require "net.http"; |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
4 local codes = require "net.http.codes"; |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 local json = require "util.json"; |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 local log = assert(io.open(assert(module:get_option_string("log_http_file"), "Please supply log_http_file in the config"), "a+")); |
4317
456b9f608fcf
mod_log_http: Switch to line buffering (thanks Zash+Ge0rG)
Matthew Wild <mwild1@gmail.com>
parents:
2705
diff
changeset
|
8 log:setvbuf("line"); |
2700
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 local function append_request(id, req) |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 local headers = {}; |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
12 for k, v in pairs(req.headers) do |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
13 table.insert(headers, { name = k, value = v }); |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
14 end |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 local queryString = {}; |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 if req.query then |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 for _, pair in ipairs(http.formdecode(req.query)) do |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 table.insert(queryString, pair); |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 end |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 end |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 log:write("<<<", json.encode({ |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 id = id; |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 type = "request"; |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 method = req.method; |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 url = req.url; |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 httpVersion = "HTTP/1.1"; |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 cookies = {}; |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
28 headers = headers; |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 queryString = queryString; |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
30 postData = req.body and { |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
31 mimeType = req.headers["Content-Type"]; |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 text = req.body; |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 } or nil; |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 headersSize = -1; |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 bodySize = -1; |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 }), "\n"); |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 end |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
38 |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
39 local function append_response(id, resp) |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
40 local headers = {}; |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
41 for k, v in pairs(resp.headers) do |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
42 table.insert(headers, { name = k, value = v }); |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
43 end |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
44 log:write(">>>", json.encode({ |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
45 id = id; |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
46 type = "response"; |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
47 status = resp.code; |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
48 statusText = codes[resp.code]; |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
49 httpVersion = resp.httpversion; |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
50 cookies = {}; |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
51 headers = headers; |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
52 content = resp.body and { |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
53 size = #resp.body; |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
54 mimeType = resp.headers.content_type; |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
55 text = resp.body; |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
56 } or nil; |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
57 headersSize = -1; |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
58 bodySize = -1; |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
59 }), "\n"); |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
60 end |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
61 |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
62 module:hook_object_event(http.events, "request", function (event) |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
63 module:log("warn", "Request to %s!", event.url); |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
64 append_request(event.request.id, event.request); |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
65 end); |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
66 |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
67 module:hook_object_event(http.events, "request-connection-error", function (event) |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
68 module:log("warn", "Failed to make request to %s!", event.url); |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
69 end); |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
70 |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
71 module:hook_object_event(http.events, "response", function (event) |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
72 module:log("warn", "Received response %d from %s!", event.code, event.url); |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
73 append_response(event.request.id, event.response); |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
74 end); |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
75 |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
76 function module.unload() |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
77 log:close(); |
7a5dae85f26f
mod_log_http: Add new module for logging outgoing HTTP request
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
78 end |