Annotate

plugins/mod_invites_register.lua @ 12160:ac654fb19203

util.startup: Allow supplying an argument parsing settings The 'prosody' global is not global this early so there was no way to override the process type field or argument parsing settings from outside, e.g. from the migrator.
author Kim Alvefur <zash@zash.se>
date Sun, 09 Jan 2022 15:16:09 +0100
parent 12144:3e292e2a1e02
child 12284:b4424f131d5c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12144
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",
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
7 module:get_option_boolean("require_encryption", false));
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;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
11 if prosody.shutdown then -- COMPAT hack to detect prosodyctl
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
12 invites = module:depends("invites");
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
13 end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
15 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
16 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
17 module:hook("stream-features", function(event)
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18 local session, features = event.origin, event.features;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
19
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 -- Advertise to unauthorized clients only.
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
21 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
22 return
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
23 end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
25 features:add_child(legacy_invite_stream_feature);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
26 features:add_child(invite_stream_feature);
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 -- XEP-0379: Pre-Authenticated Roster Subscription
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
30 module:hook("presence/bare", function (event)
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
31 local stanza = event.stanza;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
32 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
33
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
34 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
35 if not preauth then return end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
36 local token = preauth.attr.token;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
37 if not token then return end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
38
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
39 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
40
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
41 local invite, err = invites.get(token, username);
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 if not invite then
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
44 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
45 return;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
46 end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
47
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
48 local contact = jid_bare(stanza.attr.from);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
49
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
50 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
51 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
52 if rostermanager.subscribed(username, host, contact) then
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
53 invite:use();
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
54 rostermanager.roster_push(username, host, contact);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
55
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
56 -- 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
57 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
58 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
59 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
60 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
61 rostermanager.roster_push(username, host, contact);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
62 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
63 else
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
64 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
65 end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
66 end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
67 end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
68 end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
69 end, 1);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
70
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
71 -- 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
72 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
73 local preauth = event.stanza.tags[1];
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
74 local token = preauth.attr.token;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
75 local validated_invite = invites.get(token);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
76 if not validated_invite then
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
77 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
78 event.origin.send(reply);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
79 return true;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
80 end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
81 event.origin.validated_invite = validated_invite;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
82 local reply = st.reply(event.stanza);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
83 event.origin.send(reply);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
84 return true;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
85 end);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
86
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
87 -- 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
88 module:hook("user-registering", function (event)
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
89 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
90 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
91 event.allowed = false;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
92 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
93 return;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
94 elseif not validated_invite then
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
95 -- 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
96 -- 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
97 -- for this module to do...
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
98 return;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
99 end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
100 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
101 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
102 end
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
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
105 -- 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
106 -- 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
107 function subscribe(host, user_username, contact_username)
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
108 local user_jid = user_username.."@"..host;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
109 local contact_jid = contact_username.."@"..host;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
110 -- 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
111 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
112 -- 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
113 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
114 -- 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
115 rostermanager.subscribed(contact_username, host, user_jid);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
116 -- 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
117 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
118 end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
119
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
120 -- 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
121 -- when the other one is online.
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
122 function subscribe_both(host, user1, user2)
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
123 subscribe(host, user1, user2);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
124 subscribe(host, user2, user1);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
125 end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
126
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
127 -- 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
128 module:hook("user-registered", function (event)
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
129 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
130 if not validated_invite then
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
131 return;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
132 end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
133 local inviter_username = validated_invite.inviter;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
134 local contact_username = event.username;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
135 validated_invite:use();
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
136
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
137 if inviter_username then
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
138 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
139 subscribe_both(module.host, inviter_username, contact_username);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
140 end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
141
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
142 if validated_invite.additional_data then
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
143 module:log("debug", "Importing roles from invite");
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
144 local roles = validated_invite.additional_data.roles;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
145 if roles then
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
146 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
147 end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
148 end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
149 end);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
150
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
151 -- 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
152 -- (i.e. password reset)
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
153 module:hook("user-password-reset", function (event)
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
154 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
155 if not validated_invite then
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
156 return;
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
157 end
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
158 validated_invite:use();
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
159 end);
3e292e2a1e02 mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff changeset
160