author | Matthew Wild <mwild1@gmail.com> |
Mon, 29 Apr 2013 00:36:04 +0100 | |
changeset 5534 | 522e99b898a0 |
parent 2923 | b7049746bd29 |
child 5776 | bd0ff8ae98a8 |
permissions | -rw-r--r-- |
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 |
2018
418c04834017
mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
4 |
-- |
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(); |
418c04834017
mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
22 |
local s = stanza:child_with_name("status"); |
418c04834017
mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
23 |
s = s and #s.tags == 0 and s[1] or ""; |
418c04834017
mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
24 |
map[event.origin.username] = {s = s, t = t}; |
418c04834017
mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
25 |
end |
2029
d2363643a5c0
mod_lastactivity: Gave a positive priority to the presence event hook.
Waqas Hussain <waqas20@gmail.com>
parents:
2026
diff
changeset
|
26 |
end, 10); |
2018
418c04834017
mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
27 |
|
418c04834017
mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
28 |
module:hook("iq/bare/jabber:iq:last:query", function(event) |
418c04834017
mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
29 |
local origin, stanza = event.origin, event.stanza; |
418c04834017
mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
30 |
if stanza.attr.type == "get" then |
418c04834017
mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
31 |
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
|
32 |
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
|
33 |
local seconds, text = "0", ""; |
418c04834017
mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
34 |
if map[username] then |
418c04834017
mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
35 |
seconds = tostring(os.difftime(os.time(), map[username].t)); |
418c04834017
mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
36 |
text = map[username].s; |
418c04834017
mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
37 |
end |
418c04834017
mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
38 |
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
|
39 |
else |
418c04834017
mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
40 |
origin.send(st.error_reply(stanza, 'auth', 'forbidden')); |
418c04834017
mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
41 |
end |
418c04834017
mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
42 |
return true; |
418c04834017
mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
43 |
end |
418c04834017
mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
44 |
end); |
2026
97b17187b29d
mod_lastactivity: Persist data across reloads.
Waqas Hussain <waqas20@gmail.com>
parents:
2025
diff
changeset
|
45 |
|
97b17187b29d
mod_lastactivity: Persist data across reloads.
Waqas Hussain <waqas20@gmail.com>
parents:
2025
diff
changeset
|
46 |
module.save = function() |
97b17187b29d
mod_lastactivity: Persist data across reloads.
Waqas Hussain <waqas20@gmail.com>
parents:
2025
diff
changeset
|
47 |
return {map = map}; |
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 |
module.restore = function(data) |
97b17187b29d
mod_lastactivity: Persist data across reloads.
Waqas Hussain <waqas20@gmail.com>
parents:
2025
diff
changeset
|
50 |
map = data.map or {}; |
97b17187b29d
mod_lastactivity: Persist data across reloads.
Waqas Hussain <waqas20@gmail.com>
parents:
2025
diff
changeset
|
51 |
end |
97b17187b29d
mod_lastactivity: Persist data across reloads.
Waqas Hussain <waqas20@gmail.com>
parents:
2025
diff
changeset
|
52 |