Mercurial > 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 |
| parents | |
| children | 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); |
