diff options
Diffstat (limited to 'plugins/mod_http_errors.lua')
-rw-r--r-- | plugins/mod_http_errors.lua | 73 |
1 files changed, 55 insertions, 18 deletions
diff --git a/plugins/mod_http_errors.lua b/plugins/mod_http_errors.lua index 13473219..ec54860c 100644 --- a/plugins/mod_http_errors.lua +++ b/plugins/mod_http_errors.lua @@ -15,6 +15,15 @@ local default_messages = { "Where did you put it?", "It's behind you.", "Keep looking." }; [500] = { "% Check your error log for more info."; "Gremlins.", "It broke.", "Don't look at me." }; + ["/"] = { + "A study in simplicity."; + "Better catch it!"; + "Don't just stand there, go after it!"; + "Well, say something, before it runs too far!"; + "Welcome to the world of XMPP!"; + "You can do anything in XMPP!"; -- "The only limit is XML."; + "You can do anything with Prosody!"; -- the only limit is memory? + }; }; local messages = setmetatable(module:get_option("http_errors_messages", {}), { __index = default_messages }); @@ -26,28 +35,22 @@ local html = [[ <meta charset="utf-8"> <title>{title}</title> <style> -body{ - margin-top:14%; - text-align:center; - background-color:#F8F8F8; - font-family:sans-serif; -} -h1{ - font-size:xx-large; -} -p{ - font-size:x-large; -} -p+p { - font-size:large; - font-family:courier; +body{margin-top:14%;text-align:center;background-color:#f8f8f8;font-family:sans-serif} +h1{font-size:xx-large} +p{font-size:x-large} +p.warning>span{font-size:large;background-color:yellow} +p.extra{font-size:large;font-family:courier} +@media(prefers-color-scheme:dark){ +body{background-color:#161616;color:#eee} +p.warning>span{background-color:inherit;color:yellow} } </style> </head> <body> -<h1>{title}</h1> +<h1>{icon?{icon_raw!?}} {title}</h1> <p>{message}</p> -<p>{extra?}</p> +{warning&<p class="warning"><span>⚠ {warning?} ⚠</span></p>} +{extra&<p class="extra">{extra?}</p>} </body> </html> ]]; @@ -66,9 +69,43 @@ local function get_page(code, extra) end end +-- Main error page handler module:hook_object_event(server, "http-error", function (event) if event.response then event.response.headers.content_type = "text/html; charset=utf-8"; end - return get_page(event.code, (show_private and event.private_message) or event.message); + return get_page(event.code, (show_private and event.private_message) or event.message or (event.error and event.error.text)); end); + +-- Way to use the template for other things so to give a consistent appearance +module:hook("http-message", function (event) + if event.response then + event.response.headers.content_type = "text/html; charset=utf-8"; + end + return render(html, event); +end, -1); + +local icon = [[ +<svg xmlns="http://www.w3.org/2000/svg" height="0.7em" viewBox="0 0 480 480" width="0.7em"> +<rect fill="#6197df" height="220" rx="60" ry="60" width="220" x="10" y="10"></rect> +<rect fill="#f29b00" height="220" rx="60" ry="60" width="220" x="10" y="240"></rect> +<rect fill="#f29b00" height="220" rx="60" ry="60" width="220" x="240" y="10"></rect> +<rect fill="#6197df" height="220" rx="60" ry="60" width="220" x="240" y="240"></rect> +</svg> +]]; + +-- Something nicer shown instead of 404 at the root path, if nothing else handles this path +module:hook_object_event(server, "http-error", function (event) + local request, response = event.request, event.response; + if request and response and request.path == "/" and response.status_code == 404 then + response.status_code = 200; + response.headers.content_type = "text/html; charset=utf-8"; + local message = messages["/"]; + return render(html, { + icon_raw = icon, + title = "Prosody is running!"; + message = message[math.random(#message)]; + }); + end +end, 1); + |