mod_auto_accept_subscriptions/mod_auto_accept_subscriptions.lua
author Matthew Wild <mwild1@gmail.com>
Mon, 19 Mar 2012 17:06:02 +0000
changeset 625 2c07bcf56a36
parent 601 b1d82ae063e1
child 776 841b5eb5fe52
permissions -rw-r--r--
mod_smacks: Don't hibernate session on graceful stream close
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
601
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     1
local rostermanager = require "core.rostermanager";
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     2
local jid = require "util.jid";
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     3
local st = require "util.stanza";
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     4
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     5
local function handle_inbound_subscription_request(origin, stanza)
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     6
	local to_bare, from_bare = jid.bare(stanza.attr.to), jid.bare(stanza.attr.from);
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     7
	local node, host = jid.split(to_bare);
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     8
	stanza.attr.from, stanza.attr.to = from_bare, to_bare;
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     9
	module:log("info", "Auto-accepting inbound subscription request from %s to %s", from_bare, to_bare);
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    10
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    11
	if not rostermanager.is_contact_subscribed(node, host, from_bare) then
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    12
		core_post_stanza(hosts[host], st.presence({from=to_bare, to=from_bare, type="unavailable"}), true); -- acknowledging receipt
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    13
		module:log("debug", "receipt acknowledged");
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    14
		if rostermanager.set_contact_pending_in(node, host, from_bare) then
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    15
			module:log("debug", "set pending in");
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    16
			if rostermanager.subscribed(node, host, from_bare) then
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    17
				module:log("debug", "set subscribed");
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    18
				rostermanager.roster_push(node, host, to_bare);
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    19
				module:log("debug", "pushed roster item");
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    20
				local subscribed_stanza = st.reply(stanza);
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    21
				subscribed_stanza.attr.type = "subscribed";
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    22
				core_post_stanza(hosts[host], subscribed_stanza);
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    23
				module:log("debug", "sent subscribed");
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    24
				hosts[host].modules.presence.send_presence_of_available_resources(node, host, to_bare, origin);
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    25
				module:log("debug", "sent available presence of all resources");
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    26
				-- Add return subscription from user to contact
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    27
				local subscribe_stanza = st.reply(stanza);
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    28
				subscribed_stanza.attr.type = "subscribe";
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    29
				if rostermanager.set_contact_pending_out(node, host, from_bare) then
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    30
					rostermanager.roster_push(node, host, from_bare);
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    31
				end
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    32
				core_post_stanza(hosts[host], subscribe_stanza);
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    33
				return true;
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    34
			end
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    35
		end
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    36
	end	
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    37
	module:log("warn", "Failed to auto-accept subscription request from %s to %s", from_bare, to_bare);
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    38
end
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    39
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    40
module:hook("presence/bare", function (event)
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    41
	local stanza = event.stanza;
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    42
	if stanza.attr.type == "subscribe" then
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    43
		handle_inbound_subscription_request(event.origin, stanza);
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    44
		return true;
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    45
	end
b1d82ae063e1 mod_auto_accept_subscriptions: New module to automatically accept incoming subscription requests on behalf of users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    46
end, 0.1);