File

mod_roster_allinall/mod_roster_allinall.lua @ 5223:8b2a36847912

mod_http_oauth2: Support HTTP Basic auth on token endpoint This is described in RFC 6749 section 2.3.1 and draft-ietf-oauth-v2-1-07 2.3.1 as the recommended way to transmit the client's credentials. The older spec even calls it the "client password", but the new spec clarifies that this is just another term for the client secret.
author Matthew Wild <mwild1@gmail.com>
date Tue, 07 Mar 2023 15:27:50 +0000
parent 1798:3ae8c81a348b
line wrap: on
line source

local rostermanager = require"core.rostermanager";
local jid_join = require"util.jid".join;
local host = module.host;
local sessions = prosody.hosts[host].sessions;

-- Make a *one-way* subscription. User will see when contact is online,
-- contact will not see when user is online.
local function subscribe(user, contact)
	local user_jid, contact_jid = jid_join(user, host), jid_join(contact, host);

	-- Update user's roster to say subscription request is pending...
	rostermanager.set_contact_pending_out(user, host, contact_jid);
	-- Update contact's roster to say subscription request is pending...
	rostermanager.set_contact_pending_in(contact, host, user_jid);
	-- Update contact's roster to say subscription request approved...
	rostermanager.subscribed(contact, host, user_jid);
	-- Update user's roster to say subscription request approved...
	rostermanager.process_inbound_subscription_approval(user, host, contact_jid);

	-- Push updates to both rosters
	rostermanager.roster_push(user, host, contact_jid);
	rostermanager.roster_push(contact, host, user_jid);
end


module:hook("resource-bind", function(event)
	local session = event.session;
	local user = session.username;
	local user_jid = jid_join(user, host);
	for contact in pairs(sessions) do
		if contact ~= user then
			local contact_jid = jid_join(contact, host);
			if not rostermanager.is_contact_subscribed(user, host, contact_jid) then
				subscribe(contact, user);
			end
			if not rostermanager.is_contact_subscribed(contact, host, user_jid) then
				subscribe(user, contact);
			end
		end
	end
end);