Comparison

plugins/mod_roster.lua @ 5099:39eb688e106a

mod_roster: When an user is deleted, unsubscribe from their contacts
author Kim Alvefur <zash@zash.se>
date Sat, 25 Aug 2012 01:31:05 +0200
parent 5013:ab693eea0869
child 5372:676e3cf0e565
comparison
equal deleted inserted replaced
5098:fca8b5946f6f 5099:39eb688e106a
13 local jid_prep = require "util.jid".prep; 13 local jid_prep = require "util.jid".prep;
14 local t_concat = table.concat; 14 local t_concat = table.concat;
15 local tonumber = tonumber; 15 local tonumber = tonumber;
16 local pairs, ipairs = pairs, ipairs; 16 local pairs, ipairs = pairs, ipairs;
17 17
18 local rm_load_roster = require "core.rostermanager".load_roster;
18 local rm_remove_from_roster = require "core.rostermanager".remove_from_roster; 19 local rm_remove_from_roster = require "core.rostermanager".remove_from_roster;
19 local rm_add_to_roster = require "core.rostermanager".add_to_roster; 20 local rm_add_to_roster = require "core.rostermanager".add_to_roster;
20 local rm_roster_push = require "core.rostermanager".roster_push; 21 local rm_roster_push = require "core.rostermanager".roster_push;
21 local core_post_stanza = prosody.core_post_stanza; 22 local core_post_stanza = prosody.core_post_stanza;
22 23
135 session.send(st.error_reply(stanza, "modify", "bad-request")); 136 session.send(st.error_reply(stanza, "modify", "bad-request"));
136 end 137 end
137 end 138 end
138 return true; 139 return true;
139 end); 140 end);
141
142 module:hook_global("user-deleted", function(event)
143 local username, host = event.username, event.host;
144 if host ~= module.host then return end
145 local bare = username .. "@" .. host;
146 local roster = rm_load_roster(username, host);
147 for jid, item in pairs(roster) do
148 if jid and jid ~= "pending" then
149 if item.subscription == "both" or item.subscription == "from" or (roster.pending and roster.pending[jid]) then
150 module:send(st.presence({type="unsubscribed", from=bare, to=jid}));
151 end
152 if item.subscription == "both" or item.subscription == "to" or item.ask then
153 module:send(st.presence({type="unsubscribe", from=bare, to=jid}));
154 end
155 end
156 end
157 end, 300);