view mod_roster_allinall/mod_roster_allinall.lua @ 5516:f25df3af02c1

mod_client_management: Include client software version number in listing Should you ever wish to revoke a client by version number, e.g. for security reasons affecting certain versions, then it would be good to at the very least see which version is used. Also includes the OAuth2 software ID, an optional unique identifier that should be the same for all installations of a particular software.
author Kim Alvefur <zash@zash.se>
date Sat, 03 Jun 2023 19:21:39 +0200
parents 3ae8c81a348b
children
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);