Annotate

mod_welcome_page/mod_welcome_page.lua @ 6231:6b3deaa523ad

mod_welcome_page: Remove compatibility with 0.11
author Link Mauve <linkmauve@linkmauve.fr>
date Wed, 09 Apr 2025 19:05:42 +0200
parent 4976:75b6e5df65f9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4184
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1 local st = require "util.stanza";
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2 local url_escape = require "util.http".urlencode;
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3 local render_html_template = require"util.interpolation".new("%b{}", st.xml_escape, {
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4 urlescape = url_escape;
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5 });
6231
6b3deaa523ad mod_welcome_page: Remove compatibility with 0.11
Link Mauve <linkmauve@linkmauve.fr>
parents: 4976
diff changeset
6 local http_files = require "net.http.files";
4184
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8 local template_path = module:get_option_string("welcome_page_template_path", module:get_directory().."/html");
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9 local user_vars = module:get_option("welcome_page_variables", {});
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10 local site_name = module:get_option("site_name", module.host);
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11 local invite_only = module:get_option_boolean("registration_invite_only", true);
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
12 local open_registration = module:get_option_boolean("welcome_page_open_registration", not invite_only);
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
13
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
14 module:depends("http");
4605
ffb709728210 mod_welcome_page: Add dependency on mod_http_libjs
Kim Alvefur <zash@zash.se>
parents: 4193
diff changeset
15 module:depends("http_libjs");
4184
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
16 local invites = module:depends("invites");
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
17
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
18 local function load_template(path)
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
19 local template_file, err = io.open(path);
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
20 if not template_file then
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
21 error("Unable to load template file: "..tostring(err));
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
22 end
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
23 local template = template_file:read("*a");
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
24 template_file:close();
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
25 return template;
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
26 end
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
27
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
28 local template = load_template(template_path.."/index.html");
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
29
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
30 local function serve_page(event)
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
31 event.response.headers["Content-Type"] = "text/html; charset=utf-8";
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
32 return render_html_template(template, {
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
33 site_name = site_name;
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
34 request = event.request;
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
35 var = user_vars;
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
36 });
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
37 end
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
38
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
39 local function handle_submit(event)
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
40 local submission = { allowed = open_registration, request = event.request };
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
41 module:fire_event("mod_welcome_page/submission", submission);
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
42 if not submission.allowed then
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
43 event.response.headers["Content-Type"] = "text/html; charset=utf-8";
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
44 return render_html_template(template, {
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
45 site_name = site_name;
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
46 request = event.request;
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
47 var = user_vars;
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
48 message = {
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
49 class = "alert-danger";
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
50 text = submission.reason or "Account creation is not possible at this time";
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
51 };
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
52 });
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
53 end
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
54
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
55 local invite = invites.create_account(nil, { source = module.name });
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
56 if not invite then
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
57 return 500;
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
58 end
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
59
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
60 event.response.headers.Location = invite.landing_page or invite.uri;
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
61
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
62 return 303;
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
63 end
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
64
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
65 module:provides("http", {
4193
8d1e996034ee mod_welcome_page: Serve from top level path (/) by default
Kim Alvefur <zash@zash.se>
parents: 4184
diff changeset
66 default_path = "/";
4184
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
67 route = {
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
68 ["GET"] = serve_page;
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
69 ["GET /*"] = http_files.serve({ path = template_path });
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
70 ["POST"] = handle_submit;
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
71 };
9127fa98ee1e mod_welcome_page: New module to provide a friendly entrypoint to invite-based setups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
72 });