annotate mod_export_skeletons/skeleton_filter.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 b4cc6ee9fc8c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4822
b4cc6ee9fc8c mod_export_skeletons: Add a standalone filter script
Kim Alvefur <zash@zash.se>
parents: 4821
diff changeset
1 #!/usr/bin/env lua
b4cc6ee9fc8c mod_export_skeletons: Add a standalone filter script
Kim Alvefur <zash@zash.se>
parents: 4821
diff changeset
2
b4cc6ee9fc8c mod_export_skeletons: Add a standalone filter script
Kim Alvefur <zash@zash.se>
parents: 4821
diff changeset
3 package.path = package.path:gsub("([^;]*)(?[^;]*)", "%1prosody/%2;%1%2");
b4cc6ee9fc8c mod_export_skeletons: Add a standalone filter script
Kim Alvefur <zash@zash.se>
parents: 4821
diff changeset
4 package.cpath = package.cpath:gsub("([^;]*)(?[^;]*)", "%1prosody/%2;%1%2");
4815
9c2af2146ee2 mod_export_skeletons: Command to aid in analysis of archive contents
Kim Alvefur <zash@zash.se>
parents:
diff changeset
5
9c2af2146ee2 mod_export_skeletons: Command to aid in analysis of archive contents
Kim Alvefur <zash@zash.se>
parents:
diff changeset
6 local t_insert = table.insert;
9c2af2146ee2 mod_export_skeletons: Command to aid in analysis of archive contents
Kim Alvefur <zash@zash.se>
parents:
diff changeset
7 local t_sort = table.sort;
9c2af2146ee2 mod_export_skeletons: Command to aid in analysis of archive contents
Kim Alvefur <zash@zash.se>
parents:
diff changeset
8
9c2af2146ee2 mod_export_skeletons: Command to aid in analysis of archive contents
Kim Alvefur <zash@zash.se>
parents:
diff changeset
9 local jid = require "util.jid";
9c2af2146ee2 mod_export_skeletons: Command to aid in analysis of archive contents
Kim Alvefur <zash@zash.se>
parents:
diff changeset
10 local st = require "util.stanza";
9c2af2146ee2 mod_export_skeletons: Command to aid in analysis of archive contents
Kim Alvefur <zash@zash.se>
parents:
diff changeset
11
4822
b4cc6ee9fc8c mod_export_skeletons: Add a standalone filter script
Kim Alvefur <zash@zash.se>
parents: 4821
diff changeset
12 local xs = require "util.xmppstream";
b4cc6ee9fc8c mod_export_skeletons: Add a standalone filter script
Kim Alvefur <zash@zash.se>
parents: 4821
diff changeset
13
4815
9c2af2146ee2 mod_export_skeletons: Command to aid in analysis of archive contents
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14 local function skeleton(s)
9c2af2146ee2 mod_export_skeletons: Command to aid in analysis of archive contents
Kim Alvefur <zash@zash.se>
parents:
diff changeset
15 local o = st.stanza(s.name, { xmlns = s.attr.xmlns });
9c2af2146ee2 mod_export_skeletons: Command to aid in analysis of archive contents
Kim Alvefur <zash@zash.se>
parents:
diff changeset
16
9c2af2146ee2 mod_export_skeletons: Command to aid in analysis of archive contents
Kim Alvefur <zash@zash.se>
parents:
diff changeset
17 local children = {};
9c2af2146ee2 mod_export_skeletons: Command to aid in analysis of archive contents
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18 for _, child in ipairs(s.tags) do t_insert(children, skeleton(child)) end
9c2af2146ee2 mod_export_skeletons: Command to aid in analysis of archive contents
Kim Alvefur <zash@zash.se>
parents:
diff changeset
19 t_sort(children, function(a, b)
9c2af2146ee2 mod_export_skeletons: Command to aid in analysis of archive contents
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 if a.attr.xmlns == b.attr.xmlns then return a.name < b.name; end
9c2af2146ee2 mod_export_skeletons: Command to aid in analysis of archive contents
Kim Alvefur <zash@zash.se>
parents:
diff changeset
21 return (a.attr.xmlns or "") < (b.attr.xmlns or "");
9c2af2146ee2 mod_export_skeletons: Command to aid in analysis of archive contents
Kim Alvefur <zash@zash.se>
parents:
diff changeset
22 end);
9c2af2146ee2 mod_export_skeletons: Command to aid in analysis of archive contents
Kim Alvefur <zash@zash.se>
parents:
diff changeset
23 for _, child in ipairs(children) do o:add_direct_child(child); end
9c2af2146ee2 mod_export_skeletons: Command to aid in analysis of archive contents
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24 return o;
9c2af2146ee2 mod_export_skeletons: Command to aid in analysis of archive contents
Kim Alvefur <zash@zash.se>
parents:
diff changeset
25 end
9c2af2146ee2 mod_export_skeletons: Command to aid in analysis of archive contents
Kim Alvefur <zash@zash.se>
parents:
diff changeset
26
9c2af2146ee2 mod_export_skeletons: Command to aid in analysis of archive contents
Kim Alvefur <zash@zash.se>
parents:
diff changeset
27 local function classify_jid(s)
9c2af2146ee2 mod_export_skeletons: Command to aid in analysis of archive contents
Kim Alvefur <zash@zash.se>
parents:
diff changeset
28 if not s then return "" end
9c2af2146ee2 mod_export_skeletons: Command to aid in analysis of archive contents
Kim Alvefur <zash@zash.se>
parents:
diff changeset
29 local u, h, r = jid.split(s);
9c2af2146ee2 mod_export_skeletons: Command to aid in analysis of archive contents
Kim Alvefur <zash@zash.se>
parents:
diff changeset
30 if r then
9c2af2146ee2 mod_export_skeletons: Command to aid in analysis of archive contents
Kim Alvefur <zash@zash.se>
parents:
diff changeset
31 return "full"
9c2af2146ee2 mod_export_skeletons: Command to aid in analysis of archive contents
Kim Alvefur <zash@zash.se>
parents:
diff changeset
32 elseif u then
9c2af2146ee2 mod_export_skeletons: Command to aid in analysis of archive contents
Kim Alvefur <zash@zash.se>
parents:
diff changeset
33 return "bare"
9c2af2146ee2 mod_export_skeletons: Command to aid in analysis of archive contents
Kim Alvefur <zash@zash.se>
parents:
diff changeset
34 elseif h then
9c2af2146ee2 mod_export_skeletons: Command to aid in analysis of archive contents
Kim Alvefur <zash@zash.se>
parents:
diff changeset
35 return "host"
9c2af2146ee2 mod_export_skeletons: Command to aid in analysis of archive contents
Kim Alvefur <zash@zash.se>
parents:
diff changeset
36 else
9c2af2146ee2 mod_export_skeletons: Command to aid in analysis of archive contents
Kim Alvefur <zash@zash.se>
parents:
diff changeset
37 return "invalid"
9c2af2146ee2 mod_export_skeletons: Command to aid in analysis of archive contents
Kim Alvefur <zash@zash.se>
parents:
diff changeset
38 end
9c2af2146ee2 mod_export_skeletons: Command to aid in analysis of archive contents
Kim Alvefur <zash@zash.se>
parents:
diff changeset
39 end
9c2af2146ee2 mod_export_skeletons: Command to aid in analysis of archive contents
Kim Alvefur <zash@zash.se>
parents:
diff changeset
40
4822
b4cc6ee9fc8c mod_export_skeletons: Add a standalone filter script
Kim Alvefur <zash@zash.se>
parents: 4821
diff changeset
41 local stream_session = { notopen = true };
b4cc6ee9fc8c mod_export_skeletons: Add a standalone filter script
Kim Alvefur <zash@zash.se>
parents: 4821
diff changeset
42 local stream_callbacks = { stream_ns = "jabber:client"; default_ns = "jabber:client" };
b4cc6ee9fc8c mod_export_skeletons: Add a standalone filter script
Kim Alvefur <zash@zash.se>
parents: 4821
diff changeset
43 function stream_callbacks:handlestanza(item)
b4cc6ee9fc8c mod_export_skeletons: Add a standalone filter script
Kim Alvefur <zash@zash.se>
parents: 4821
diff changeset
44 local clean = skeleton(item);
4815
9c2af2146ee2 mod_export_skeletons: Command to aid in analysis of archive contents
Kim Alvefur <zash@zash.se>
parents:
diff changeset
45
4822
b4cc6ee9fc8c mod_export_skeletons: Add a standalone filter script
Kim Alvefur <zash@zash.se>
parents: 4821
diff changeset
46 -- Normalize top level attributes
b4cc6ee9fc8c mod_export_skeletons: Add a standalone filter script
Kim Alvefur <zash@zash.se>
parents: 4821
diff changeset
47 clean.attr.type = item.attr.type;
b4cc6ee9fc8c mod_export_skeletons: Add a standalone filter script
Kim Alvefur <zash@zash.se>
parents: 4821
diff changeset
48 if clean.attr.type == nil and clean.name == "message" then clean.attr.type = "normal"; end
b4cc6ee9fc8c mod_export_skeletons: Add a standalone filter script
Kim Alvefur <zash@zash.se>
parents: 4821
diff changeset
49 clean.attr.id = string.rep("x", math.floor(math.log(1 + #(item.attr.id or ""), 2)));
b4cc6ee9fc8c mod_export_skeletons: Add a standalone filter script
Kim Alvefur <zash@zash.se>
parents: 4821
diff changeset
50 clean.attr.from = classify_jid(item.attr.from);
b4cc6ee9fc8c mod_export_skeletons: Add a standalone filter script
Kim Alvefur <zash@zash.se>
parents: 4821
diff changeset
51 clean.attr.to = classify_jid(item.attr.to);
b4cc6ee9fc8c mod_export_skeletons: Add a standalone filter script
Kim Alvefur <zash@zash.se>
parents: 4821
diff changeset
52 print(clean);
b4cc6ee9fc8c mod_export_skeletons: Add a standalone filter script
Kim Alvefur <zash@zash.se>
parents: 4821
diff changeset
53 end
b4cc6ee9fc8c mod_export_skeletons: Add a standalone filter script
Kim Alvefur <zash@zash.se>
parents: 4821
diff changeset
54 local stream = xs.new(stream_session, stream_callbacks);
b4cc6ee9fc8c mod_export_skeletons: Add a standalone filter script
Kim Alvefur <zash@zash.se>
parents: 4821
diff changeset
55 assert(stream:feed(st.stanza("stream", { xmlns = "jabber:client" }):top_tag()));
b4cc6ee9fc8c mod_export_skeletons: Add a standalone filter script
Kim Alvefur <zash@zash.se>
parents: 4821
diff changeset
56 stream_session.notopen = nil;
4815
9c2af2146ee2 mod_export_skeletons: Command to aid in analysis of archive contents
Kim Alvefur <zash@zash.se>
parents:
diff changeset
57
4822
b4cc6ee9fc8c mod_export_skeletons: Add a standalone filter script
Kim Alvefur <zash@zash.se>
parents: 4821
diff changeset
58 local data = io.read(4096);
b4cc6ee9fc8c mod_export_skeletons: Add a standalone filter script
Kim Alvefur <zash@zash.se>
parents: 4821
diff changeset
59 while data do
b4cc6ee9fc8c mod_export_skeletons: Add a standalone filter script
Kim Alvefur <zash@zash.se>
parents: 4821
diff changeset
60 stream:feed(data);
b4cc6ee9fc8c mod_export_skeletons: Add a standalone filter script
Kim Alvefur <zash@zash.se>
parents: 4821
diff changeset
61 data = io.read(4096);
b4cc6ee9fc8c mod_export_skeletons: Add a standalone filter script
Kim Alvefur <zash@zash.se>
parents: 4821
diff changeset
62 end
4815
9c2af2146ee2 mod_export_skeletons: Command to aid in analysis of archive contents
Kim Alvefur <zash@zash.se>
parents:
diff changeset
63
4822
b4cc6ee9fc8c mod_export_skeletons: Add a standalone filter script
Kim Alvefur <zash@zash.se>
parents: 4821
diff changeset
64 assert(stream:feed("</stream>"));