mod_invites_adhoc/mod_invites_adhoc.lua
author Matthew Wild <mwild1@gmail.com>
Fri, 11 Sep 2020 13:50:47 +0100
changeset 4096 2b6918714792
child 4399 df9bb3d861f9
permissions -rw-r--r--
mod_invites_adhoc: New module to allow invite creation via ad-hoc commands (XEP-0401)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4096
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"));