Software /
code /
prosody-modules
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 |
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 }); |