plugins/mod_invites_register.lua
author Matthew Wild <mwild1@gmail.com>
Wed, 27 Mar 2024 15:35:15 +0000
branch0.12
changeset 13469 54a936345aaa
parent 12395 a15647d42880
child 12981 74b9e05af71e
permissions -rw-r--r--
prosodyctl check: Warn about invalid domain names in the config file This ensures that domain names of virtual hosts and components are valid in XMPP, and that they are encoded correctly.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12148
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     1
local st = require "util.stanza";
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     2
local jid_split = require "util.jid".split;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     3
local jid_bare = require "util.jid".bare;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     4
local rostermanager = require "core.rostermanager";
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     5
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     6
local require_encryption = module:get_option_boolean("c2s_require_encryption",
12333
c980210ca095 mod_invites_register: Default to require encryption
Matthew Wild <mwild1@gmail.com>
parents: 12289
diff changeset
     7
	module:get_option_boolean("require_encryption", true));
12148
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     8
local invite_only = module:get_option_boolean("registration_invite_only", true);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     9
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    10
local invites;
12288
b4424f131d5c mod_invites_register: Replace COMPAT hack
Kim Alvefur <zash@zash.se>
parents: 12148
diff changeset
    11
if prosody.process_type == "prosody" then
12148
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    12
	invites = module:depends("invites");
12289
ed23bbf3b946 mod_invites_register: Load mod_register_ibr in invite only mode
Kim Alvefur <zash@zash.se>
parents: 12288
diff changeset
    13
ed23bbf3b946 mod_invites_register: Load mod_register_ibr in invite only mode
Kim Alvefur <zash@zash.se>
parents: 12288
diff changeset
    14
	if invite_only then
ed23bbf3b946 mod_invites_register: Load mod_register_ibr in invite only mode
Kim Alvefur <zash@zash.se>
parents: 12288
diff changeset
    15
		module:depends("register_ibr");
ed23bbf3b946 mod_invites_register: Load mod_register_ibr in invite only mode
Kim Alvefur <zash@zash.se>
parents: 12288
diff changeset
    16
	end
12148
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    17
end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    18
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    19
local legacy_invite_stream_feature = st.stanza("register", { xmlns = "urn:xmpp:invite" }):up();
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    20
local invite_stream_feature = st.stanza("register", { xmlns = "urn:xmpp:ibr-token:0" }):up();
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    21
module:hook("stream-features", function(event)
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    22
	local session, features = event.origin, event.features;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    23
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    24
	-- Advertise to unauthorized clients only.
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    25
	if session.type ~= "c2s_unauthed" or (require_encryption and not session.secure) then
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    26
		return
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    27
	end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    28
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    29
	features:add_child(legacy_invite_stream_feature);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    30
	features:add_child(invite_stream_feature);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    31
end);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    32
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    33
-- XEP-0379: Pre-Authenticated Roster Subscription
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    34
module:hook("presence/bare", function (event)
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    35
	local stanza = event.stanza;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    36
	if stanza.attr.type ~= "subscribe" then return end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    37
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    38
	local preauth = stanza:get_child("preauth", "urn:xmpp:pars:0");
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    39
	if not preauth then return end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    40
	local token = preauth.attr.token;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    41
	if not token then return end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    42
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    43
	local username, host = jid_split(stanza.attr.to);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    44
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    45
	local invite, err = invites.get(token, username);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    46
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    47
	if not invite then
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    48
		module:log("debug", "Got invalid token, error: %s", err);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    49
		return;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    50
	end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    51
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    52
	local contact = jid_bare(stanza.attr.from);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    53
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    54
	module:log("debug", "Approving inbound subscription to %s from %s", username, contact);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    55
	if rostermanager.set_contact_pending_in(username, host, contact, stanza) then
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    56
		if rostermanager.subscribed(username, host, contact) then
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    57
			invite:use();
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    58
			rostermanager.roster_push(username, host, contact);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    59
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    60
			-- Send back a subscription request (goal is mutual subscription)
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    61
			if not rostermanager.is_user_subscribed(username, host, contact)
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    62
			and not rostermanager.is_contact_pending_out(username, host, contact) then
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    63
				module:log("debug", "Sending automatic subscription request to %s from %s", contact, username);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    64
				if rostermanager.set_contact_pending_out(username, host, contact) then
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    65
					rostermanager.roster_push(username, host, contact);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    66
					module:send(st.presence({type = "subscribe", from = username.."@"..host, to = contact }));
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    67
				else
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    68
					module:log("warn", "Failed to set contact pending out for %s", username);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    69
				end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    70
			end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    71
		end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    72
	end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    73
end, 1);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    74
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    75
-- Client is submitting a preauth token to allow registration
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    76
module:hook("stanza/iq/urn:xmpp:pars:0:preauth", function(event)
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    77
	local preauth = event.stanza.tags[1];
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    78
	local token = preauth.attr.token;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    79
	local validated_invite = invites.get(token);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    80
	if not validated_invite then
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    81
		local reply = st.error_reply(event.stanza, "cancel", "forbidden", "The invite token is invalid or expired");
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    82
		event.origin.send(reply);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    83
		return true;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    84
	end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    85
	event.origin.validated_invite = validated_invite;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    86
	local reply = st.reply(event.stanza);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    87
	event.origin.send(reply);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    88
	return true;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    89
end);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    90
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    91
-- Registration attempt - ensure a valid preauth token has been supplied
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    92
module:hook("user-registering", function (event)
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    93
	local validated_invite = event.validated_invite or (event.session and event.session.validated_invite);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    94
	if invite_only and not validated_invite then
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    95
		event.allowed = false;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    96
		event.reason = "Registration on this server is through invitation only";
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    97
		return;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    98
	elseif not validated_invite then
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    99
		-- This registration is not using an invite, but
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   100
		-- the server is not in invite-only mode, so nothing
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   101
		-- for this module to do...
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   102
		return;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   103
	end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   104
	if validated_invite and validated_invite.additional_data and validated_invite.additional_data.allow_reset then
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   105
		event.allow_reset = validated_invite.additional_data.allow_reset;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   106
	end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   107
end);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   108
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   109
-- Make a *one-way* subscription. User will see when contact is online,
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   110
-- contact will not see when user is online.
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   111
function subscribe(host, user_username, contact_username)
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   112
	local user_jid = user_username.."@"..host;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   113
	local contact_jid = contact_username.."@"..host;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   114
	-- Update user's roster to say subscription request is pending...
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   115
	rostermanager.set_contact_pending_out(user_username, host, contact_jid);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   116
	-- Update contact's roster to say subscription request is pending...
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   117
	rostermanager.set_contact_pending_in(contact_username, host, user_jid);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   118
	-- Update contact's roster to say subscription request approved...
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   119
	rostermanager.subscribed(contact_username, host, user_jid);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   120
	-- Update user's roster to say subscription request approved...
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   121
	rostermanager.process_inbound_subscription_approval(user_username, host, contact_jid);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   122
end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   123
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   124
-- Make a mutual subscription between jid1 and jid2. Each JID will see
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   125
-- when the other one is online.
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   126
function subscribe_both(host, user1, user2)
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   127
	subscribe(host, user1, user2);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   128
	subscribe(host, user2, user1);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   129
end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   130
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   131
-- Registration successful, if there was a preauth token, mark it as used
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   132
module:hook("user-registered", function (event)
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   133
	local validated_invite = event.validated_invite or (event.session and event.session.validated_invite);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   134
	if not validated_invite then
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   135
		return;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   136
	end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   137
	local inviter_username = validated_invite.inviter;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   138
	local contact_username = event.username;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   139
	validated_invite:use();
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   140
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   141
	if inviter_username then
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   142
		module:log("debug", "Creating mutual subscription between %s and %s", inviter_username, contact_username);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   143
		subscribe_both(module.host, inviter_username, contact_username);
12395
a15647d42880 mod_invites_register: Push invitee contact entry to inviter
Kim Alvefur <zash@zash.se>
parents: 12333
diff changeset
   144
		rostermanager.roster_push(inviter_username, module.host, contact_username.."@"..module.host);
12148
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   145
	end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   146
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   147
	if validated_invite.additional_data then
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   148
		module:log("debug", "Importing roles from invite");
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   149
		local roles = validated_invite.additional_data.roles;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   150
		if roles then
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   151
			module:open_store("roles"):set(contact_username, roles);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   152
		end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   153
	end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   154
end);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   155
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   156
-- Equivalent of user-registered but for when the account already existed
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   157
-- (i.e. password reset)
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   158
module:hook("user-password-reset", function (event)
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   159
	local validated_invite = event.validated_invite or (event.session and event.session.validated_invite);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   160
	if not validated_invite then
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   161
		return;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   162
	end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   163
	validated_invite:use();
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   164
end);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   165