Software / code / prosody
Annotate
plugins/mod_invites_register.lua @ 12642:9061f9621330
Switch to a new role-based authorization framework, removing is_admin()
We began moving away from simple "is this user an admin?" permission checks
before 0.12, with the introduction of mod_authz_internal and the ability to
dynamically change the roles of individual users.
The approach in 0.12 still had various limitations however, and apart from
the introduction of roles other than "admin" and the ability to pull that info
from storage, not much actually changed.
This new framework shakes things up a lot, though aims to maintain the same
functionality and behaviour on the surface for a default Prosody
configuration. That is, if you don't take advantage of any of the new
features, you shouldn't notice any change.
The biggest change visible to developers is that usermanager.is_admin() (and
the auth provider is_admin() method) have been removed. Gone. Completely.
Permission checks should now be performed using a new module API method:
module:may(action_name, context)
This method accepts an action name, followed by either a JID (string) or
(preferably) a table containing 'origin'/'session' and 'stanza' fields (e.g.
the standard object passed to most events). It will return true if the action
should be permitted, or false/nil otherwise.
Modules should no longer perform permission checks based on the role name.
E.g. a lot of code previously checked if the user's role was prosody:admin
before permitting some action. Since many roles might now exist with similar
permissions, and the permissions of prosody:admin may be redefined
dynamically, it is no longer suitable to use this method for permission
checks. Use module:may().
If you start an action name with ':' (recommended) then the current module's
name will automatically be used as a prefix.
To define a new permission, use the new module API:
module:default_permission(role_name, action_name)
module:default_permissions(role_name, { action_name[, action_name...] })
This grants the specified role permission to execute the named action(s) by
default. This may be overridden via other mechanisms external to your module.
The built-in roles that developers should use are:
- prosody:user (normal user)
- prosody:admin (host admin)
- prosody:operator (global admin)
The new prosody:operator role is intended for server-wide actions (such as
shutting down Prosody).
Finally, all usage of is_admin() in modules has been fixed by this commit.
Some of these changes were trickier than others, but no change is expected to
break existing deployments.
EXCEPT: mod_auth_ldap no longer supports the ldap_admin_filter option. It's
very possible nobody is using this, but if someone is then we can later update
it to pull roles from LDAP somehow.
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Wed, 15 Jun 2022 12:15:01 +0100 |
| parent | 12391:a15647d42880 |
| child | 12977:74b9e05af71e |
| 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", |
|
12329
c980210ca095
mod_invites_register: Default to require encryption
Matthew Wild <mwild1@gmail.com>
parents:
12285
diff
changeset
|
7 module:get_option_boolean("require_encryption", true)); |
|
12144
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; |
|
12284
b4424f131d5c
mod_invites_register: Replace COMPAT hack
Kim Alvefur <zash@zash.se>
parents:
12144
diff
changeset
|
11 if prosody.process_type == "prosody" then |
|
12144
3e292e2a1e02
mod_invites_register: Import from prosody-modules@797b51043767
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
12 invites = module:depends("invites"); |
|
12285
ed23bbf3b946
mod_invites_register: Load mod_register_ibr in invite only mode
Kim Alvefur <zash@zash.se>
parents:
12284
diff
changeset
|
13 |
|
ed23bbf3b946
mod_invites_register: Load mod_register_ibr in invite only mode
Kim Alvefur <zash@zash.se>
parents:
12284
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:
12284
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:
12284
diff
changeset
|
16 end |
|
12144
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); |
|
12391
a15647d42880
mod_invites_register: Push invitee contact entry to inviter
Kim Alvefur <zash@zash.se>
parents:
12329
diff
changeset
|
144 rostermanager.roster_push(inviter_username, module.host, contact_username.."@"..module.host); |
|
12144
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 |