Software /
code /
prosody
Annotate
plugins/mod_lastactivity.lua @ 13241:0419de4e4db1
mod_storage_sql: Pass variables as arguments instead of upvalues
Probably a workaround for the lack of argument passing when using xpcall
in Lua 5.1, no longer relevant.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 22 Jul 2023 15:22:54 +0200 |
parent | 12977:74b9e05af71e |
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 |
12977
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
10750
diff
changeset
|
9 local st = require "prosody.util.stanza"; |
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
10750
diff
changeset
|
10 local is_contact_subscribed = require "prosody.core.rostermanager".is_contact_subscribed; |
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
10750
diff
changeset
|
11 local jid_bare = require "prosody.util.jid".bare; |
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
10750
diff
changeset
|
12 local jid_split = require "prosody.util.jid".split; |
2018
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 |
9224
a84dbd2e08bc
mod_lastactivity: Simplify iq handling by hooking on iq-get/ instead of iq/.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
6302
diff
changeset
|
27 module:hook("iq-get/bare/jabber:iq:last:query", function(event) |
2018
418c04834017
mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
28 local origin, stanza = event.origin, event.stanza; |
9224
a84dbd2e08bc
mod_lastactivity: Simplify iq handling by hooking on iq-get/ instead of iq/.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
6302
diff
changeset
|
29 local username = jid_split(stanza.attr.to) or origin.username; |
a84dbd2e08bc
mod_lastactivity: Simplify iq handling by hooking on iq-get/ instead of iq/.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
6302
diff
changeset
|
30 if not stanza.attr.to or is_contact_subscribed(username, module.host, jid_bare(stanza.attr.from)) then |
a84dbd2e08bc
mod_lastactivity: Simplify iq handling by hooking on iq-get/ instead of iq/.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
6302
diff
changeset
|
31 local seconds, text = "0", ""; |
a84dbd2e08bc
mod_lastactivity: Simplify iq handling by hooking on iq-get/ instead of iq/.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
6302
diff
changeset
|
32 if map[username] then |
10750
ff087f2d4cb6
mod_lastactivity: Encode seconds as decimal, not float
Kim Alvefur <zash@zash.se>
parents:
9224
diff
changeset
|
33 seconds = string.format("%d", os.difftime(os.time(), map[username].t)); |
9224
a84dbd2e08bc
mod_lastactivity: Simplify iq handling by hooking on iq-get/ instead of iq/.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
6302
diff
changeset
|
34 text = map[username].s; |
2018
418c04834017
mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
35 end |
9224
a84dbd2e08bc
mod_lastactivity: Simplify iq handling by hooking on iq-get/ instead of iq/.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
6302
diff
changeset
|
36 origin.send(st.reply(stanza):tag('query', {xmlns='jabber:iq:last', seconds=seconds}):text(text)); |
a84dbd2e08bc
mod_lastactivity: Simplify iq handling by hooking on iq-get/ instead of iq/.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
6302
diff
changeset
|
37 else |
a84dbd2e08bc
mod_lastactivity: Simplify iq handling by hooking on iq-get/ instead of iq/.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
6302
diff
changeset
|
38 origin.send(st.error_reply(stanza, 'auth', 'forbidden')); |
2018
418c04834017
mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
39 end |
9224
a84dbd2e08bc
mod_lastactivity: Simplify iq handling by hooking on iq-get/ instead of iq/.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
6302
diff
changeset
|
40 return true; |
2018
418c04834017
mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
41 end); |
2026
97b17187b29d
mod_lastactivity: Persist data across reloads.
Waqas Hussain <waqas20@gmail.com>
parents:
2025
diff
changeset
|
42 |
97b17187b29d
mod_lastactivity: Persist data across reloads.
Waqas Hussain <waqas20@gmail.com>
parents:
2025
diff
changeset
|
43 module.save = function() |
97b17187b29d
mod_lastactivity: Persist data across reloads.
Waqas Hussain <waqas20@gmail.com>
parents:
2025
diff
changeset
|
44 return {map = map}; |
97b17187b29d
mod_lastactivity: Persist data across reloads.
Waqas Hussain <waqas20@gmail.com>
parents:
2025
diff
changeset
|
45 end |
97b17187b29d
mod_lastactivity: Persist data across reloads.
Waqas Hussain <waqas20@gmail.com>
parents:
2025
diff
changeset
|
46 module.restore = function(data) |
97b17187b29d
mod_lastactivity: Persist data across reloads.
Waqas Hussain <waqas20@gmail.com>
parents:
2025
diff
changeset
|
47 map = data.map or {}; |
97b17187b29d
mod_lastactivity: Persist data across reloads.
Waqas Hussain <waqas20@gmail.com>
parents:
2025
diff
changeset
|
48 end |
97b17187b29d
mod_lastactivity: Persist data across reloads.
Waqas Hussain <waqas20@gmail.com>
parents:
2025
diff
changeset
|
49 |