Annotate

mod_invites_webgen/mod_invites_webgen.lua @ 5944:d073ada49a86

mod_invites_webgen: fix variable name for http path
author Trần H. Trung <xmpp:trần.h.trung@trung.fun>
date Wed, 26 Feb 2025 18:47:07 +0700
parent 5943:05125c29fd67
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5943
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
1 local http_formdecode = require "net.http".formdecode;
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
2 local usermanager = require "core.usermanager";
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
3 local nodeprep = require "util.encodings".stringprep.nodeprep;
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
4 local st = require "util.stanza";
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
5 local url_escape = require "util.http".urlencode;
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
6 local render_html_template = require "util.interpolation".new("%b{}", st.xml_escape, {
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
7 urlescape = url_escape;
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
8 });
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
9
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
10 local site_name = module:get_option_string("site_name", module.host);
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
11
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
12 local invites = module:depends("invites");
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
13 --local template_get = module:depends("invites_page").template_get;
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
14
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
15 local templatePath = module:get_option_string("invites_template_html", "html");
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
16 function template_get(filename, lang)
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
17 local template = lang and templatePath.."/"..filename.."."..lang..".html"
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
18 or templatePath.."/"..filename..".html";
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
19 return assert(module:load_resource(template):read("*a"));
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
20 end
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
21
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
22
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
23 module:depends("http");
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
24
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
25 local default_path, lang;
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
26
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
27 local function serve_webgen(event)
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
28 local query_params = event.request.url.query and http_formdecode(event.request.url.query);
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
29 lang = query_params and query_params.l;
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
30
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
31 local webgen_template = template_get("webgen", lang);
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
32 event.response.headers["Content-Type"] = "text/html; charset=utf-8";
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
33
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
34 local webgen = render_html_template(webgen_template, {
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
35 site_name = site_name;
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
36 });
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
37 return webgen;
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
38 end
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
39
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
40 module:depends("invites_register_web");
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
41
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
42 local function handle_webgen(event)
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
43 local request, response = event.request, event.response;
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
44 local form_data = http_formdecode(request.body);
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
45 local username, password = form_data["username"], form_data["password"];
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
46
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
47 event.response.headers["Content-Type"] = "text/html; charset=utf-8";
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
48
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
49 local webgen_template = template_get("webgen", lang);
5944
d073ada49a86 mod_invites_webgen: fix variable name for http path
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents: 5943
diff changeset
50 local http_path = module:http_url("webgen", "/webgen");
5943
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
51
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
52 if not username or #username == 0 or not password or #password == 0 then
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
53 return render_html_template(webgen_template, {
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
54 site_name = site_name;
5944
d073ada49a86 mod_invites_webgen: fix variable name for http path
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents: 5943
diff changeset
55 path = http_path;
5943
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
56 msg_class = "alert-warning";
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
57 message = "Please fill in all fields.";
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
58 });
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
59 end
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
60
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
61 local prepped_username = nodeprep(username);
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
62 local exists = usermanager.user_exists(prepped_username, module.host);
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
63 local pass = usermanager.test_password(prepped_username, module.host, password);
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
64 local allow_user = module:get_option_boolean("allow_user_invites", false);
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
65 local allow_contact = module:get_option_boolean("allow_contact_invites", false);
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
66
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
67 local invite;
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
68 if exists and pass and allow_user and allow_contact then
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
69 invite = invites.create_contact(username, true, { source = "webgen" });
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
70 else
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
71 return render_html_template(webgen_template, {
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
72 site_name = site_name;
5944
d073ada49a86 mod_invites_webgen: fix variable name for http path
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents: 5943
diff changeset
73 path = http_path;
5943
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
74 username = username;
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
75 msg_class = "alert-warning";
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
76 message = "Invalid input!";
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
77 });
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
78 end
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
79
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
80 if not invite then
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
81 return 500;
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
82 else
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
83 event.response.headers.Location = invite.landing_page or invite.uri;
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
84 return 303;
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
85 end
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
86 end
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
87
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
88 module:provides("http", {
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
89 default_path = "webgen";
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
90 route = {
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
91 ["GET"] = serve_webgen;
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
92 ["POST"] = handle_webgen;
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
93 };
05125c29fd67 mod_invites_webgen: initial release
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
diff changeset
94 });