annotate mod_invites_register_web/mod_invites_register_web.lua @ 4537:53ee391ca689

mod_smacks: Fix traceback due to session being destroyed in send() Sending something can cause the OS to notice that the connection is dead and then the connection can be dead at this point. More likely if opportunistic_writes is enabled.
author Kim Alvefur <zash@zash.se>
date Thu, 01 Apr 2021 11:35:26 +0200
parents 39d1a4ecdee6
children 15cf32e666da
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4093
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";
4167
3a03ae9a0882 mod_invites_register_web: Support linking to a web chat after successful registration
Matthew Wild <mwild1@gmail.com>
parents: 4129
diff changeset
4 local modulemanager = require "core.modulemanager";
4093
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 });
4175
39d1a4ecdee6 mod_invites_register_web: Support a 'login_link_format' for apps, redirected to after successful registration
Matthew Wild <mwild1@gmail.com>
parents: 4174
diff changeset
11 local render_url = require "util.interpolation".new("%b{}", url_escape, {
39d1a4ecdee6 mod_invites_register_web: Support a 'login_link_format' for apps, redirected to after successful registration
Matthew Wild <mwild1@gmail.com>
parents: 4174
diff changeset
12 urlescape = url_escape;
39d1a4ecdee6 mod_invites_register_web: Support a 'login_link_format' for apps, redirected to after successful registration
Matthew Wild <mwild1@gmail.com>
parents: 4174
diff changeset
13 noscheme = function (url)
39d1a4ecdee6 mod_invites_register_web: Support a 'login_link_format' for apps, redirected to after successful registration
Matthew Wild <mwild1@gmail.com>
parents: 4174
diff changeset
14 return (url:gsub("^[^:]+:", ""));
39d1a4ecdee6 mod_invites_register_web: Support a 'login_link_format' for apps, redirected to after successful registration
Matthew Wild <mwild1@gmail.com>
parents: 4174
diff changeset
15 end;
39d1a4ecdee6 mod_invites_register_web: Support a 'login_link_format' for apps, redirected to after successful registration
Matthew Wild <mwild1@gmail.com>
parents: 4174
diff changeset
16 });
4093
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
17
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
18 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
19
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
20 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
21 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
22
4167
3a03ae9a0882 mod_invites_register_web: Support linking to a web chat after successful registration
Matthew Wild <mwild1@gmail.com>
parents: 4129
diff changeset
23 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: 4129
diff changeset
24
3a03ae9a0882 mod_invites_register_web: Support linking to a web chat after successful registration
Matthew Wild <mwild1@gmail.com>
parents: 4129
diff changeset
25 -- 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: 4129
diff changeset
26 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: 4129
diff changeset
27 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: 4129
diff changeset
28 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: 4129
diff changeset
29 end
3a03ae9a0882 mod_invites_register_web: Support linking to a web chat after successful registration
Matthew Wild <mwild1@gmail.com>
parents: 4129
diff changeset
30
4093
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
31 module:depends("http");
4108
f49e3ea99785 mod_invites_register_web: Remove dependency on mod_easy_invite
Matthew Wild <mwild1@gmail.com>
parents: 4093
diff changeset
32
4093
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
33 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
34 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
35
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
36 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
37 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
38
4112
d0366474aace mod_invites_register_web: Fix traceback on missing query params
Matthew Wild <mwild1@gmail.com>
parents: 4108
diff changeset
39 local query_params = event.request.url.query and http_formdecode(event.request.url.query);
4093
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
40
4112
d0366474aace mod_invites_register_web: Fix traceback on missing query params
Matthew Wild <mwild1@gmail.com>
parents: 4108
diff changeset
41 local invite = query_params and invites.get(query_params.t);
4093
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
42 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
43 return {
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
44 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
45 headers = {
4174
e56b6b6852ae mod_invites_register_web: Fix bug where invalid invite code redirected to wrong URL
Matthew Wild <mwild1@gmail.com>
parents: 4167
diff changeset
46 ["Location"] = invites_page.module:http_url().."?"..(event.request.url.query or "");
4093
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
47 };
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
48 };
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
49 end
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
50
4129
ca099bd28bf5 mod_invites_page, mod_invites_register_web: Set correct Content-Type everywhere necessary
Matthew Wild <mwild1@gmail.com>
parents: 4119
diff changeset
51 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: 4119
diff changeset
52
4093
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
53 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
54 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
55 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
56 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
57 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
58 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
59 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
60 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
61 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
62 });
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
63 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
64 end
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
65
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
66 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
67 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
68 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
69 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
70 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
71
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
72 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
73 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
74
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
75 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
76 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
77 return {
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
78 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
79 headers = {
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
80 ["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
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 };
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
83 end
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
84
4129
ca099bd28bf5 mod_invites_page, mod_invites_register_web: Set correct Content-Type everywhere necessary
Matthew Wild <mwild1@gmail.com>
parents: 4119
diff changeset
85 event.response.headers["Content-Type"] = "text/html; charset=utf-8";
4093
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
86
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
87 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
88 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
89 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
90 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
91 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
92 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
93 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
94 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
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 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
97 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
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 end
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
100
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
101 -- 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
102 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
103
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
104 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
105 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
106 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
107 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
108 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
109 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
110 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
111 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
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 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
114 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
115 });
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
116 end
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
117
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
118 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
119 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
120 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
121 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
122 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
123 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
124 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
125 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
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 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
128 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
129 });
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
130 end
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
131
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
132 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
133 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
134 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
135 host = module.host;
4117
a1c6eea971ce mod_invites_register_web: Include request.ip in user-registering event (thanks franck)
Matthew Wild <mwild1@gmail.com>
parents: 4112
diff changeset
136 ip = request.ip;
4093
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
137 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
138 };
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
139
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
140 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
141
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
142 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
143 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
144 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
145 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
146 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
147 });
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
148 end
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
149
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
150 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
151
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
152 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
153 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
154 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
155 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
156 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
157 validated_invite = invite;
4119
559ca8d93302 mod_invites_register_web: Also add ip to user-registered
Matthew Wild <mwild1@gmail.com>
parents: 4117
diff changeset
158 ip = request.ip;
4093
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
159 });
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
160
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
161 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
162
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
163 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
164 if app_info then
4175
39d1a4ecdee6 mod_invites_register_web: Support a 'login_link_format' for apps, redirected to after successful registration
Matthew Wild <mwild1@gmail.com>
parents: 4174
diff changeset
165 if app_info.login_link_format then
39d1a4ecdee6 mod_invites_register_web: Support a 'login_link_format' for apps, redirected to after successful registration
Matthew Wild <mwild1@gmail.com>
parents: 4174
diff changeset
166 local redirect_url = render_url(app_info.login_link_format, {
39d1a4ecdee6 mod_invites_register_web: Support a 'login_link_format' for apps, redirected to after successful registration
Matthew Wild <mwild1@gmail.com>
parents: 4174
diff changeset
167 site_name = site_name;
39d1a4ecdee6 mod_invites_register_web: Support a 'login_link_format' for apps, redirected to after successful registration
Matthew Wild <mwild1@gmail.com>
parents: 4174
diff changeset
168 username = prepped_username;
39d1a4ecdee6 mod_invites_register_web: Support a 'login_link_format' for apps, redirected to after successful registration
Matthew Wild <mwild1@gmail.com>
parents: 4174
diff changeset
169 domain = module.host;
39d1a4ecdee6 mod_invites_register_web: Support a 'login_link_format' for apps, redirected to after successful registration
Matthew Wild <mwild1@gmail.com>
parents: 4174
diff changeset
170 password = password;
39d1a4ecdee6 mod_invites_register_web: Support a 'login_link_format' for apps, redirected to after successful registration
Matthew Wild <mwild1@gmail.com>
parents: 4174
diff changeset
171 app = app_info;
39d1a4ecdee6 mod_invites_register_web: Support a 'login_link_format' for apps, redirected to after successful registration
Matthew Wild <mwild1@gmail.com>
parents: 4174
diff changeset
172 });
39d1a4ecdee6 mod_invites_register_web: Support a 'login_link_format' for apps, redirected to after successful registration
Matthew Wild <mwild1@gmail.com>
parents: 4174
diff changeset
173 return {
39d1a4ecdee6 mod_invites_register_web: Support a 'login_link_format' for apps, redirected to after successful registration
Matthew Wild <mwild1@gmail.com>
parents: 4174
diff changeset
174 status_code = 303;
39d1a4ecdee6 mod_invites_register_web: Support a 'login_link_format' for apps, redirected to after successful registration
Matthew Wild <mwild1@gmail.com>
parents: 4174
diff changeset
175 headers = {
39d1a4ecdee6 mod_invites_register_web: Support a 'login_link_format' for apps, redirected to after successful registration
Matthew Wild <mwild1@gmail.com>
parents: 4174
diff changeset
176 ["Location"] = redirect_url;
39d1a4ecdee6 mod_invites_register_web: Support a 'login_link_format' for apps, redirected to after successful registration
Matthew Wild <mwild1@gmail.com>
parents: 4174
diff changeset
177 };
39d1a4ecdee6 mod_invites_register_web: Support a 'login_link_format' for apps, redirected to after successful registration
Matthew Wild <mwild1@gmail.com>
parents: 4174
diff changeset
178 };
39d1a4ecdee6 mod_invites_register_web: Support a 'login_link_format' for apps, redirected to after successful registration
Matthew Wild <mwild1@gmail.com>
parents: 4174
diff changeset
179 end
4093
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
180 -- 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
181 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
182 else
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
183 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
184 end
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
185
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
186 -- 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
187 -- 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
188 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
189 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
190 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
191
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
192 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
193 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
194 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
195 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
196 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
197 app = app_info;
4167
3a03ae9a0882 mod_invites_register_web: Support linking to a web chat after successful registration
Matthew Wild <mwild1@gmail.com>
parents: 4129
diff changeset
198 webchat_url = webchat_url;
4093
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
199 });
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
200 else
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
201 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
202 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
203 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
204 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
205 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
206 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
207 });
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
208 end
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
209 end
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
210
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
211 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
212 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
213 route = {
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
214 ["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
215 ["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
216 };
a2116f5a7c8f mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
217 });