11 local xmlns_jingle_apps_rtp = "urn:xmpp:jingle:apps:rtp:1"; |
11 local xmlns_jingle_apps_rtp = "urn:xmpp:jingle:apps:rtp:1"; |
12 local xmlns_push = "urn:xmpp:push:0"; |
12 local xmlns_push = "urn:xmpp:push:0"; |
13 local xmlns_push_encrypt = "tigase:push:encrypt:0"; |
13 local xmlns_push_encrypt = "tigase:push:encrypt:0"; |
14 local xmlns_push_encrypt_aes_128_gcm = "tigase:push:encrypt:aes-128-gcm"; |
14 local xmlns_push_encrypt_aes_128_gcm = "tigase:push:encrypt:aes-128-gcm"; |
15 local xmlns_push_jingle = "tigase:push:jingle:0"; |
15 local xmlns_push_jingle = "tigase:push:jingle:0"; |
|
16 |
|
17 local function detect_stanza_encryption(stanza) |
|
18 local eme = stanza:get_child("encryption", "urn:xmpp:eme:0"); |
|
19 if eme then return eme.attr.namespace or ""; end |
|
20 -- Fallback for legacy OMEMO clients without EME |
|
21 local omemo = stanza:get_child("encrypted", "eu.siacs.conversations.axolotl"); |
|
22 if omemo then return "eu.siacs.conversations.axolotl"; end |
|
23 end |
16 |
24 |
17 -- https://xeps.tigase.net//docs/push-notifications/encrypt/#41-discovering-support |
25 -- https://xeps.tigase.net//docs/push-notifications/encrypt/#41-discovering-support |
18 local function account_disco_info(event) |
26 local function account_disco_info(event) |
19 event.reply:tag("feature", {var=xmlns_push_encrypt}):up(); |
27 event.reply:tag("feature", {var=xmlns_push_encrypt}):up(); |
20 event.reply:tag("feature", {var=xmlns_push_encrypt_aes_128_gcm}):up(); |
28 event.reply:tag("feature", {var=xmlns_push_encrypt_aes_128_gcm}):up(); |
59 end |
67 end |
60 |
68 |
61 local push_summary = event.push_summary; |
69 local push_summary = event.push_summary; |
62 |
70 |
63 local original_stanza = event.original_stanza; |
71 local original_stanza = event.original_stanza; |
64 local body = original_stanza:get_child_text("body"); |
72 local is_encrypted_msg = detect_stanza_encryption(original_stanza); |
65 if body and #body > 255 then |
73 local body; |
66 body = body:sub(1, 255); |
74 if is_encrypted_msg then |
|
75 -- TODO: localization |
|
76 body = "You have received an encrypted message"; |
|
77 else |
|
78 body = original_stanza:get_child_text("body"); |
|
79 if body and #body > 255 then |
|
80 body = body:sub(1, 255); |
|
81 end |
67 end |
82 end |
68 |
83 |
69 local push_payload = { |
84 local push_payload = { |
70 unread = tonumber(push_summary["message-count"]) or 1; |
85 unread = tonumber(push_summary["message-count"]) or 1; |
71 sender = jid.bare(original_stanza.attr.from); |
86 sender = jid.bare(original_stanza.attr.from); |