Software /
code /
prosody
Annotate
plugins/mod_roster.lua @ 7407:e465b584547b
MUC: Move the locked flag into persisted data (so not to lose it on eviction)
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Thu, 28 Apr 2016 23:14:09 +0200 |
parent | 7334:566d0a56b37f |
child | 7781:0d31d8052dd8 |
rev | line source |
---|---|
1523
841d61be198f
Remove version number from copyright headers
Matthew Wild <mwild1@gmail.com>
parents:
1355
diff
changeset
|
1 -- Prosody IM |
2923
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
2227
diff
changeset
|
2 -- Copyright (C) 2008-2010 Matthew Wild |
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
2227
diff
changeset
|
3 -- Copyright (C) 2008-2010 Waqas Hussain |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5372
diff
changeset
|
4 -- |
758 | 5 -- This project is MIT/X11 licensed. Please see the |
6 -- COPYING file in the source package for more information. | |
519
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
438
diff
changeset
|
7 -- |
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
438
diff
changeset
|
8 |
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
438
diff
changeset
|
9 |
30 | 10 local st = require "util.stanza" |
11 | |
108
1d79da482c5d
Added: More complete implementation for mod_roster
Waqas Hussain <waqas20@gmail.com>
parents:
102
diff
changeset
|
12 local jid_split = require "util.jid".split; |
928
92288c13d7bc
Fixed: mod_roster: Prep JIDs being added to roster (part of issue #57)
Waqas Hussain <waqas20@gmail.com>
parents:
916
diff
changeset
|
13 local jid_prep = require "util.jid".prep; |
108
1d79da482c5d
Added: More complete implementation for mod_roster
Waqas Hussain <waqas20@gmail.com>
parents:
102
diff
changeset
|
14 local t_concat = table.concat; |
3526
69a8c7e635c5
mod_roster: Cleaned up some unused variables and global accesses.
Waqas Hussain <waqas20@gmail.com>
parents:
3525
diff
changeset
|
15 local tonumber = tonumber; |
69a8c7e635c5
mod_roster: Cleaned up some unused variables and global accesses.
Waqas Hussain <waqas20@gmail.com>
parents:
3525
diff
changeset
|
16 local pairs, ipairs = pairs, ipairs; |
108
1d79da482c5d
Added: More complete implementation for mod_roster
Waqas Hussain <waqas20@gmail.com>
parents:
102
diff
changeset
|
17 |
5099
39eb688e106a
mod_roster: When an user is deleted, unsubscribe from their contacts
Kim Alvefur <zash@zash.se>
parents:
5013
diff
changeset
|
18 local rm_load_roster = require "core.rostermanager".load_roster; |
108
1d79da482c5d
Added: More complete implementation for mod_roster
Waqas Hussain <waqas20@gmail.com>
parents:
102
diff
changeset
|
19 local rm_remove_from_roster = require "core.rostermanager".remove_from_roster; |
110 | 20 local rm_add_to_roster = require "core.rostermanager".add_to_roster; |
108
1d79da482c5d
Added: More complete implementation for mod_roster
Waqas Hussain <waqas20@gmail.com>
parents:
102
diff
changeset
|
21 local rm_roster_push = require "core.rostermanager".roster_push; |
5013
ab693eea0869
mod_admin_adhoc, mod_admin_telnet, mod_bosh, mod_c2s, mod_component, mod_pep, mod_presence, mod_roster, mod_s2s: Import core_post_stanza from the global prosody table.
Kim Alvefur <zash@zash.se>
parents:
4265
diff
changeset
|
22 local core_post_stanza = prosody.core_post_stanza; |
108
1d79da482c5d
Added: More complete implementation for mod_roster
Waqas Hussain <waqas20@gmail.com>
parents:
102
diff
changeset
|
23 |
541
3521e0851c9e
Change modules to use the new add_feature module API method.
Waqas Hussain <waqas20@gmail.com>
parents:
519
diff
changeset
|
24 module:add_feature("jabber:iq:roster"); |
421
63be85693710
Modules now sending disco replies
Waqas Hussain <waqas20@gmail.com>
parents:
326
diff
changeset
|
25 |
4265
d56c26c258e4
mod_roster: Remove <optional/> from roster version stream feature, as per latest specs.
Waqas Hussain <waqas20@gmail.com>
parents:
3540
diff
changeset
|
26 local rosterver_stream_feature = st.stanza("ver", {xmlns="urn:xmpp:features:rosterver"}); |
2611
c3ea4d3f857f
mod_roster: Hook stream-features event using new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
2227
diff
changeset
|
27 module:hook("stream-features", function(event) |
c3ea4d3f857f
mod_roster: Hook stream-features event using new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
2227
diff
changeset
|
28 local origin, features = event.origin, event.features; |
c3ea4d3f857f
mod_roster: Hook stream-features event using new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
2227
diff
changeset
|
29 if origin.username then |
c3ea4d3f857f
mod_roster: Hook stream-features event using new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
2227
diff
changeset
|
30 features:add_child(rosterver_stream_feature); |
c3ea4d3f857f
mod_roster: Hook stream-features event using new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
2227
diff
changeset
|
31 end |
c3ea4d3f857f
mod_roster: Hook stream-features event using new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
2227
diff
changeset
|
32 end); |
1133
b293d7dc6a45
mod_roster: Advertize roster versioning support
Waqas Hussain <waqas20@gmail.com>
parents:
928
diff
changeset
|
33 |
3525
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
34 module:hook("iq/self/jabber:iq:roster:query", function(event) |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
35 local session, stanza = event.origin, event.stanza; |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
36 |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
37 if stanza.attr.type == "get" then |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
38 local roster = st.reply(stanza); |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5372
diff
changeset
|
39 |
3525
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
40 local client_ver = tonumber(stanza.tags[1].attr.ver); |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
41 local server_ver = tonumber(session.roster[false].version or 1); |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5372
diff
changeset
|
42 |
3525
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
43 if not (client_ver and server_ver) or client_ver ~= server_ver then |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
44 roster:query("jabber:iq:roster"); |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
45 -- Client does not support versioning, or has stale roster |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
46 for jid, item in pairs(session.roster) do |
6613
2aae36312eb9
rostermanager, mod_roster, mod_presence: Move pending roster items to roster metadata field
Kim Alvefur <zash@zash.se>
parents:
5776
diff
changeset
|
47 if jid then |
3525
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
48 roster:tag("item", { |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
49 jid = jid, |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
50 subscription = item.subscription, |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
51 ask = item.ask, |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
52 name = item.name, |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
53 }); |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
54 for group in pairs(item.groups) do |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
55 roster:tag("group"):text(group):up(); |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
56 end |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
57 roster:up(); -- move out from item |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
58 end |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
59 end |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
60 roster.tags[1].attr.ver = server_ver; |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
61 end |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
62 session.send(roster); |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
63 session.interested = true; -- resource is interested in roster updates |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
64 else -- stanza.attr.type == "set" |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
65 local query = stanza.tags[1]; |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
66 if #query.tags == 1 and query.tags[1].name == "item" |
6613
2aae36312eb9
rostermanager, mod_roster, mod_presence: Move pending roster items to roster metadata field
Kim Alvefur <zash@zash.se>
parents:
5776
diff
changeset
|
67 and query.tags[1].attr.xmlns == "jabber:iq:roster" and query.tags[1].attr.jid then |
3525
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
68 local item = query.tags[1]; |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
69 local from_node, from_host = jid_split(stanza.attr.from); |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
70 local jid = jid_prep(item.attr.jid); |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
71 local node, host, resource = jid_split(jid); |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
72 if not resource and host then |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
73 if jid ~= from_node.."@"..from_host then |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
74 if item.attr.subscription == "remove" then |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
75 local roster = session.roster; |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
76 local r_item = roster[jid]; |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
77 if r_item then |
7331
c8ad387aab1c
mod_presence, mod_roster: Move responsibility for sending presence on roster removal to mod_presence
Kim Alvefur <zash@zash.se>
parents:
6613
diff
changeset
|
78 module:fire_event("roster-item-removed", { |
c8ad387aab1c
mod_presence, mod_roster: Move responsibility for sending presence on roster removal to mod_presence
Kim Alvefur <zash@zash.se>
parents:
6613
diff
changeset
|
79 username = node, jid = jid, item = r_item, origin = session, roster = roster, |
c8ad387aab1c
mod_presence, mod_roster: Move responsibility for sending presence on roster removal to mod_presence
Kim Alvefur <zash@zash.se>
parents:
6613
diff
changeset
|
80 }); |
3525
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
81 local success, err_type, err_cond, err_msg = rm_remove_from_roster(session, jid); |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
82 if success then |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
83 session.send(st.reply(stanza)); |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
84 rm_roster_push(from_node, from_host, jid); |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
85 else |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
86 session.send(st.error_reply(stanza, err_type, err_cond, err_msg)); |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
87 end |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
88 else |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
89 session.send(st.error_reply(stanza, "modify", "item-not-found")); |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
90 end |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
91 else |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
92 local r_item = {name = item.attr.name, groups = {}}; |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
93 if r_item.name == "" then r_item.name = nil; end |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
94 if session.roster[jid] then |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
95 r_item.subscription = session.roster[jid].subscription; |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
96 r_item.ask = session.roster[jid].ask; |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
97 else |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
98 r_item.subscription = "none"; |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
99 end |
3540
bc139431830b
Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents:
3526
diff
changeset
|
100 for _, child in ipairs(item) do |
3525
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
101 if child.name == "group" then |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
102 local text = t_concat(child); |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
103 if text and text ~= "" then |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
104 r_item.groups[text] = true; |
916
f0743928ef7e
core.rostermanager/mod_roster: Support for roster versioning
Matthew Wild <mwild1@gmail.com>
parents:
896
diff
changeset
|
105 end |
177
606c433955e7
Bug fixes and checks for presence subscriptions, etc
Waqas Hussain <waqas20@gmail.com>
parents:
132
diff
changeset
|
106 end |
108
1d79da482c5d
Added: More complete implementation for mod_roster
Waqas Hussain <waqas20@gmail.com>
parents:
102
diff
changeset
|
107 end |
3525
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
108 local success, err_type, err_cond, err_msg = rm_add_to_roster(session, jid, r_item); |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
109 if success then |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
110 -- Ok, send success |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
111 session.send(st.reply(stanza)); |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
112 -- and push change to all resources |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
113 rm_roster_push(from_node, from_host, jid); |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
114 else |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
115 -- Adding to roster failed |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
116 session.send(st.error_reply(stanza, err_type, err_cond, err_msg)); |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
117 end |
102
a5b914370db5
Fixed: mod_roster now outputs all roster data (instead of just the JIDs)
Waqas Hussain <waqas20@gmail.com>
parents:
79
diff
changeset
|
118 end |
3525
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
119 else |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
120 -- Trying to add self to roster |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
121 session.send(st.error_reply(stanza, "cancel", "not-allowed")); |
30 | 122 end |
3525
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
123 else |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
124 -- Invalid JID added to roster |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
125 session.send(st.error_reply(stanza, "modify", "bad-request")); -- FIXME what's the correct error? |
30 | 126 end |
3525
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
127 else |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
128 -- Roster set didn't include a single item, or its name wasn't 'item' |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
129 session.send(st.error_reply(stanza, "modify", "bad-request")); |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
130 end |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
131 end |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
132 return true; |
1e44e7e8e79c
mod_roster: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3323
diff
changeset
|
133 end); |
5099
39eb688e106a
mod_roster: When an user is deleted, unsubscribe from their contacts
Kim Alvefur <zash@zash.se>
parents:
5013
diff
changeset
|
134 |
39eb688e106a
mod_roster: When an user is deleted, unsubscribe from their contacts
Kim Alvefur <zash@zash.se>
parents:
5013
diff
changeset
|
135 module:hook_global("user-deleted", function(event) |
39eb688e106a
mod_roster: When an user is deleted, unsubscribe from their contacts
Kim Alvefur <zash@zash.se>
parents:
5013
diff
changeset
|
136 local username, host = event.username, event.host; |
7333
9d0e65d919e8
mod_roster: Handle roster item removal with event on user deletion
Kim Alvefur <zash@zash.se>
parents:
7331
diff
changeset
|
137 local origin = event.origin or prosody.hosts[host]; |
5099
39eb688e106a
mod_roster: When an user is deleted, unsubscribe from their contacts
Kim Alvefur <zash@zash.se>
parents:
5013
diff
changeset
|
138 if host ~= module.host then return end |
39eb688e106a
mod_roster: When an user is deleted, unsubscribe from their contacts
Kim Alvefur <zash@zash.se>
parents:
5013
diff
changeset
|
139 local bare = username .. "@" .. host; |
39eb688e106a
mod_roster: When an user is deleted, unsubscribe from their contacts
Kim Alvefur <zash@zash.se>
parents:
5013
diff
changeset
|
140 local roster = rm_load_roster(username, host); |
39eb688e106a
mod_roster: When an user is deleted, unsubscribe from their contacts
Kim Alvefur <zash@zash.se>
parents:
5013
diff
changeset
|
141 for jid, item in pairs(roster) do |
6613
2aae36312eb9
rostermanager, mod_roster, mod_presence: Move pending roster items to roster metadata field
Kim Alvefur <zash@zash.se>
parents:
5776
diff
changeset
|
142 if jid then |
7333
9d0e65d919e8
mod_roster: Handle roster item removal with event on user deletion
Kim Alvefur <zash@zash.se>
parents:
7331
diff
changeset
|
143 module:fire_event("roster-item-removed", { |
9d0e65d919e8
mod_roster: Handle roster item removal with event on user deletion
Kim Alvefur <zash@zash.se>
parents:
7331
diff
changeset
|
144 username = username, jid = jid, item = item, roster = roster, origin = origin, |
9d0e65d919e8
mod_roster: Handle roster item removal with event on user deletion
Kim Alvefur <zash@zash.se>
parents:
7331
diff
changeset
|
145 }); |
7334
566d0a56b37f
mod_roster: Fire event for pending items for good measure
Kim Alvefur <zash@zash.se>
parents:
7333
diff
changeset
|
146 else |
566d0a56b37f
mod_roster: Fire event for pending items for good measure
Kim Alvefur <zash@zash.se>
parents:
7333
diff
changeset
|
147 for jid in pairs(item.pending) do |
566d0a56b37f
mod_roster: Fire event for pending items for good measure
Kim Alvefur <zash@zash.se>
parents:
7333
diff
changeset
|
148 module:fire_event("roster-item-removed", { |
566d0a56b37f
mod_roster: Fire event for pending items for good measure
Kim Alvefur <zash@zash.se>
parents:
7333
diff
changeset
|
149 username = username, jid = jid, roster = roster, origin = origin, |
566d0a56b37f
mod_roster: Fire event for pending items for good measure
Kim Alvefur <zash@zash.se>
parents:
7333
diff
changeset
|
150 }); |
566d0a56b37f
mod_roster: Fire event for pending items for good measure
Kim Alvefur <zash@zash.se>
parents:
7333
diff
changeset
|
151 end |
5099
39eb688e106a
mod_roster: When an user is deleted, unsubscribe from their contacts
Kim Alvefur <zash@zash.se>
parents:
5013
diff
changeset
|
152 end |
39eb688e106a
mod_roster: When an user is deleted, unsubscribe from their contacts
Kim Alvefur <zash@zash.se>
parents:
5013
diff
changeset
|
153 end |
39eb688e106a
mod_roster: When an user is deleted, unsubscribe from their contacts
Kim Alvefur <zash@zash.se>
parents:
5013
diff
changeset
|
154 end, 300); |