Mercurial > prosody-modules
annotate mod_invites_register_web/mod_invites_register_web.lua @ 5186:fa3059e653fa
mod_http_oauth2: Implement the Implicit flow
Everyone says this is insecure and bad, but it's also the only thing
that makes sense for e.g. pure JavaScript clients, but hey implement
this even more complicated thing instead!
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Thu, 02 Mar 2023 22:06:50 +0100 |
parents | 15cf32e666da |
children |
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"); |
4833
15cf32e666da
mod_invites_register_web: Add mod_password_policy checks for web registration
Matthew Wild <mwild1@gmail.com>
parents:
4175
diff
changeset
|
19 local mod_password_policy = module:depends("password_policy"); |
4093
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 |
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_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
|
22 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
|
23 |
4167
3a03ae9a0882
mod_invites_register_web: Support linking to a web chat after successful registration
Matthew Wild <mwild1@gmail.com>
parents:
4129
diff
changeset
|
24 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
|
25 |
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 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
|
27 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
|
28 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
|
29 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
|
30 end |
3a03ae9a0882
mod_invites_register_web: Support linking to a web chat after successful registration
Matthew Wild <mwild1@gmail.com>
parents:
4129
diff
changeset
|
31 |
4093
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 module:depends("http"); |
4108
f49e3ea99785
mod_invites_register_web: Remove dependency on mod_easy_invite
Matthew Wild <mwild1@gmail.com>
parents:
4093
diff
changeset
|
33 |
4093
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 = 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
|
35 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
|
36 |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 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
|
38 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
|
39 |
4112
d0366474aace
mod_invites_register_web: Fix traceback on missing query params
Matthew Wild <mwild1@gmail.com>
parents:
4108
diff
changeset
|
40 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
|
41 |
4112
d0366474aace
mod_invites_register_web: Fix traceback on missing query params
Matthew Wild <mwild1@gmail.com>
parents:
4108
diff
changeset
|
42 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
|
43 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
|
44 return { |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
45 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
|
46 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
|
47 ["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
|
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 }; |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
50 end |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
51 |
4129
ca099bd28bf5
mod_invites_page, mod_invites_register_web: Set correct Content-Type everywhere necessary
Matthew Wild <mwild1@gmail.com>
parents:
4119
diff
changeset
|
52 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
|
53 |
4093
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
54 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
|
55 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
|
56 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
|
57 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
|
58 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
|
59 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
|
60 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
|
61 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
|
62 app = query_params.c and site_apps[query_params.c]; |
4833
15cf32e666da
mod_invites_register_web: Add mod_password_policy checks for web registration
Matthew Wild <mwild1@gmail.com>
parents:
4175
diff
changeset
|
63 password_policy = mod_password_policy.get_policy(); |
4093
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
64 }); |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
65 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
|
66 end |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
67 |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
68 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
|
69 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
|
70 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
|
71 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
|
72 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
|
73 |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
74 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
|
75 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
|
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 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
|
78 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
|
79 return { |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
80 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
|
81 headers = { |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
82 ["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
|
83 }; |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
84 }; |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
85 end |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
86 |
4129
ca099bd28bf5
mod_invites_page, mod_invites_register_web: Set correct Content-Type everywhere necessary
Matthew Wild <mwild1@gmail.com>
parents:
4119
diff
changeset
|
87 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
|
88 |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
89 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
|
90 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
|
91 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
|
92 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
|
93 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
|
94 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
|
95 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
|
96 jid = invite.jid; |
4833
15cf32e666da
mod_invites_register_web: Add mod_password_policy checks for web registration
Matthew Wild <mwild1@gmail.com>
parents:
4175
diff
changeset
|
97 password_policy = mod_password_policy.get_policy(); |
4093
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 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
|
100 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
|
101 }); |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
102 end |
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 -- 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
|
105 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
|
106 |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
107 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
|
108 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
|
109 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
|
110 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
|
111 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
|
112 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
|
113 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
|
114 jid = invite.jid; |
4833
15cf32e666da
mod_invites_register_web: Add mod_password_policy checks for web registration
Matthew Wild <mwild1@gmail.com>
parents:
4175
diff
changeset
|
115 password_policy = mod_password_policy.get_policy(); |
4093
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
116 |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
117 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
|
118 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
|
119 }); |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
120 end |
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 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
|
123 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
|
124 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
|
125 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
|
126 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
|
127 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
|
128 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
|
129 jid = invite.jid; |
4833
15cf32e666da
mod_invites_register_web: Add mod_password_policy checks for web registration
Matthew Wild <mwild1@gmail.com>
parents:
4175
diff
changeset
|
130 password_policy = mod_password_policy.get_policy(); |
4093
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 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
|
133 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
|
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 end |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
136 |
4833
15cf32e666da
mod_invites_register_web: Add mod_password_policy checks for web registration
Matthew Wild <mwild1@gmail.com>
parents:
4175
diff
changeset
|
137 local pw_ok, pw_error = mod_password_policy.check_password(password, { |
15cf32e666da
mod_invites_register_web: Add mod_password_policy checks for web registration
Matthew Wild <mwild1@gmail.com>
parents:
4175
diff
changeset
|
138 username = prepped_username; |
15cf32e666da
mod_invites_register_web: Add mod_password_policy checks for web registration
Matthew Wild <mwild1@gmail.com>
parents:
4175
diff
changeset
|
139 }); |
15cf32e666da
mod_invites_register_web: Add mod_password_policy checks for web registration
Matthew Wild <mwild1@gmail.com>
parents:
4175
diff
changeset
|
140 if not pw_ok then |
15cf32e666da
mod_invites_register_web: Add mod_password_policy checks for web registration
Matthew Wild <mwild1@gmail.com>
parents:
4175
diff
changeset
|
141 return render_html_template(register_page_template, { |
15cf32e666da
mod_invites_register_web: Add mod_password_policy checks for web registration
Matthew Wild <mwild1@gmail.com>
parents:
4175
diff
changeset
|
142 site_name = site_name; |
15cf32e666da
mod_invites_register_web: Add mod_password_policy checks for web registration
Matthew Wild <mwild1@gmail.com>
parents:
4175
diff
changeset
|
143 token = invite.token; |
15cf32e666da
mod_invites_register_web: Add mod_password_policy checks for web registration
Matthew Wild <mwild1@gmail.com>
parents:
4175
diff
changeset
|
144 domain = module.host; |
15cf32e666da
mod_invites_register_web: Add mod_password_policy checks for web registration
Matthew Wild <mwild1@gmail.com>
parents:
4175
diff
changeset
|
145 uri = invite.uri; |
15cf32e666da
mod_invites_register_web: Add mod_password_policy checks for web registration
Matthew Wild <mwild1@gmail.com>
parents:
4175
diff
changeset
|
146 type = invite.type; |
15cf32e666da
mod_invites_register_web: Add mod_password_policy checks for web registration
Matthew Wild <mwild1@gmail.com>
parents:
4175
diff
changeset
|
147 jid = invite.jid; |
15cf32e666da
mod_invites_register_web: Add mod_password_policy checks for web registration
Matthew Wild <mwild1@gmail.com>
parents:
4175
diff
changeset
|
148 password_policy = mod_password_policy.get_policy(); |
15cf32e666da
mod_invites_register_web: Add mod_password_policy checks for web registration
Matthew Wild <mwild1@gmail.com>
parents:
4175
diff
changeset
|
149 |
15cf32e666da
mod_invites_register_web: Add mod_password_policy checks for web registration
Matthew Wild <mwild1@gmail.com>
parents:
4175
diff
changeset
|
150 msg_class = "alert-warning"; |
15cf32e666da
mod_invites_register_web: Add mod_password_policy checks for web registration
Matthew Wild <mwild1@gmail.com>
parents:
4175
diff
changeset
|
151 message = pw_error; |
15cf32e666da
mod_invites_register_web: Add mod_password_policy checks for web registration
Matthew Wild <mwild1@gmail.com>
parents:
4175
diff
changeset
|
152 }); |
15cf32e666da
mod_invites_register_web: Add mod_password_policy checks for web registration
Matthew Wild <mwild1@gmail.com>
parents:
4175
diff
changeset
|
153 end |
15cf32e666da
mod_invites_register_web: Add mod_password_policy checks for web registration
Matthew Wild <mwild1@gmail.com>
parents:
4175
diff
changeset
|
154 |
4093
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
155 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
|
156 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
|
157 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
|
158 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
|
159 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
|
160 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
|
161 }; |
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 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
|
164 |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
165 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
|
166 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
|
167 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
|
168 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
|
169 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
|
170 }); |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
171 end |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
172 |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
173 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
|
174 |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
175 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
|
176 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
|
177 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
|
178 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
|
179 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
|
180 validated_invite = invite; |
4119
559ca8d93302
mod_invites_register_web: Also add ip to user-registered
Matthew Wild <mwild1@gmail.com>
parents:
4117
diff
changeset
|
181 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
|
182 }); |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
183 |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
184 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
|
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 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
|
187 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
|
188 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
|
189 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
|
190 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
|
191 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
|
192 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
|
193 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
|
194 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
|
195 }); |
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
|
196 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
|
197 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
|
198 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
|
199 ["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
|
200 }; |
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
|
201 }; |
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
|
202 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
|
203 -- 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
|
204 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
|
205 else |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
206 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
|
207 end |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
208 |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
209 -- 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
|
210 -- 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
|
211 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
|
212 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
|
213 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
|
214 |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
215 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
|
216 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
|
217 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
|
218 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
|
219 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
|
220 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
|
221 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
|
222 }); |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
223 else |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
224 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
|
225 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
|
226 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
|
227 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
|
228 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
|
229 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
|
230 }); |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
231 end |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
232 end |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
233 |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
234 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
|
235 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
|
236 route = { |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
237 ["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
|
238 ["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
|
239 }; |
a2116f5a7c8f
mod_invites_register_web: New module to allow web registration with an invite token
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
240 }); |