Software /
code /
prosody-modules
Annotate
mod_debug_omemo/mod_debug_omemo.lua @ 5173:460f78654864
mod_muc_rtbl: also filter messages
This was a bit tricky because we don't want to run the JIDs
through SHA256 on each message. Took a while to come up with this
simple plan of just caching the SHA256 of the JIDs on the
occupants.
This will leave some dirt in the occupants after unloading the
module, but that should be ok; once they cycle the room, the
hashes will be gone.
This is direly needed, otherwise, there is a tight race between
the moderation activities and the actors joining the room.
author | Jonas Schäfer <jonas@wielicki.name> |
---|---|
date | Tue, 21 Feb 2023 21:37:27 +0100 |
parent | 4689:ecfffbbcbf42 |
rev | line source |
---|---|
4682
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 local array = require "util.array"; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 local jid = require "util.jid"; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 local set = require "util.set"; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
4 local st = require "util.stanza"; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 local url_escape = require "util.http".urlencode; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 local base_url = "https://"..module.host.."/"; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 local render_html_template = require"util.interpolation".new("%b{}", st.xml_escape, { |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 urlescape = url_escape; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 lower = string.lower; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
12 classname = function (s) return (s:gsub("%W+", "-")); end; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
13 relurl = function (s) |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
14 if s:match("^%w+://") then |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 return s; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 end |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 return base_url.."/"..s; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 end; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 }); |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 local render_url = require "util.interpolation".new("%b{}", url_escape, { |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 urlescape = url_escape; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 noscheme = function (url) |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 return (url:gsub("^[^:]+:", "")); |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 end; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 }); |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 local mod_pep = module:depends("pep"); |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
28 |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 local mam = module:open_store("archive", "archive"); |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
30 |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
31 local function get_user_omemo_info(username) |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 local everything_valid = true; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 local any_device = false; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 local omemo_status = {}; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 local omemo_devices; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 local pep_service = mod_pep.get_pep_service(username); |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 if pep_service and pep_service.nodes then |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
38 local ok, _, device_list = pep_service:get_last_item("eu.siacs.conversations.axolotl.devicelist", true); |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
39 if ok and device_list then |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
40 device_list = device_list:get_child("list", "eu.siacs.conversations.axolotl"); |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
41 end |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
42 if device_list then |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
43 omemo_devices = {}; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
44 for device_entry in device_list:childtags("device") do |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
45 any_device = true; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
46 local device_info = {}; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
47 local device_id = tonumber(device_entry.attr.id or ""); |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
48 if device_id then |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
49 device_info.id = device_id; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
50 local bundle_id = ("eu.siacs.conversations.axolotl.bundles:%d"):format(device_id); |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
51 local have_bundle, _, bundle = pep_service:get_last_item(bundle_id, true); |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
52 if have_bundle and bundle and bundle:get_child("bundle", "eu.siacs.conversations.axolotl") then |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
53 device_info.have_bundle = true; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
54 local config_ok, bundle_config = pep_service:get_node_config(bundle_id, true); |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
55 if config_ok and bundle_config then |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
56 device_info.bundle_config = bundle_config; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
57 if bundle_config.max_items == 1 |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
58 and bundle_config.access_model == "open" |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
59 and bundle_config.persist_items == true |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
60 and bundle_config.publish_model == "publishers" then |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
61 device_info.valid = true; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
62 end |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
63 end |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
64 end |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
65 end |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
66 if device_info.valid == nil then |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
67 device_info.valid = false; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
68 everything_valid = false; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
69 end |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
70 table.insert(omemo_devices, device_info); |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
71 end |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
72 |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
73 local config_ok, list_config = pep_service:get_node_config("eu.siacs.conversations.axolotl.devicelist", true); |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
74 if config_ok and list_config then |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
75 omemo_status.config = list_config; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
76 if list_config.max_items == 1 |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
77 and list_config.access_model == "open" |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
78 and list_config.persist_items == true |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
79 and list_config.publish_model == "publishers" then |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
80 omemo_status.config_valid = true; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
81 end |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
82 end |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
83 if omemo_status.config_valid == nil then |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
84 omemo_status.config_valid = false; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
85 everything_valid = false; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
86 end |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
87 end |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
88 end |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
89 omemo_status.valid = everything_valid and any_device; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
90 return { |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
91 status = omemo_status; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
92 devices = omemo_devices; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
93 }; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
94 end |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
95 |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
96 local access_model_text = { |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
97 open = "Public"; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
98 whitelist = "Private"; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
99 roster = "Contacts only"; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
100 presence = "Contacts only"; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
101 }; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
102 |
4689
ecfffbbcbf42
mod_debug_omemo: Use archive single message retrieval method
Kim Alvefur <zash@zash.se>
parents:
4687
diff
changeset
|
103 local function get_message(username, message_id) |
ecfffbbcbf42
mod_debug_omemo: Use archive single message retrieval method
Kim Alvefur <zash@zash.se>
parents:
4687
diff
changeset
|
104 if mam.get then |
ecfffbbcbf42
mod_debug_omemo: Use archive single message retrieval method
Kim Alvefur <zash@zash.se>
parents:
4687
diff
changeset
|
105 return mam:get(username, message_id); |
ecfffbbcbf42
mod_debug_omemo: Use archive single message retrieval method
Kim Alvefur <zash@zash.se>
parents:
4687
diff
changeset
|
106 end |
ecfffbbcbf42
mod_debug_omemo: Use archive single message retrieval method
Kim Alvefur <zash@zash.se>
parents:
4687
diff
changeset
|
107 -- COMPAT |
ecfffbbcbf42
mod_debug_omemo: Use archive single message retrieval method
Kim Alvefur <zash@zash.se>
parents:
4687
diff
changeset
|
108 local message; |
ecfffbbcbf42
mod_debug_omemo: Use archive single message retrieval method
Kim Alvefur <zash@zash.se>
parents:
4687
diff
changeset
|
109 for _, result in mam:find(username, { key = message_id }) do |
ecfffbbcbf42
mod_debug_omemo: Use archive single message retrieval method
Kim Alvefur <zash@zash.se>
parents:
4687
diff
changeset
|
110 message = result; |
ecfffbbcbf42
mod_debug_omemo: Use archive single message retrieval method
Kim Alvefur <zash@zash.se>
parents:
4687
diff
changeset
|
111 end |
ecfffbbcbf42
mod_debug_omemo: Use archive single message retrieval method
Kim Alvefur <zash@zash.se>
parents:
4687
diff
changeset
|
112 return message; |
ecfffbbcbf42
mod_debug_omemo: Use archive single message retrieval method
Kim Alvefur <zash@zash.se>
parents:
4687
diff
changeset
|
113 end |
ecfffbbcbf42
mod_debug_omemo: Use archive single message retrieval method
Kim Alvefur <zash@zash.se>
parents:
4687
diff
changeset
|
114 |
4682
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
115 local function render_message(event, path) |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
116 local username, message_id = path:match("^([^/]+)/(.+)$"); |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
117 if not username then |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
118 return 400; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
119 end |
4689
ecfffbbcbf42
mod_debug_omemo: Use archive single message retrieval method
Kim Alvefur <zash@zash.se>
parents:
4687
diff
changeset
|
120 local message = get_message(username, message_id); |
4682
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
121 if not message then |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
122 return 404; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
123 end |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
124 |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
125 local user_omemo_status = get_user_omemo_info(username); |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
126 |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
127 local user_rids = set.new(array.pluck(user_omemo_status.devices or {}, "id")) / tostring; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
128 |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
129 local message_omemo_header = message:find("{eu.siacs.conversations.axolotl}encrypted/header"); |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
130 local message_rids = set.new(); |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
131 local rid_info = {}; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
132 if message_omemo_header then |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
133 for key_el in message_omemo_header:childtags("key") do |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
134 local rid = key_el.attr.rid; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
135 if rid then |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
136 message_rids:add(rid); |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
137 local prekey = key_el.attr.prekey; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
138 rid_info = { |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
139 prekey = prekey and (prekey == "1" or prekey:lower() == "true"); |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
140 }; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
141 end |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
142 end |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
143 end |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
144 |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
145 local rids = user_rids + message_rids; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
146 |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
147 local direction = jid.bare(message.attr.to) == (username.."@"..module.host) and "incoming" or "outgoing"; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
148 |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
149 local is_encrypted = not not message_omemo_header; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
150 |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
151 local sender_id = message_omemo_header and message_omemo_header.attr.sid or nil; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
152 |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
153 local f = module:load_resource("view.tpl.html"); |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
154 if not f then |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
155 return 500; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
156 end |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
157 local tpl = f:read("*a"); |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
158 |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
159 local data = { user = username, rids = {} }; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
160 for rid in rids do |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
161 data.rids[rid] = { |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
162 status = message_rids:contains(rid) and "Encrypted" or user_rids:contains(rid) and "Missing" or nil; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
163 prekey = rid_info.prekey; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
164 }; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
165 end |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
166 |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
167 data.message = { |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
168 type = message.attr.type or "normal"; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
169 direction = direction; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
170 encryption = is_encrypted and "encrypted" or "unencrypted"; |
4687
41ddb782320c
mod_debug_omemo: Improve no keys/devices cases
Matthew Wild <mwild1@gmail.com>
parents:
4686
diff
changeset
|
171 has_any_keys = not message_rids:empty(); |
41ddb782320c
mod_debug_omemo: Improve no keys/devices cases
Matthew Wild <mwild1@gmail.com>
parents:
4686
diff
changeset
|
172 has_no_keys = message_rids:empty(); |
4682
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
173 }; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
174 |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
175 data.omemo = { |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
176 sender_id = sender_id; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
177 status = user_omemo_status.status.valid and "no known issues" or "problems"; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
178 }; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
179 |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
180 data.omemo.devices = {}; |
4686
76af816739f3
mod_debug_omemo: Fix traceback in case of zero devices
Kim Alvefur <zash@zash.se>
parents:
4685
diff
changeset
|
181 if user_omemo_status.devices then |
76af816739f3
mod_debug_omemo: Fix traceback in case of zero devices
Kim Alvefur <zash@zash.se>
parents:
4685
diff
changeset
|
182 for _, device_info in ipairs(user_omemo_status.devices) do |
76af816739f3
mod_debug_omemo: Fix traceback in case of zero devices
Kim Alvefur <zash@zash.se>
parents:
4685
diff
changeset
|
183 data.omemo.devices[("%d"):format(device_info.id)] = { |
76af816739f3
mod_debug_omemo: Fix traceback in case of zero devices
Kim Alvefur <zash@zash.se>
parents:
4685
diff
changeset
|
184 status = device_info.valid and "OK" or "Problem"; |
76af816739f3
mod_debug_omemo: Fix traceback in case of zero devices
Kim Alvefur <zash@zash.se>
parents:
4685
diff
changeset
|
185 bundle = device_info.have_bundle and "Published" or "Missing"; |
76af816739f3
mod_debug_omemo: Fix traceback in case of zero devices
Kim Alvefur <zash@zash.se>
parents:
4685
diff
changeset
|
186 access_model = access_model_text[device_info.bundle_config and device_info.bundle_config.access_model or nil]; |
76af816739f3
mod_debug_omemo: Fix traceback in case of zero devices
Kim Alvefur <zash@zash.se>
parents:
4685
diff
changeset
|
187 }; |
76af816739f3
mod_debug_omemo: Fix traceback in case of zero devices
Kim Alvefur <zash@zash.se>
parents:
4685
diff
changeset
|
188 end |
76af816739f3
mod_debug_omemo: Fix traceback in case of zero devices
Kim Alvefur <zash@zash.se>
parents:
4685
diff
changeset
|
189 else |
4687
41ddb782320c
mod_debug_omemo: Improve no keys/devices cases
Matthew Wild <mwild1@gmail.com>
parents:
4686
diff
changeset
|
190 data.omemo.devices[false] = { status = "No devices have published OMEMO keys on this account" }; |
4682
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
191 end |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
192 |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
193 event.response.headers.content_type = "text/html; charset=utf-8"; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
194 return render_html_template(tpl, data); |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
195 end |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
196 |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
197 local function check_omemo_fallback(event) |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
198 local message = event.stanza; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
199 |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
200 local message_omemo_header = message:find("{eu.siacs.conversations.axolotl}encrypted/header"); |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
201 if not message_omemo_header then return; end |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
202 |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
203 local to_bare = jid.bare(message.attr.to); |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
204 |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
205 local archive_stanza_id; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
206 for stanza_id_tag in message:childtags("stanza-id", "urn:xmpp:sid:0") do |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
207 if stanza_id_tag.attr.by == to_bare then |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
208 archive_stanza_id = stanza_id_tag.attr.id; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
209 end |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
210 end |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
211 if not archive_stanza_id then |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
212 return; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
213 end |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
214 |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
215 local debug_url = render_url(module:http_url().."/view/{username}/{message_id}", { |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
216 username = jid.node(to_bare); |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
217 message_id = archive_stanza_id; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
218 }); |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
219 |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
220 local body = message:get_child("body"); |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
221 if not body then |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
222 body = st.stanza("body") |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
223 :text("This message is encrypted using OMEMO, but could not be decrypted by your device.\nFor more information see: "..debug_url); |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
224 message:reset():add_child(body); |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
225 else |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
226 body:text("\n\nOMEMO debug information: "..debug_url); |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
227 end |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
228 end |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
229 |
4685
07b6f444bafb
mod_debug_omemo: Adjust priority to act after mod_mam archived
Kim Alvefur <zash@zash.se>
parents:
4682
diff
changeset
|
230 module:hook("message/bare", check_omemo_fallback, -0.5); |
07b6f444bafb
mod_debug_omemo: Adjust priority to act after mod_mam archived
Kim Alvefur <zash@zash.se>
parents:
4682
diff
changeset
|
231 module:hook("message/full", check_omemo_fallback, -0.5); |
4682
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
232 |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
233 module:depends("http") |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
234 module:provides("http", { |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
235 route = { |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
236 ["GET /view/*"] = render_message; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
237 }; |
e4e5474420e6
mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
238 }); |