Mercurial > prosody-modules
annotate mod_invites_adhoc/mod_invites_adhoc.lua @ 4346:671bc55f0fc9
mod_invites: Add support to internal API for creating reusable and custom-TTL invites
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Sun, 17 Jan 2021 17:42:49 +0000 |
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")); |