mod_auto_accept_subscriptions/mod_auto_accept_subscriptions.lua
author Kim Alvefur <zash@zash.se>
Mon, 16 May 2022 19:47:09 +0200
changeset 4945 e7b9bc629ecc
parent 1953 6d2ec330fbcf
permissions -rw-r--r--
mod_rest: Add special handling to catch MAM results from remote hosts Makes MAM queries to remote hosts works. As the comment says, MAM results from users' local archives or local MUCs are returned via origin.send() which is provided in the event and thus already worked. Results from remote hosts go via normal stanza routing and events, which need this extra handling to catch. This pattern of iq-set, message+, iq-result is generally limited to MAM. Closest similar thing might be MUC join, but to really handle that you would need the webhook callback mechanism.
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";
776
841b5eb5fe52 mod_auto_accept_subscriptions: Import core_post_stanza
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
     4
local core_post_stanza = prosody.core_post_stanza;
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
     5
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 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
     7
	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
     8
	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
     9
	stanza.attr.from, stanza.attr.to = from_bare, to_bare;
1698
25412e94fb3e mod_auto_accept_subscriptions: Fix passing nil in log message
Matthew Wild <mwild1@gmail.com>
parents: 1343
diff changeset
    10
	module:log("info", "Auto-accepting inbound subscription request from %s to %s", tostring(from_bare), tostring(to_bare));
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
    11
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
	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
    13
		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
    14
		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
    15
		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
    16
			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
    17
			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
    18
				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
    19
				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
    20
				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
    21
				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
    22
				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
    23
				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
    24
				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
    25
				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
    26
				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
    27
				-- 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
    28
				local subscribe_stanza = st.reply(stanza);
1953
6d2ec330fbcf mod_auto_accept_subscriptions: Fix typo in variable name, which would prevent subscription request being sent to contact (thanks Andrey)
Matthew Wild <mwild1@gmail.com>
parents: 1698
diff changeset
    29
				subscribe_stanza.attr.type = "subscribe";
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
    30
				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
    31
					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
    32
				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
    33
				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
    34
				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
    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
1343
7dbde05b48a9 all the things: Remove trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 776
diff changeset
    37
	end
1698
25412e94fb3e mod_auto_accept_subscriptions: Fix passing nil in log message
Matthew Wild <mwild1@gmail.com>
parents: 1343
diff changeset
    38
	module:log("warn", "Failed to auto-accept subscription request from %s to %s", tostring(from_bare), tostring(to_bare));
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
    39
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
    40
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
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
    42
	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
    43
	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
    44
		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
    45
		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
    46
	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
    47
end, 0.1);