Mercurial > prosody-modules
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 |
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 }); |