Software /
code /
prosody-modules
Comparison
mod_invites_adhoc/mod_invites_adhoc.lua @ 4410:d1230d32d709
mod_invites_adhoc: Add support for specifying roles that may invite users, admins may always invite
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Thu, 28 Jan 2021 08:56:29 +0000 |
parent | 4409:44f6537f6427 |
child | 4766:abac64f71698 |
comparison
equal
deleted
inserted
replaced
4409:44f6537f6427 | 4410:d1230d32d709 |
---|---|
1 -- XEP-0401: Easy User Onboarding | 1 -- XEP-0401: Easy User Onboarding |
2 local dataforms = require "util.dataforms"; | 2 local dataforms = require "util.dataforms"; |
3 local datetime = require "util.datetime"; | 3 local datetime = require "util.datetime"; |
4 local split_jid = require "util.jid".split; | 4 local split_jid = require "util.jid".split; |
5 local usermanager = require "core.usermanager"; | |
5 | 6 |
6 local new_adhoc = module:require("adhoc").new; | 7 local new_adhoc = module:require("adhoc").new; |
7 | 8 |
8 -- Whether local users can invite other users to create an account on this server | 9 -- Whether local users can invite other users to create an account on this server |
9 local allow_user_invites = module:get_option_boolean("allow_user_invites", false); | 10 local allow_user_invites = module:get_option_boolean("allow_user_invites", false); |
10 -- Who can see and use the contact invite command. It is strongly recommended to | 11 -- Who can see and use the contact invite command. It is strongly recommended to |
11 -- keep this available to all local users. To allow/disallow invite-registration | 12 -- keep this available to all local users. To allow/disallow invite-registration |
12 -- on the server, use the option above instead. | 13 -- on the server, use the option above instead. |
13 local allow_contact_invites = module:get_option_boolean("allow_contact_invites", true); | 14 local allow_contact_invites = module:get_option_boolean("allow_contact_invites", true); |
15 | |
16 local allow_user_invite_roles = module:get_option_set("allow_user_invites_by_roles"); | |
14 | 17 |
15 local invites; | 18 local invites; |
16 if prosody.shutdown then -- COMPAT hack to detect prosodyctl | 19 if prosody.shutdown then -- COMPAT hack to detect prosodyctl |
17 invites = module:depends("invites"); | 20 invites = module:depends("invites"); |
18 end | 21 end |
34 name = "expire"; | 37 name = "expire"; |
35 label = "Invite valid until"; | 38 label = "Invite valid until"; |
36 }, | 39 }, |
37 }); | 40 }); |
38 | 41 |
42 -- This is for checking if username (on the current host) | |
43 -- may create invites that allow people to register accounts | |
44 -- on this host. | |
45 local function may_invite_new_users(jid) | |
46 if allow_user_invites then | |
47 return true; | |
48 end | |
49 if usermanager.get_roles then | |
50 local user_roles = usermanager.get_roles(jid, module.host); | |
51 if not user_roles then return; end | |
52 if user_roles["prosody:admin"] then | |
53 return true; | |
54 elseif allow_user_invite_roles then | |
55 for allowed_role in allow_user_invite_roles do | |
56 if user_roles[allowed_role] then | |
57 return true; | |
58 end | |
59 end | |
60 end | |
61 elseif usermanager.is_admin(jid, module.host) then | |
62 return true; | |
63 end | |
64 return false; | |
65 end | |
66 | |
39 module:depends("adhoc"); | 67 module:depends("adhoc"); |
40 | 68 |
41 -- This command is available to all local users, even if allow_user_invites = false | 69 -- This command is available to all local users, even if allow_user_invites = false |
42 -- If allow_user_invites is false, creating an invite still works, but the invite will | 70 -- If allow_user_invites is false, creating an invite still works, but the invite will |
43 -- not be valid for registration on the current server, only for establishing a roster | 71 -- not be valid for registration on the current server, only for establishing a roster |
51 error = { | 79 error = { |
52 message = "This command is only available to users of "..module.host; | 80 message = "This command is only available to users of "..module.host; |
53 }; | 81 }; |
54 }; | 82 }; |
55 end | 83 end |
56 local invite = invites.create_contact(username, allow_user_invites, { | 84 local invite = invites.create_contact(username, may_invite_new_users(data.from), { |
57 source = data.from | 85 source = data.from |
58 }); | 86 }); |
59 --TODO: check errors | 87 --TODO: check errors |
60 return { | 88 return { |
61 status = "completed"; | 89 status = "completed"; |