Software /
code /
prosody-modules
Annotate
mod_invites_page/mod_invites_page.lua @ 6245:ea58d2893afb draft default tip
Merge update
author | Trần H. Trung <xmpp:trần.h.trung@trung.fun> |
---|---|
date | Tue, 29 Apr 2025 23:27:06 +0700 |
parent | 6232:d72010642b31 |
parent | 6234:d68e640e76ad |
rev | line source |
---|---|
4094
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 local st = require "util.stanza"; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 local url_escape = require "util.http".urlencode; |
5662
ebc09159b94a
mod_invites_page: load `invites_template_html` from config which support multiple languages and parse the correct query params accordingly.
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
5630
diff
changeset
|
3 local http_formdecode = require "net.http".formdecode; |
4094
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
4 |
4408
2c47b8110c48
mod_invites_page: Some fixes for external-only mode
Matthew Wild <mwild1@gmail.com>
parents:
4402
diff
changeset
|
5 local base_url = "https://"..module.host.."/"; |
4094
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 local render_html_template = require"util.interpolation".new("%b{}", st.xml_escape, { |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 urlescape = url_escape; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 lower = string.lower; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 classname = function (s) return (s:gsub("%W+", "-")); end; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 relurl = function (s) |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
12 if s:match("^%w+://") then |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
13 return s; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
14 end |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 return base_url.."/"..s; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 end; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 }); |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 local render_url = require "util.interpolation".new("%b{}", url_escape, { |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 urlescape = url_escape; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 noscheme = function (url) |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 return (url:gsub("^[^:]+:", "")); |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 end; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 }); |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 local site_name = module:get_option_string("site_name", module.host); |
4408
2c47b8110c48
mod_invites_page: Some fixes for external-only mode
Matthew Wild <mwild1@gmail.com>
parents:
4402
diff
changeset
|
26 local site_apps; |
4094
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 |
4402
85c11eb4331b
mod_invites_page: Allow disabling of built-in pages with invites_page_external option
Matthew Wild <mwild1@gmail.com>
parents:
4129
diff
changeset
|
28 -- Enable/disable built-in invite pages |
85c11eb4331b
mod_invites_page: Allow disabling of built-in pages with invites_page_external option
Matthew Wild <mwild1@gmail.com>
parents:
4129
diff
changeset
|
29 local external_only = module:get_option_boolean("invites_page_external", false); |
85c11eb4331b
mod_invites_page: Allow disabling of built-in pages with invites_page_external option
Matthew Wild <mwild1@gmail.com>
parents:
4129
diff
changeset
|
30 |
4094
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
31 local http_files; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 |
4408
2c47b8110c48
mod_invites_page: Some fixes for external-only mode
Matthew Wild <mwild1@gmail.com>
parents:
4402
diff
changeset
|
33 if not external_only then |
2c47b8110c48
mod_invites_page: Some fixes for external-only mode
Matthew Wild <mwild1@gmail.com>
parents:
4402
diff
changeset
|
34 -- Load HTTP-serving dependencies |
2c47b8110c48
mod_invites_page: Some fixes for external-only mode
Matthew Wild <mwild1@gmail.com>
parents:
4402
diff
changeset
|
35 if prosody.shutdown then -- not if running under prosodyctl |
2c47b8110c48
mod_invites_page: Some fixes for external-only mode
Matthew Wild <mwild1@gmail.com>
parents:
4402
diff
changeset
|
36 module:depends("http"); |
6227
dfdf0bf1e84f
mod_invites_page: Remove compatibility with 0.11
Link Mauve <linkmauve@linkmauve.fr>
parents:
5630
diff
changeset
|
37 http_files = require "net.http.files"; |
5630
efdaffc878a9
mod_invites_page: Produce URL without config from prosodyctl in trunk
Kim Alvefur <zash@zash.se>
parents:
4976
diff
changeset
|
38 elseif prosody.process_type and module.get_option_period then |
efdaffc878a9
mod_invites_page: Produce URL without config from prosodyctl in trunk
Kim Alvefur <zash@zash.se>
parents:
4976
diff
changeset
|
39 module:depends("http"); |
efdaffc878a9
mod_invites_page: Produce URL without config from prosodyctl in trunk
Kim Alvefur <zash@zash.se>
parents:
4976
diff
changeset
|
40 http_files = require "net.http.files"; |
4408
2c47b8110c48
mod_invites_page: Some fixes for external-only mode
Matthew Wild <mwild1@gmail.com>
parents:
4402
diff
changeset
|
41 end |
2c47b8110c48
mod_invites_page: Some fixes for external-only mode
Matthew Wild <mwild1@gmail.com>
parents:
4402
diff
changeset
|
42 -- Calculate automatic base_url default |
2c47b8110c48
mod_invites_page: Some fixes for external-only mode
Matthew Wild <mwild1@gmail.com>
parents:
4402
diff
changeset
|
43 base_url = module.http_url and module:http_url(); |
2c47b8110c48
mod_invites_page: Some fixes for external-only mode
Matthew Wild <mwild1@gmail.com>
parents:
4402
diff
changeset
|
44 |
2c47b8110c48
mod_invites_page: Some fixes for external-only mode
Matthew Wild <mwild1@gmail.com>
parents:
4402
diff
changeset
|
45 -- Load site apps info |
2c47b8110c48
mod_invites_page: Some fixes for external-only mode
Matthew Wild <mwild1@gmail.com>
parents:
4402
diff
changeset
|
46 module:depends("register_apps"); |
2c47b8110c48
mod_invites_page: Some fixes for external-only mode
Matthew Wild <mwild1@gmail.com>
parents:
4402
diff
changeset
|
47 site_apps = module:shared("register_apps/apps"); |
4094
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
48 end |
4408
2c47b8110c48
mod_invites_page: Some fixes for external-only mode
Matthew Wild <mwild1@gmail.com>
parents:
4402
diff
changeset
|
49 |
4094
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
50 local invites = module:depends("invites"); |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
51 |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
52 -- Point at eg https://github.com/ge0rg/easy-xmpp-invitation |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
53 -- This URL must always be absolute, as it is shared standalone |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
54 local invite_url_template = module:get_option_string("invites_page", base_url and (base_url.."?{invite.token}") or nil); |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
55 -- This URL is relative to the invite page, or can be absolute |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
56 local register_url_template = module:get_option_string("invites_registration_page", "register?t={invite.token}&c={app.id}"); |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
57 |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
58 local function add_landing_url(invite) |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
59 if not invite_url_template then return; end |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
60 -- TODO: we don't currently have a landing page for subscription-only invites, |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
61 -- so the user will only receive a URI. The client should be able to handle this |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
62 -- by automatically falling back to a client-specific landing page, per XEP-0401. |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
63 if not invite.allow_registration then return; end |
6234
d68e640e76ad
mod_invites_page: Skip adding landing page for password reset invites
Kim Alvefur <zash@zash.se>
parents:
6227
diff
changeset
|
64 -- password reset invites are not currently supported |
d68e640e76ad
mod_invites_page: Skip adding landing page for password reset invites
Kim Alvefur <zash@zash.se>
parents:
6227
diff
changeset
|
65 if invite.additional_data and invite.additional_data.allow_reset then return end |
4094
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
66 invite.landing_page = render_url(invite_url_template, { host = module.host, invite = invite }); |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
67 end |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
68 |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
69 module:hook("invite-created", add_landing_url); |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
70 |
4402
85c11eb4331b
mod_invites_page: Allow disabling of built-in pages with invites_page_external option
Matthew Wild <mwild1@gmail.com>
parents:
4129
diff
changeset
|
71 if external_only then |
85c11eb4331b
mod_invites_page: Allow disabling of built-in pages with invites_page_external option
Matthew Wild <mwild1@gmail.com>
parents:
4129
diff
changeset
|
72 return; |
85c11eb4331b
mod_invites_page: Allow disabling of built-in pages with invites_page_external option
Matthew Wild <mwild1@gmail.com>
parents:
4129
diff
changeset
|
73 end |
85c11eb4331b
mod_invites_page: Allow disabling of built-in pages with invites_page_external option
Matthew Wild <mwild1@gmail.com>
parents:
4129
diff
changeset
|
74 |
4094
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
75 local function render_app_urls(apps, invite_vars) |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
76 local rendered_apps = {}; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
77 for _, unrendered_app in ipairs(apps) do |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
78 local app = setmetatable({}, { __index = unrendered_app }); |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
79 local template_vars = { app = app, invite = invite_vars, base_url = base_url }; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
80 if app.magic_link_format then |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
81 -- Magic link generally links directly to third-party |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
82 app.proceed_url = render_url(app.magic_link_format or app.link or "#", template_vars); |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
83 elseif app.supports_preauth_uri then |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
84 -- Proceed to a page that guides the user to download, and then |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
85 -- click the URI button |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
86 app.proceed_url = render_url("{base_url!}/setup/{app.id}?{invite.token}", template_vars); |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
87 else |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
88 -- Manual means proceed to web registration, but include app id |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
89 -- so it can show post-registration instructions |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
90 app.proceed_url = render_url(register_url_template, template_vars); |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
91 end |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
92 table.insert(rendered_apps, app); |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
93 end |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
94 return rendered_apps; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
95 end |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
96 |
5662
ebc09159b94a
mod_invites_page: load `invites_template_html` from config which support multiple languages and parse the correct query params accordingly.
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
5630
diff
changeset
|
97 local templatePath = module:get_option_string("invites_template_html", "html"); |
ebc09159b94a
mod_invites_page: load `invites_template_html` from config which support multiple languages and parse the correct query params accordingly.
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
5630
diff
changeset
|
98 local function template_get(filename, lang) |
ebc09159b94a
mod_invites_page: load `invites_template_html` from config which support multiple languages and parse the correct query params accordingly.
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
5630
diff
changeset
|
99 local template = lang and templatePath.."/"..filename.."."..lang..".html" |
ebc09159b94a
mod_invites_page: load `invites_template_html` from config which support multiple languages and parse the correct query params accordingly.
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
5630
diff
changeset
|
100 or templatePath.."/"..filename..".html"; |
ebc09159b94a
mod_invites_page: load `invites_template_html` from config which support multiple languages and parse the correct query params accordingly.
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
5630
diff
changeset
|
101 return assert(module:load_resource(template):read("*a")); |
ebc09159b94a
mod_invites_page: load `invites_template_html` from config which support multiple languages and parse the correct query params accordingly.
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
5630
diff
changeset
|
102 end |
ebc09159b94a
mod_invites_page: load `invites_template_html` from config which support multiple languages and parse the correct query params accordingly.
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
5630
diff
changeset
|
103 |
4094
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
104 function serve_invite_page(event) |
5662
ebc09159b94a
mod_invites_page: load `invites_template_html` from config which support multiple languages and parse the correct query params accordingly.
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
5630
diff
changeset
|
105 local query_params = event.request.url.query and http_formdecode(event.request.url.query); |
ebc09159b94a
mod_invites_page: load `invites_template_html` from config which support multiple languages and parse the correct query params accordingly.
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
5630
diff
changeset
|
106 local lang = query_params and query_params.l; |
ebc09159b94a
mod_invites_page: load `invites_template_html` from config which support multiple languages and parse the correct query params accordingly.
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
5630
diff
changeset
|
107 |
ebc09159b94a
mod_invites_page: load `invites_template_html` from config which support multiple languages and parse the correct query params accordingly.
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
5630
diff
changeset
|
108 local invite_page_template = template_get("invite", lang); |
ebc09159b94a
mod_invites_page: load `invites_template_html` from config which support multiple languages and parse the correct query params accordingly.
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
5630
diff
changeset
|
109 local invalid_invite_page_template = template_get("invite_invalid", lang); |
4094
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
110 |
4129
ca099bd28bf5
mod_invites_page, mod_invites_register_web: Set correct Content-Type everywhere necessary
Matthew Wild <mwild1@gmail.com>
parents:
4116
diff
changeset
|
111 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:
4116
diff
changeset
|
112 |
5662
ebc09159b94a
mod_invites_page: load `invites_template_html` from config which support multiple languages and parse the correct query params accordingly.
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
5630
diff
changeset
|
113 local invite = invites.get(event.request.url.query.t); |
4094
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
114 if not invite then |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
115 return render_html_template(invalid_invite_page_template, { |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
116 site_name = site_name; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
117 static = base_url.."/static"; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
118 }); |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
119 end |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
120 |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
121 local template_vars = { |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
122 site_name = site_name; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
123 token = invite.token; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
124 uri = invite.uri; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
125 type = invite.type; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
126 jid = invite.jid; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
127 inviter = invite.inviter; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
128 static = base_url.."/static"; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
129 }; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
130 template_vars.apps = render_app_urls(site_apps, template_vars); |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
131 |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
132 local invite_page = render_html_template(invite_page_template, template_vars); |
4116
05d0a249326a
mod_invites_page: Add Link header for URI with rel=alternate
Matthew Wild <mwild1@gmail.com>
parents:
4107
diff
changeset
|
133 |
05d0a249326a
mod_invites_page: Add Link header for URI with rel=alternate
Matthew Wild <mwild1@gmail.com>
parents:
4107
diff
changeset
|
134 event.response.headers["Link"] = ([[<%s>; rel="alternate"]]):format(template_vars.uri); |
4094
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
135 return invite_page; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
136 end |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
137 |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
138 function serve_setup_page(event, app_id) |
5662
ebc09159b94a
mod_invites_page: load `invites_template_html` from config which support multiple languages and parse the correct query params accordingly.
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
5630
diff
changeset
|
139 local query_params = event.request.url.query and http_formdecode(event.request.url.query); |
ebc09159b94a
mod_invites_page: load `invites_template_html` from config which support multiple languages and parse the correct query params accordingly.
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
5630
diff
changeset
|
140 local lang = query_params and query_params.l; |
ebc09159b94a
mod_invites_page: load `invites_template_html` from config which support multiple languages and parse the correct query params accordingly.
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
5630
diff
changeset
|
141 |
ebc09159b94a
mod_invites_page: load `invites_template_html` from config which support multiple languages and parse the correct query params accordingly.
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
5630
diff
changeset
|
142 local invite_page_template = template_get("client", lang); |
ebc09159b94a
mod_invites_page: load `invites_template_html` from config which support multiple languages and parse the correct query params accordingly.
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
5630
diff
changeset
|
143 local invalid_invite_page_template = template_get("invite_invalid", lang); |
4094
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
144 |
4129
ca099bd28bf5
mod_invites_page, mod_invites_register_web: Set correct Content-Type everywhere necessary
Matthew Wild <mwild1@gmail.com>
parents:
4116
diff
changeset
|
145 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:
4116
diff
changeset
|
146 |
5662
ebc09159b94a
mod_invites_page: load `invites_template_html` from config which support multiple languages and parse the correct query params accordingly.
Trần H. Trung <xmpp:trần.h.trung@trung.fun>
parents:
5630
diff
changeset
|
147 local invite = invites.get(event.request.url.query.t); |
4094
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
148 if not invite then |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
149 return render_html_template(invalid_invite_page_template, { |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
150 site_name = site_name; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
151 static = base_url.."/static"; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
152 }); |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
153 end |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
154 |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
155 local template_vars = { |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
156 site_name = site_name; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
157 apps = site_apps; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
158 token = invite.token; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
159 uri = invite.uri; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
160 type = invite.type; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
161 jid = invite.jid; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
162 static = base_url.."/static"; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
163 }; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
164 template_vars.app = render_app_urls({ site_apps[app_id] }, template_vars)[1]; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
165 |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
166 local invite_page = render_html_template(invite_page_template, template_vars); |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
167 return invite_page; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
168 end |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
169 |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
170 local mime_map = { |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
171 png = "image/png"; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
172 svg = "image/svg+xml"; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
173 js = "application/javascript"; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
174 }; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
175 |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
176 module:provides("http", { |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
177 route = { |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
178 ["GET"] = serve_invite_page; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
179 ["GET /setup/*"] = serve_setup_page; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
180 ["GET /static/*"] = http_files and http_files.serve({ path = module:get_directory().."/static", mime_map = mime_map }); |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
181 }; |
dd00a2b9927c
mod_invites_page: New module to generate landing page for invites
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
182 }); |