Annotate

plugins/mod_lastactivity.lua @ 9117:a19fdc6e4f09

util.pubsub: Apply defaults metatable before config check (thanks pep.) Makes it so that the callback sees the default if it’s not in the form, which makes it easier to validate.
author Kim Alvefur <zash@zash.se>
date Sun, 05 Aug 2018 15:17:00 +0200
parent 6302:76699a0ae4c4
child 9224:a84dbd2e08bc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2018
418c04834017 mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
1 -- Prosody IM
2923
b7049746bd29 Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents: 2029
diff changeset
2 -- Copyright (C) 2008-2010 Matthew Wild
b7049746bd29 Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents: 2029
diff changeset
3 -- Copyright (C) 2008-2010 Waqas Hussain
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 2923
diff changeset
4 --
2018
418c04834017 mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
5 -- This project is MIT/X11 licensed. Please see the
418c04834017 mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
6 -- COPYING file in the source package for more information.
418c04834017 mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
7 --
418c04834017 mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
8
418c04834017 mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
9 local st = require "util.stanza";
418c04834017 mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
10 local is_contact_subscribed = require "core.rostermanager".is_contact_subscribed;
418c04834017 mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
11 local jid_bare = require "util.jid".bare;
418c04834017 mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
12 local jid_split = require "util.jid".split;
418c04834017 mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
13
418c04834017 mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
14 module:add_feature("jabber:iq:last");
418c04834017 mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
15
418c04834017 mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
16 local map = {};
418c04834017 mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
17
418c04834017 mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
18 module:hook("pre-presence/bare", function(event)
418c04834017 mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
19 local stanza = event.stanza;
418c04834017 mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
20 if not(stanza.attr.to) and stanza.attr.type == "unavailable" then
418c04834017 mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
21 local t = os.time();
6302
76699a0ae4c4 mod_lastactivity, mod_legacyauth, mod_presence, mod_saslauth, mod_tls: Use the newer stanza:get_child APIs and optimize away some table lookups
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
22 local s = stanza:get_child_text("status");
2018
418c04834017 mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
23 map[event.origin.username] = {s = s, t = t};
418c04834017 mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
24 end
2029
d2363643a5c0 mod_lastactivity: Gave a positive priority to the presence event hook.
Waqas Hussain <waqas20@gmail.com>
parents: 2026
diff changeset
25 end, 10);
2018
418c04834017 mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
26
418c04834017 mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
27 module:hook("iq/bare/jabber:iq:last:query", function(event)
418c04834017 mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
28 local origin, stanza = event.origin, event.stanza;
418c04834017 mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
29 if stanza.attr.type == "get" then
418c04834017 mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
30 local username = jid_split(stanza.attr.to) or origin.username;
2025
dab1693f8a08 mod_lastactivity: Allow users to request their own last activity.
Waqas Hussain <waqas20@gmail.com>
parents: 2018
diff changeset
31 if not stanza.attr.to or is_contact_subscribed(username, module.host, jid_bare(stanza.attr.from)) then
2018
418c04834017 mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
32 local seconds, text = "0", "";
418c04834017 mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
33 if map[username] then
418c04834017 mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
34 seconds = tostring(os.difftime(os.time(), map[username].t));
418c04834017 mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
35 text = map[username].s;
418c04834017 mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
36 end
418c04834017 mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
37 origin.send(st.reply(stanza):tag('query', {xmlns='jabber:iq:last', seconds=seconds}):text(text));
418c04834017 mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
38 else
418c04834017 mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
39 origin.send(st.error_reply(stanza, 'auth', 'forbidden'));
418c04834017 mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
40 end
418c04834017 mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
41 return true;
418c04834017 mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
42 end
418c04834017 mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
43 end);
2026
97b17187b29d mod_lastactivity: Persist data across reloads.
Waqas Hussain <waqas20@gmail.com>
parents: 2025
diff changeset
44
97b17187b29d mod_lastactivity: Persist data across reloads.
Waqas Hussain <waqas20@gmail.com>
parents: 2025
diff changeset
45 module.save = function()
97b17187b29d mod_lastactivity: Persist data across reloads.
Waqas Hussain <waqas20@gmail.com>
parents: 2025
diff changeset
46 return {map = map};
97b17187b29d mod_lastactivity: Persist data across reloads.
Waqas Hussain <waqas20@gmail.com>
parents: 2025
diff changeset
47 end
97b17187b29d mod_lastactivity: Persist data across reloads.
Waqas Hussain <waqas20@gmail.com>
parents: 2025
diff changeset
48 module.restore = function(data)
97b17187b29d mod_lastactivity: Persist data across reloads.
Waqas Hussain <waqas20@gmail.com>
parents: 2025
diff changeset
49 map = data.map or {};
97b17187b29d mod_lastactivity: Persist data across reloads.
Waqas Hussain <waqas20@gmail.com>
parents: 2025
diff changeset
50 end
97b17187b29d mod_lastactivity: Persist data across reloads.
Waqas Hussain <waqas20@gmail.com>
parents: 2025
diff changeset
51