Mercurial > prosody-modules
annotate mod_remote_roster/mod_remote_roster.lua @ 4564:d25f0fea270f
mod_muc_bot: Reduce hackyness of occupant construction
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 10 Apr 2021 19:20:03 +0200 |
parents | 295ae44b8a01 |
children | ad6e9b0fd15b |
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 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
|
21 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
|
22 |
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 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
|
24 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
|
25 |
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 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
|
27 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
|
28 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
|
29 |
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 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
|
31 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
|
32 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
|
33 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
|
34 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
|
35 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
|
36 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
|
37 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
|
38 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
|
39 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
|
40 }); |
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 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
|
42 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
|
43 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
|
44 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
|
45 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
|
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 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
|
49 --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
|
50 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
|
51 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
|
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 |
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 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
|
55 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
|
56 |
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 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
|
58 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
|
59 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
|
60 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
|
61 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
|
62 |
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 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
|
64 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
|
65 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
|
66 -- 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
|
67 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
|
68 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
|
69 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
|
70 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
|
71 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
|
72 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
|
73 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
|
74 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
|
75 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
|
76 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
|
77 --if r_item.subscription == "both" or r_item.subscription == "from" or (roster.pending and roster.pending[jid]) then |
758
295ae44b8a01
mod_remote_roster: Replace use of core_post_stanza() with module:send()
Kim Alvefur <zash@zash.se>
parents:
316
diff
changeset
|
78 -- module:send(st.presence({type="unsubscribed", from=stanza.attr.to, to=to_bare})); |
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
|
79 --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
|
80 --if r_item.subscription == "both" or r_item.subscription == "to" or r_item.ask then |
758
295ae44b8a01
mod_remote_roster: Replace use of core_post_stanza() with module:send()
Kim Alvefur <zash@zash.se>
parents:
316
diff
changeset
|
81 -- module:send(st.presence({type="unsubscribe", from=stanza.attr.to, to=to_bare})); |
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
|
82 --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
|
83 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
|
84 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
|
85 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
|
86 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
|
87 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
|
88 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
|
89 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
|
90 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
|
91 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
|
92 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
|
93 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
|
94 else |
316
c86fc337d56f
mod_remote_roster: Let component set roster item subscription.
Waqas Hussain <waqas20@gmail.com>
parents:
315
diff
changeset
|
95 local subscription = item.attr.subscription; |
c86fc337d56f
mod_remote_roster: Let component set roster item subscription.
Waqas Hussain <waqas20@gmail.com>
parents:
315
diff
changeset
|
96 if subscription ~= "both" and subscription ~= "to" and subscription ~= "from" and subscription ~= "none" then -- TODO error on invalid |
c86fc337d56f
mod_remote_roster: Let component set roster item subscription.
Waqas Hussain <waqas20@gmail.com>
parents:
315
diff
changeset
|
97 subscription = roster[jid] and roster[jid].subscription or "none"; |
c86fc337d56f
mod_remote_roster: Let component set roster item subscription.
Waqas Hussain <waqas20@gmail.com>
parents:
315
diff
changeset
|
98 end |
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
|
99 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
|
100 if r_item.name == "" then r_item.name = nil; end |
316
c86fc337d56f
mod_remote_roster: Let component set roster item subscription.
Waqas Hussain <waqas20@gmail.com>
parents:
315
diff
changeset
|
101 r_item.subscription = subscription; |
c86fc337d56f
mod_remote_roster: Let component set roster item subscription.
Waqas Hussain <waqas20@gmail.com>
parents:
315
diff
changeset
|
102 if subscription ~= "both" and subscription ~= "to" then |
c86fc337d56f
mod_remote_roster: Let component set roster item subscription.
Waqas Hussain <waqas20@gmail.com>
parents:
315
diff
changeset
|
103 r_item.ask = roster[jid] and 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
|
104 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
|
105 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
|
106 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
|
107 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
|
108 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
|
109 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
|
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 |
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
|
112 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
|
113 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
|
114 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
|
115 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
|
116 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
|
117 -- 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
|
118 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
|
119 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
|
120 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
|
121 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
|
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 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
|
124 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
|
125 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
|
126 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
|
127 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
|
128 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
|
129 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
|
130 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
|
131 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
|
132 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
|
133 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
|
134 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
|
135 |
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 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
|
137 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
|
138 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
|
139 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
|
140 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
|
141 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
|
142 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
|
143 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
|
144 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
|
145 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
|
146 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
|
147 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
|
148 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
|
149 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
|
150 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
|
151 stanza:up(); -- move out from stanza |
758
295ae44b8a01
mod_remote_roster: Replace use of core_post_stanza() with module:send()
Kim Alvefur <zash@zash.se>
parents:
316
diff
changeset
|
152 module:send(stanza); |
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
|
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 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
|
155 |
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 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
|
157 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
|
158 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
|
159 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
|
160 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
|
161 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
|
162 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
|
163 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
|
164 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
|
165 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
|
166 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
|
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 |
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
|
170 end, 100); |