annotate mod_idlecompat/mod_idlecompat.lua @ 4651:8231774f5bfd

mod_cloud_notify_encrypted: Ensure body substring remains valid UTF-8 The `body:sub()` call risks splitting the string in the middle of a multi-byte UTF-8 sequence. This should have been caught by util.stanza validation, but that would have caused some havoc, at the very least causing the notification to not be sent. There have been no reports of this happening. Likely because this module isn't widely deployed among users with languages that use many longer UTF-8 sequences. The util.encodings.utf8.valid() function is O(n) where only the last sequence really needs to be checked, but it's in C and expected to be fast.
author Kim Alvefur <zash@zash.se>
date Sun, 22 Aug 2021 13:22:59 +0200
parents 4b58e35a72e0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1260
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
1 -- Last User Interaction in Presence via Last Activity compatibility module
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
2 -- http://xmpp.org/extensions/xep-0319.html
2164
4b58e35a72e0 mod_idlecompat: Reference the correct XEP (256, not 12) and drop a redundant check
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 1260
diff changeset
3 -- http://xmpp.org/extensions/xep-0256.html
1260
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
4 -- Copyright (C) 2014 Tobias Markmann
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
5 --
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
6 -- This file is MIT/X11 licensed.
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
7
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
8 local st = require "util.stanza";
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
9 local datetime = require "util.datetime";
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
10
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
11 local function on_presence(event)
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
12 local stanza = event.stanza;
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
13
2164
4b58e35a72e0 mod_idlecompat: Reference the correct XEP (256, not 12) and drop a redundant check
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 1260
diff changeset
14 local last_activity = stanza:get_child("query", "jabber:iq:last");
1260
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
15 local has_idle = stanza:get_child("idle", "urn:xmpp:idle:1");
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
16 if last_activity and not has_idle then
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
17 module:log("debug", "Adding XEP-0319 tag from Last Activity.");
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
18 local seconds = last_activity.attr.seconds;
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
19 local last_userinteraction = datetime.datetime(os.time() - seconds);
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
20 stanza:tag("idle", { xmlns = "urn:xmpp:idle:1", since = last_userinteraction }):up();
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
21 end
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
22 end
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
23
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
24 -- incoming
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
25 module:hook("presence/full", on_presence, 900);
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
26 module:hook("presence/bare", on_presence, 900);
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
27
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
28 -- outgoing
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
29 module:hook("pre-presence/bare", on_presence, 900);
4e14ad802d58 mod_idlecompat: Add initial version.
Tobias Markmann <tm@ayena.de>
parents:
diff changeset
30 module:hook("pre-presence/full", on_presence, 900);
2164
4b58e35a72e0 mod_idlecompat: Reference the correct XEP (256, not 12) and drop a redundant check
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 1260
diff changeset
31 module:hook("pre-presence/host", on_presence, 900);