Software /
code /
prosody
Annotate
plugins/mod_lastactivity.lua @ 2018:418c04834017
mod_lastactivity: Initial commit.
author | Waqas Hussain <waqas20@gmail.com> |
---|---|
date | Sun, 18 Oct 2009 22:49:03 +0500 |
child | 2025:dab1693f8a08 |
rev | line source |
---|---|
2018
418c04834017
mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
1 -- Prosody IM |
418c04834017
mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
2 -- Copyright (C) 2008-2009 Matthew Wild |
418c04834017
mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
3 -- Copyright (C) 2008-2009 Waqas Hussain |
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 |
418c04834017
mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
26 end); |
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; |
418c04834017
mod_lastactivity: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
32 if is_contact_subscribed(username, module.host, jid_bare(stanza.attr.from)) then |
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); |