Mercurial > prosody-modules
annotate mod_remote_roster/mod_remote_roster.lua @ 315:dead242beee3
mod_remote_roster: Implement section 2.5 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
| author | Waqas Hussain <waqas20@gmail.com> |
|---|---|
| date | Mon, 10 Jan 2011 17:20:34 +0500 |
| parents | df212e1fa576 |
| children | c86fc337d56f |
| rev | line source |
|---|---|
|
314
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
1 -- |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
2 -- mod_remote_roster |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
3 -- |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
4 -- This is an experimental implementation of http://jkaluza.fedorapeople.org/remote-roster.html |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
5 -- |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
6 |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
7 local st = require "util.stanza"; |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
8 local jid_split = require "util.jid".split; |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
9 local jid_prep = require "util.jid".prep; |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
10 local t_concat = table.concat; |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
11 local tonumber = tonumber; |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
12 local pairs, ipairs = pairs, ipairs; |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
13 local hosts = hosts; |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
14 |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
15 local load_roster = require "core.rostermanager".load_roster; |
|
315
dead242beee3
mod_remote_roster: Implement section 2.5 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
314
diff
changeset
|
16 local save_roster = require "core.rostermanager".save_roster; |
|
314
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
17 local rm_remove_from_roster = require "core.rostermanager".remove_from_roster; |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
18 local rm_add_to_roster = require "core.rostermanager".add_to_roster; |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
19 local rm_roster_push = require "core.rostermanager".roster_push; |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
20 local core_post_stanza = core_post_stanza; |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
21 local user_exists = require "core.usermanager".user_exists; |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
22 local add_task = require "util.timer".add_task; |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
23 |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
24 module:hook("iq-get/bare/jabber:iq:roster:query", function(event) |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
25 local origin, stanza = event.origin, event.stanza; |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
26 |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
27 if origin.type == "component" and stanza.attr.from == origin.host then |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
28 local node, host = jid_split(stanza.attr.to); |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
29 local roster = load_roster(node, host); |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
30 |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
31 local reply = st.reply(stanza):query("jabber:iq:roster"); |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
32 for jid, item in pairs(roster) do |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
33 if jid ~= "pending" and jid then |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
34 local node, host = jid_split(jid); |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
35 if host == origin.host then -- only include contacts which are on this component |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
36 reply:tag("item", { |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
37 jid = jid, |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
38 subscription = item.subscription, |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
39 ask = item.ask, |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
40 name = item.name, |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
41 }); |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
42 for group in pairs(item.groups) do |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
43 reply:tag("group"):text(group):up(); |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
44 end |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
45 reply:up(); -- move out from item |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
46 end |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
47 end |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
48 end |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
49 origin.send(reply); |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
50 --origin.interested = true; -- resource is interested in roster updates |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
51 return true; |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
52 end |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
53 end); |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
54 |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
55 module:hook("iq-set/bare/jabber:iq:roster:query", function(event) |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
56 local session, stanza = event.origin, event.stanza; |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
57 |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
58 if not(session.type == "component" and stanza.attr.from == session.host) then return; end |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
59 local from_node, from_host = jid_split(stanza.attr.to); |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
60 if not(user_exists(from_node, from_host)) then return; end |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
61 local roster = load_roster(from_node, from_host); |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
62 if not(roster) then return; end |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
63 |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
64 local query = stanza.tags[1]; |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
65 if #query.tags == 1 and query.tags[1].name == "item" |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
66 and query.tags[1].attr.xmlns == "jabber:iq:roster" and query.tags[1].attr.jid |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
67 -- Protection against overwriting roster.pending, until we move it |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
68 and query.tags[1].attr.jid ~= "pending" then |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
69 local item = query.tags[1]; |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
70 local jid = jid_prep(item.attr.jid); |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
71 local node, host, resource = jid_split(jid); |
|
315
dead242beee3
mod_remote_roster: Implement section 2.5 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
314
diff
changeset
|
72 if not resource and host == session.host then |
|
dead242beee3
mod_remote_roster: Implement section 2.5 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
314
diff
changeset
|
73 if jid ~= stanza.attr.to then -- not self-jid |
|
314
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
74 if item.attr.subscription == "remove" then |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
75 local r_item = roster[jid]; |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
76 if r_item then |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
77 local to_bare = node and (node.."@"..host) or host; -- bare JID |
|
315
dead242beee3
mod_remote_roster: Implement section 2.5 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
314
diff
changeset
|
78 --if r_item.subscription == "both" or r_item.subscription == "from" or (roster.pending and roster.pending[jid]) then |
|
dead242beee3
mod_remote_roster: Implement section 2.5 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
314
diff
changeset
|
79 -- core_post_stanza(hosts[module.host], st.presence({type="unsubscribed", from=stanza.attr.to, to=to_bare})); |
|
dead242beee3
mod_remote_roster: Implement section 2.5 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
314
diff
changeset
|
80 --end |
|
dead242beee3
mod_remote_roster: Implement section 2.5 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
314
diff
changeset
|
81 --if r_item.subscription == "both" or r_item.subscription == "to" or r_item.ask then |
|
dead242beee3
mod_remote_roster: Implement section 2.5 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
314
diff
changeset
|
82 -- core_post_stanza(hosts[module.host], st.presence({type="unsubscribe", from=stanza.attr.to, to=to_bare})); |
|
dead242beee3
mod_remote_roster: Implement section 2.5 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
314
diff
changeset
|
83 --end |
|
dead242beee3
mod_remote_roster: Implement section 2.5 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
314
diff
changeset
|
84 roster[jid] = nil; |
|
dead242beee3
mod_remote_roster: Implement section 2.5 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
314
diff
changeset
|
85 if save_roster(from_node, from_host, roster) then |
|
314
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
86 session.send(st.reply(stanza)); |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
87 rm_roster_push(from_node, from_host, jid); |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
88 else |
|
315
dead242beee3
mod_remote_roster: Implement section 2.5 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
314
diff
changeset
|
89 roster[jid] = item; |
|
dead242beee3
mod_remote_roster: Implement section 2.5 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
314
diff
changeset
|
90 session.send(st.error_reply(stanza, "wait", "internal-server-error", "Unable to save roster")); |
|
314
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
91 end |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
92 else |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
93 session.send(st.error_reply(stanza, "modify", "item-not-found")); |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
94 end |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
95 else |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
96 local r_item = {name = item.attr.name, groups = {}}; |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
97 if r_item.name == "" then r_item.name = nil; end |
|
315
dead242beee3
mod_remote_roster: Implement section 2.5 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
314
diff
changeset
|
98 if roster[jid] then |
|
dead242beee3
mod_remote_roster: Implement section 2.5 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
314
diff
changeset
|
99 r_item.subscription = roster[jid].subscription; |
|
dead242beee3
mod_remote_roster: Implement section 2.5 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
314
diff
changeset
|
100 r_item.ask = roster[jid].ask; |
|
314
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
101 else |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
102 r_item.subscription = "none"; |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
103 end |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
104 for _, child in ipairs(item) do |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
105 if child.name == "group" then |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
106 local text = t_concat(child); |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
107 if text and text ~= "" then |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
108 r_item.groups[text] = true; |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
109 end |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
110 end |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
111 end |
|
315
dead242beee3
mod_remote_roster: Implement section 2.5 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
314
diff
changeset
|
112 local olditem = roster[jid]; |
|
dead242beee3
mod_remote_roster: Implement section 2.5 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
314
diff
changeset
|
113 roster[jid] = r_item; |
|
dead242beee3
mod_remote_roster: Implement section 2.5 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
314
diff
changeset
|
114 if save_roster(from_node, from_host, roster) then -- Ok, send success |
|
314
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
115 session.send(st.reply(stanza)); |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
116 -- and push change to all resources |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
117 rm_roster_push(from_node, from_host, jid); |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
118 else -- Adding to roster failed |
|
315
dead242beee3
mod_remote_roster: Implement section 2.5 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
314
diff
changeset
|
119 roster[jid] = olditem; |
|
dead242beee3
mod_remote_roster: Implement section 2.5 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
314
diff
changeset
|
120 session.send(st.error_reply(stanza, "wait", "internal-server-error", "Unable to save roster")); |
|
314
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
121 end |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
122 end |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
123 else -- Trying to add self to roster |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
124 session.send(st.error_reply(stanza, "cancel", "not-allowed")); |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
125 end |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
126 else -- Invalid JID added to roster |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
127 session.send(st.error_reply(stanza, "modify", "bad-request")); -- FIXME what's the correct error? |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
128 end |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
129 else -- Roster set didn't include a single item, or its name wasn't 'item' |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
130 session.send(st.error_reply(stanza, "modify", "bad-request")); |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
131 end |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
132 return true; |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
133 end); |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
134 |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
135 function component_roster_push(node, host, jid) |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
136 local roster = load_roster(node, host); |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
137 if roster then |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
138 local item = roster[jid]; |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
139 local contact_node, contact_host = jid_split(jid); |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
140 local stanza = st.iq({ type="set", from=node.."@"..host, to=contact_host }):query("jabber:iq:roster"); |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
141 if item then |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
142 stanza:tag("item", { jid = jid, subscription = item.subscription, name = item.name, ask = item.ask }); |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
143 for group in pairs(item.groups) do |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
144 stanza:tag("group"):text(group):up(); |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
145 end |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
146 else |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
147 stanza:tag("item", {jid = jid, subscription = "remove"}); |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
148 end |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
149 stanza:up(); -- move out from item |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
150 stanza:up(); -- move out from stanza |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
151 core_post_stanza(hosts[module.host], stanza); |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
152 end |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
153 end |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
154 |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
155 module:hook("iq-set/bare/jabber:iq:roster:query", function(event) |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
156 local origin, stanza = event.origin, event.stanza; |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
157 local query = stanza.tags[1]; |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
158 local item = query.tags[1]; |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
159 local contact_jid = item and item.name == "item" and item.attr.jid ~= "pending" and item.attr.jid; |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
160 if contact_jid then |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
161 local contact_node, contact_host = jid_split(contact_jid); |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
162 if hosts[contact_host] and hosts[contact_host].type == "component" then |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
163 local node, host = jid_split(stanza.attr.to or origin.full_jid); |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
164 add_task(0, function() |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
165 component_roster_push(node, host, contact_jid); |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
166 end); |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
167 end |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
168 end |
|
df212e1fa576
mod_remote_roster: Initial commit. Implements 2.2, 2.3 of <http://jkaluza.fedorapeople.org/remote-roster.html>.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
169 end, 100); |
