view mod_support_contact/mod_support_contact.lua @ 4340:7cd3b7ec59e9

mod_http_oauth2: Rudimentary support for scopes (but not really) We don't support limiting access, but this change will inform the client what permissions the created token has (e.g. is the user an admin or not). There is some work in progress on real scope support.
author Matthew Wild <mwild1@gmail.com>
date Sat, 16 Jan 2021 19:47:22 +0000
parents 7dbde05b48a9
children
line wrap: on
line source

-- mod_support_contact.lua
--
-- Config options:
--   support_contact = "support@hostname"; -- a JID
--   support_contact_nick = "Support!"; -- roster nick
--   support_contact_group = "Users being supported!"; -- the roster group in the support contact's roster

local host = module:get_host();

local support_contact = module:get_option_string("support_contact", "support@"..host);
local support_contact_nick = module:get_option_string("support_contact_nick", "Support");
local support_contact_group = module:get_option_string("support_contact_group", "Users");

if not(support_contact and support_contact_nick) then return; end

local rostermanager = require "core.rostermanager";
local jid_split = require "util.jid".split;
local st = require "util.stanza";

module:hook("user-registered", function(event)
	module:log("debug", "Adding support contact");

	local groups = support_contact_group and {[support_contact_group] = true;} or {};

	local node, host = event.username, event.host;
	local jid = node and (node..'@'..host) or host;
	local roster;

	roster = rostermanager.load_roster(node, host);
	if hosts[host] then
		roster[support_contact] = {subscription = "both", name = support_contact_nick, groups = {}};
	else
		roster[support_contact] = {subscription = "from", ask = "subscribe", name = support_contact_nick, groups = {}};
	end
	rostermanager.save_roster(node, host, roster);

	node, host = jid_split(support_contact);

	if hosts[host] then
		roster = rostermanager.load_roster(node, host);
		roster[jid] = {subscription = "both", groups = groups};
		rostermanager.save_roster(node, host, roster);
		rostermanager.roster_push(node, host, jid);
	else
		module:send(st.presence({from=jid, to=support_contact, type="subscribe"}));
	end
end);