Software /
code /
prosody-modules
Comparison
mod_auto_accept_subscriptions/mod_auto_accept_subscriptions.lua @ 596:b1d82ae063e1
mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Tue, 14 Feb 2012 15:16:38 +0000 |
child | 776:841b5eb5fe52 |
comparison
equal
deleted
inserted
replaced
595:7693724881b3 | 596:b1d82ae063e1 |
---|---|
1 local rostermanager = require "core.rostermanager"; | |
2 local jid = require "util.jid"; | |
3 local st = require "util.stanza"; | |
4 | |
5 local function handle_inbound_subscription_request(origin, stanza) | |
6 local to_bare, from_bare = jid.bare(stanza.attr.to), jid.bare(stanza.attr.from); | |
7 local node, host = jid.split(to_bare); | |
8 stanza.attr.from, stanza.attr.to = from_bare, to_bare; | |
9 module:log("info", "Auto-accepting inbound subscription request from %s to %s", from_bare, to_bare); | |
10 | |
11 if not rostermanager.is_contact_subscribed(node, host, from_bare) then | |
12 core_post_stanza(hosts[host], st.presence({from=to_bare, to=from_bare, type="unavailable"}), true); -- acknowledging receipt | |
13 module:log("debug", "receipt acknowledged"); | |
14 if rostermanager.set_contact_pending_in(node, host, from_bare) then | |
15 module:log("debug", "set pending in"); | |
16 if rostermanager.subscribed(node, host, from_bare) then | |
17 module:log("debug", "set subscribed"); | |
18 rostermanager.roster_push(node, host, to_bare); | |
19 module:log("debug", "pushed roster item"); | |
20 local subscribed_stanza = st.reply(stanza); | |
21 subscribed_stanza.attr.type = "subscribed"; | |
22 core_post_stanza(hosts[host], subscribed_stanza); | |
23 module:log("debug", "sent subscribed"); | |
24 hosts[host].modules.presence.send_presence_of_available_resources(node, host, to_bare, origin); | |
25 module:log("debug", "sent available presence of all resources"); | |
26 -- Add return subscription from user to contact | |
27 local subscribe_stanza = st.reply(stanza); | |
28 subscribed_stanza.attr.type = "subscribe"; | |
29 if rostermanager.set_contact_pending_out(node, host, from_bare) then | |
30 rostermanager.roster_push(node, host, from_bare); | |
31 end | |
32 core_post_stanza(hosts[host], subscribe_stanza); | |
33 return true; | |
34 end | |
35 end | |
36 end | |
37 module:log("warn", "Failed to auto-accept subscription request from %s to %s", from_bare, to_bare); | |
38 end | |
39 | |
40 module:hook("presence/bare", function (event) | |
41 local stanza = event.stanza; | |
42 if stanza.attr.type == "subscribe" then | |
43 handle_inbound_subscription_request(event.origin, stanza); | |
44 return true; | |
45 end | |
46 end, 0.1); |