annotate mod_debug_omemo/mod_debug_omemo.lua @ 4688:05725276fac0

mod_bookmarks2: Use same default as mod_pep for max_items Should fix the issue with max items until the proper "max" can be used, by following the configured max. While "max" is already in trunk, it's not easily usable in 0.11.x This limit and option was added to mod_pep in Prosody rev aefb96a52f5f
author Kim Alvefur <zash@zash.se>
date Wed, 15 Sep 2021 17:39:37 +0200
parents 41ddb782320c
children ecfffbbcbf42
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
103 local function render_message(event, path)
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
104 local username, message_id = path:match("^([^/]+)/(.+)$");
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
105 if not username then
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
106 return 400;
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
107 end
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
108 local message;
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
109 for _, result in mam:find(username, { key = message_id }) do
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
110 message = result;
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
111 end
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
112 if not message then
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
113 return 404;
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
114 end
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
115
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
116 local user_omemo_status = get_user_omemo_info(username);
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
117
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
118 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
119
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
120 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
121 local message_rids = set.new();
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
122 local rid_info = {};
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
123 if message_omemo_header then
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
124 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
125 local rid = key_el.attr.rid;
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
126 if rid then
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
127 message_rids:add(rid);
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
128 local prekey = key_el.attr.prekey;
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
129 rid_info = {
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
130 prekey = prekey and (prekey == "1" or prekey:lower() == "true");
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
131 };
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
132 end
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
133 end
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
134 end
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
135
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
136 local rids = user_rids + message_rids;
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
137
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
138 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
139
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
140 local is_encrypted = not not message_omemo_header;
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
141
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
142 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
143
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
144 local f = module:load_resource("view.tpl.html");
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
145 if not f then
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
146 return 500;
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
147 end
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
148 local tpl = f:read("*a");
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
149
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
150 local data = { user = username, rids = {} };
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
151 for rid in rids do
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
152 data.rids[rid] = {
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
153 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
154 prekey = rid_info.prekey;
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
155 };
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
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
158 data.message = {
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
159 type = message.attr.type or "normal";
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
160 direction = direction;
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
161 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
162 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
163 has_no_keys = message_rids:empty();
4682
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
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
166 data.omemo = {
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
167 sender_id = sender_id;
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
168 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
169 };
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
170
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
171 data.omemo.devices = {};
4686
76af816739f3 mod_debug_omemo: Fix traceback in case of zero devices
Kim Alvefur <zash@zash.se>
parents: 4685
diff changeset
172 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
173 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
174 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
175 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
176 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
177 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
178 };
76af816739f3 mod_debug_omemo: Fix traceback in case of zero devices
Kim Alvefur <zash@zash.se>
parents: 4685
diff changeset
179 end
76af816739f3 mod_debug_omemo: Fix traceback in case of zero devices
Kim Alvefur <zash@zash.se>
parents: 4685
diff changeset
180 else
4687
41ddb782320c mod_debug_omemo: Improve no keys/devices cases
Matthew Wild <mwild1@gmail.com>
parents: 4686
diff changeset
181 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
182 end
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
183
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
184 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
185 return render_html_template(tpl, data);
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
186 end
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
187
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
188 local function check_omemo_fallback(event)
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
189 local message = event.stanza;
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
190
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
191 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
192 if not message_omemo_header then return; end
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
193
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
194 local to_bare = jid.bare(message.attr.to);
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
195
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
196 local archive_stanza_id;
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
197 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
198 if stanza_id_tag.attr.by == to_bare then
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
199 archive_stanza_id = stanza_id_tag.attr.id;
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
200 end
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
201 end
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
202 if not archive_stanza_id then
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
203 return;
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
204 end
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
205
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
206 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
207 username = jid.node(to_bare);
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
208 message_id = archive_stanza_id;
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
209 });
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
210
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
211 local body = message:get_child("body");
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
212 if not body then
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
213 body = st.stanza("body")
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
214 :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
215 message:reset():add_child(body);
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
216 else
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
217 body:text("\n\nOMEMO debug information: "..debug_url);
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
218 end
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
219 end
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
220
4685
07b6f444bafb mod_debug_omemo: Adjust priority to act after mod_mam archived
Kim Alvefur <zash@zash.se>
parents: 4682
diff changeset
221 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
222 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
223
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
224 module:depends("http")
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
225 module:provides("http", {
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
226 route = {
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
227 ["GET /view/*"] = render_message;
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
228 };
e4e5474420e6 mod_debug_omemo: OMEMO debugging tool
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
229 });