Mercurial > prosody-modules
annotate mod_invites_adhoc/mod_invites_adhoc.lua @ 4362:116c88c28532
mod_http_admin_api: restructure group-related info in API
- Return the members of the group right in the get_group_by_id
call. This is an O(1) of extra work.
- Remove the groups attribute from get_user_by_name as that is
O(n) of work and rarely immediately needed.
The replacement for the group membership information in the user
is for now to use the group API and iterate; future work may fix
that.
author | Jonas Schäfer <jonas@wielicki.name> |
---|---|
date | Wed, 20 Jan 2021 15:30:29 +0100 |
parents | 2b6918714792 |
children | df9bb3d861f9 |
rev | line source |
---|---|
4092
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 -- XEP-0401: Easy User Onboarding |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 local dataforms = require "util.dataforms"; |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 local datetime = require "util.datetime"; |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
4 local split_jid = require "util.jid".split; |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 local new_adhoc = module:require("adhoc").new; |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 -- Whether local users can invite other users to create an account on this server |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 local allow_user_invites = module:get_option_boolean("allow_user_invites", false); |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 -- Who can see and use the contact invite command. It is strongly recommended to |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 -- keep this available to all local users. To allow/disallow invite-registration |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
12 -- on the server, use the option above instead. |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
13 local allow_contact_invites = module:get_option_boolean("allow_contact_invites", true); |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
14 |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 local invites; |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 if prosody.shutdown then -- COMPAT hack to detect prosodyctl |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 invites = module:depends("invites"); |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 end |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 local invite_result_form = dataforms.new({ |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 title = "Your invite has been created", |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 { |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 name = "url" ; |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 var = "landing-url"; |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 label = "Invite web page"; |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 desc = "Share this link"; |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 }, |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
28 { |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 name = "uri"; |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
30 label = "Invite URI"; |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
31 desc = "This alternative link can be opened with some XMPP clients"; |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 }, |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 { |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 name = "expire"; |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 label = "Invite valid until"; |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 }, |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 }); |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
38 |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
39 module:depends("adhoc"); |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
40 |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
41 -- This command is available to all local users, even if allow_user_invites = false |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
42 -- If allow_user_invites is false, creating an invite still works, but the invite will |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
43 -- not be valid for registration on the current server, only for establishing a roster |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
44 -- subscription. |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
45 module:provides("adhoc", new_adhoc("Create new contact invite", "urn:xmpp:invite#invite", |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
46 function (_, data) |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
47 local username = split_jid(data.from); |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
48 local invite = invites.create_contact(username, allow_user_invites); |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
49 --TODO: check errors |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
50 return { |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
51 status = "completed"; |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
52 form = { |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
53 layout = invite_result_form; |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
54 values = { |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
55 uri = invite.uri; |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
56 url = invite.landing_page; |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
57 expire = datetime.datetime(invite.expires); |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
58 }; |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
59 }; |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
60 }; |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
61 end, allow_contact_invites and "local_user" or "admin")); |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
62 |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
63 -- This is an admin-only command that creates a new invitation suitable for registering |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
64 -- a new account. It does not add the new user to the admin's roster. |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
65 module:provides("adhoc", new_adhoc("Create new account invite", "urn:xmpp:invite#create-account", |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
66 function () |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
67 local invite = invites.create_account(); |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
68 --TODO: check errors |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
69 return { |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
70 status = "completed"; |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
71 form = { |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
72 layout = invite_result_form; |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
73 values = { |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
74 uri = invite.uri; |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
75 url = invite.landing_page; |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
76 expire = datetime.datetime(invite.expires); |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
77 }; |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
78 }; |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
79 }; |
2b6918714792
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
80 end, "admin")); |