mod_invites_register_web/mod_invites_register_web.lua
author Matthew Wild <mwild1@gmail.com>
Tue, 06 Oct 2020 16:06:24 +0100
changeset 4178 e56b6b6852ae
parent 4171 3a03ae9a0882
child 4179 39d1a4ecdee6
permissions -rw-r--r--
mod_invites_register_web: Fix bug where invalid invite code redirected to wrong URL
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4097
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     1
local id = require "util.id";
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     2
local http_formdecode = require "net.http".formdecode;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     3
local usermanager = require "core.usermanager";
4171
3a03ae9a0882 mod_invites_register_web: Support linking to a web chat after successful registration
Matthew Wild <mwild1@gmail.com>
parents: 4133
diff changeset
     4
local modulemanager = require "core.modulemanager";
4097
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     5
local nodeprep = require "util.encodings".stringprep.nodeprep;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     6
local st = require "util.stanza";
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     7
local url_escape = require "util.http".urlencode;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     8
local render_html_template = require"util.interpolation".new("%b{}", st.xml_escape, {
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     9
	urlescape = url_escape;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    10
});
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    11
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    12
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    13
module:depends("register_apps");
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    14
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    15
local site_name = module:get_option_string("site_name", module.host);
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    16
local site_apps = module:shared("register_apps/apps");
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    17
4171
3a03ae9a0882 mod_invites_register_web: Support linking to a web chat after successful registration
Matthew Wild <mwild1@gmail.com>
parents: 4133
diff changeset
    18
local webchat_url = module:get_option_string("webchat_url");
3a03ae9a0882 mod_invites_register_web: Support linking to a web chat after successful registration
Matthew Wild <mwild1@gmail.com>
parents: 4133
diff changeset
    19
3a03ae9a0882 mod_invites_register_web: Support linking to a web chat after successful registration
Matthew Wild <mwild1@gmail.com>
parents: 4133
diff changeset
    20
-- If not provided, but mod_conversejs is loaded, default to that
3a03ae9a0882 mod_invites_register_web: Support linking to a web chat after successful registration
Matthew Wild <mwild1@gmail.com>
parents: 4133
diff changeset
    21
if not webchat_url and modulemanager.get_modules_for_host(module.host):contains("conversejs") then
3a03ae9a0882 mod_invites_register_web: Support linking to a web chat after successful registration
Matthew Wild <mwild1@gmail.com>
parents: 4133
diff changeset
    22
	local conversejs = module:depends("conversejs");
3a03ae9a0882 mod_invites_register_web: Support linking to a web chat after successful registration
Matthew Wild <mwild1@gmail.com>
parents: 4133
diff changeset
    23
	webchat_url = conversejs.module:http_url();
3a03ae9a0882 mod_invites_register_web: Support linking to a web chat after successful registration
Matthew Wild <mwild1@gmail.com>
parents: 4133
diff changeset
    24
end
3a03ae9a0882 mod_invites_register_web: Support linking to a web chat after successful registration
Matthew Wild <mwild1@gmail.com>
parents: 4133
diff changeset
    25
4097
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    26
module:depends("http");
4112
f49e3ea99785 mod_invites_register_web: Remove dependency on mod_easy_invite
Matthew Wild <mwild1@gmail.com>
parents: 4097
diff changeset
    27
4097
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    28
local invites = module:depends("invites");
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    29
local invites_page = module:depends("invites_page");
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    30
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    31
function serve_register_page(event)
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    32
	local register_page_template = assert(module:load_resource("html/register.html")):read("*a");
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    33
4116
d0366474aace mod_invites_register_web: Fix traceback on missing query params
Matthew Wild <mwild1@gmail.com>
parents: 4112
diff changeset
    34
	local query_params = event.request.url.query and http_formdecode(event.request.url.query);
4097
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    35
4116
d0366474aace mod_invites_register_web: Fix traceback on missing query params
Matthew Wild <mwild1@gmail.com>
parents: 4112
diff changeset
    36
	local invite = query_params and invites.get(query_params.t);
4097
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    37
	if not invite then
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    38
		return {
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    39
			status_code = 303;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    40
			headers = {
4178
e56b6b6852ae mod_invites_register_web: Fix bug where invalid invite code redirected to wrong URL
Matthew Wild <mwild1@gmail.com>
parents: 4171
diff changeset
    41
				["Location"] = invites_page.module:http_url().."?"..(event.request.url.query or "");
4097
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    42
			};
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    43
		};
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    44
	end
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    45
4133
ca099bd28bf5 mod_invites_page, mod_invites_register_web: Set correct Content-Type everywhere necessary
Matthew Wild <mwild1@gmail.com>
parents: 4123
diff changeset
    46
	event.response.headers["Content-Type"] = "text/html; charset=utf-8";
ca099bd28bf5 mod_invites_page, mod_invites_register_web: Set correct Content-Type everywhere necessary
Matthew Wild <mwild1@gmail.com>
parents: 4123
diff changeset
    47
4097
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    48
	local invite_page = render_html_template(register_page_template, {
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    49
		site_name = site_name;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    50
		token = invite.token;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    51
		domain = module.host;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    52
		uri = invite.uri;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    53
		type = invite.type;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    54
		jid = invite.jid;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    55
		inviter = invite.inviter;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    56
		app = query_params.c and site_apps[query_params.c];
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    57
	});
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    58
	return invite_page;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    59
end
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    60
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    61
function handle_register_form(event)
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    62
	local request, response = event.request, event.response;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    63
	local form_data = http_formdecode(request.body);
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    64
	local user, password, token = form_data["user"], form_data["password"], form_data["token"];
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    65
	local app_id = form_data["app_id"];
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    66
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    67
	local register_page_template = assert(module:load_resource("html/register.html")):read("*a");
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    68
	local error_template = assert(module:load_resource("html/register_error.html")):read("*a");
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    69
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    70
	local invite = invites.get(token);
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    71
	if not invite then
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    72
		return {
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    73
			status_code = 303;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    74
			headers = {
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    75
				["Location"] = invites_page.module:http_url().."?"..event.request.url.query;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    76
			};
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    77
		};
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    78
	end
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    79
4133
ca099bd28bf5 mod_invites_page, mod_invites_register_web: Set correct Content-Type everywhere necessary
Matthew Wild <mwild1@gmail.com>
parents: 4123
diff changeset
    80
	event.response.headers["Content-Type"] = "text/html; charset=utf-8";
4097
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    81
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    82
	if not user or #user == 0 or not password or #password == 0 or not token then
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    83
		return render_html_template(register_page_template, {
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    84
			site_name = site_name;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    85
			token = invite.token;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    86
			domain = module.host;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    87
			uri = invite.uri;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    88
			type = invite.type;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    89
			jid = invite.jid;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    90
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    91
			msg_class = "alert-warning";
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    92
			message = "Please fill in all fields.";
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    93
		});
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    94
	end
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    95
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    96
	-- Shamelessly copied from mod_register_web.
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    97
	local prepped_username = nodeprep(user);
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    98
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    99
	if not prepped_username or #prepped_username == 0 then
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   100
		return render_html_template(register_page_template, {
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   101
			site_name = site_name;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   102
			token = invite.token;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   103
			domain = module.host;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   104
			uri = invite.uri;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   105
			type = invite.type;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   106
			jid = invite.jid;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   107
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   108
			msg_class = "alert-warning";
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   109
			message = "This username contains invalid characters.";
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   110
		});
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   111
	end
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   112
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   113
	if usermanager.user_exists(prepped_username, module.host) then
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   114
		return render_html_template(register_page_template, {
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   115
			site_name = site_name;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   116
			token = invite.token;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   117
			domain = module.host;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   118
			uri = invite.uri;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   119
			type = invite.type;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   120
			jid = invite.jid;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   121
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   122
			msg_class = "alert-warning";
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   123
			message = "This username is already in use.";
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   124
		});
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   125
	end
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   126
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   127
	local registering = {
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   128
		validated_invite = invite;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   129
		username = prepped_username;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   130
		host = module.host;
4121
a1c6eea971ce mod_invites_register_web: Include request.ip in user-registering event (thanks franck)
Matthew Wild <mwild1@gmail.com>
parents: 4116
diff changeset
   131
		ip = request.ip;
4097
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   132
		allowed = true;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   133
	};
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   134
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   135
	module:fire_event("user-registering", registering);
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   136
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   137
	if not registering.allowed then
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   138
		return render_html_template(error_template, {
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   139
			site_name = site_name;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   140
			msg_class = "alert-danger";
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   141
			message = registering.reason or "Registration is not allowed.";
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   142
		});
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   143
	end
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   144
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   145
	local ok, err = usermanager.create_user(prepped_username, password, module.host);
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   146
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   147
	if ok then
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   148
		module:fire_event("user-registered", {
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   149
			username = prepped_username;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   150
			host = module.host;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   151
			source = "mod_"..module.name;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   152
			validated_invite = invite;
4123
559ca8d93302 mod_invites_register_web: Also add ip to user-registered
Matthew Wild <mwild1@gmail.com>
parents: 4121
diff changeset
   153
			ip = request.ip;
4097
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   154
		});
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   155
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   156
		local app_info = site_apps[app_id];
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   157
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   158
		local success_template;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   159
		if app_info then
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   160
			-- If recognised app, we serve a page that includes setup instructions
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   161
			success_template = assert(module:load_resource("html/register_success_setup.html")):read("*a");
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   162
		else
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   163
			success_template = assert(module:load_resource("html/register_success.html")):read("*a");
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   164
		end
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   165
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   166
		-- Due to the credentials being served here, ensure that
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   167
		-- the browser or any intermediary does not cache the page
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   168
		event.response.headers["Cache-Control"] = "no-cache, no-store, must-revalidate";
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   169
		event.response.headers["Pragma"] = "no-cache";
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   170
		event.response.headers["Expires"] = "0";
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   171
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   172
		return render_html_template(success_template, {
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   173
			site_name = site_name;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   174
			username = prepped_username;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   175
			domain = module.host;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   176
			password = password;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   177
			app = app_info;
4171
3a03ae9a0882 mod_invites_register_web: Support linking to a web chat after successful registration
Matthew Wild <mwild1@gmail.com>
parents: 4133
diff changeset
   178
			webchat_url = webchat_url;
4097
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   179
		});
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   180
	else
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   181
		local err_id = id.short();
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   182
		module:log("warn", "Registration failed (%s): %s", err_id, tostring(err));
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   183
		return render_html_template(error_template, {
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   184
			site_name = site_name;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   185
			msg_class = "alert-danger";
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   186
			message = ("An unknown error has occurred (%s)"):format(err_id);
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   187
		});
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   188
	end
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   189
end
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   190
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   191
module:provides("http", {
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   192
	default_path = "register";
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   193
	route = {
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   194
		["GET"] = serve_register_page;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   195
		["POST"] = handle_register_form;
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   196
	};
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   197
});