annotate mod_welcome_page/mod_welcome_page.lua @ 6319:04c3273cb81f

mod_auth_cyrus: Add empty 'profile' table to SASL handler objects This is for compatibility with Prosody's built-in util.sasl objects. A SASL profile table usually includes methods supported by the backend, which can be used by SASL mechanism handlers to perform operations (such as testing the password). It also optionally contains a 'cb' field with channel binding method handlers. The Cyrus backend doesn't support channel binding, and doesn't have the same concept of auth backend methods (it handles all that internally, and Prosody has no insight or control over it). Thus, we create an empty profile which informs Prosody that the SASL handler does not support any of the auth or channel binding methods. Some features will not work, but they didn't work anyway. This just makes it explicit. This fixes a traceback in mod_sasl2_fast, which expected SASL handlers to always contain a 'profile' field.
author Matthew Wild <mwild1@gmail.com>
date Thu, 04 Sep 2025 10:14:46 +0100
parents 6b3deaa523ad
children
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 });
6199
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 });