annotate plugins/mod_http_errors.lua @ 14016:1df1782ccdfe

prosodyctl shell: Improve process exit codes This fixes a bug introduced in 3326c8a29a86 where prosodyctl shell would always exit with non-zero error codes, even on success. Now it will exit with 0 for success, or 1 if any errors were printed. It also updates the other exit codes in the shell command to help distinguish between different error cases. These are based on the sysexits.h codes, although it is not recommended to rely on that interface.
author Matthew Wild <mwild1@gmail.com>
date Fri, 19 Dec 2025 15:32:26 +0000
parents 36d361722889
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4711
4ddf3ba0c749 mod_http_errors: Module to handle HTTP errors with a HTML page
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1 module:set_global();
4ddf3ba0c749 mod_http_errors: Module to handle HTTP errors with a HTML page
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2
12977
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 11820
diff changeset
3 local server = require "prosody.net.http.server";
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 11820
diff changeset
4 local codes = require "prosody.net.http.codes";
13959
1b95d50cfa18 mod_http_errors: Return errors as JSON if requester prefers that
Matthew Wild <mwild1@gmail.com>
parents: 13393
diff changeset
5 local http_errors = require "prosody.net.http.errors".registry;
1b95d50cfa18 mod_http_errors: Return errors as JSON if requester prefers that
Matthew Wild <mwild1@gmail.com>
parents: 13393
diff changeset
6 local json = require "prosody.util.json";
1b95d50cfa18 mod_http_errors: Return errors as JSON if requester prefers that
Matthew Wild <mwild1@gmail.com>
parents: 13393
diff changeset
7 local new_short_id = require "prosody.util.id".short;
12977
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 11820
diff changeset
8 local xml_escape = require "prosody.util.stanza".xml_escape;
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 11820
diff changeset
9 local render = require "prosody.util.interpolation".new("%b{}", xml_escape);
4711
4ddf3ba0c749 mod_http_errors: Module to handle HTTP errors with a HTML page
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10
13959
1b95d50cfa18 mod_http_errors: Return errors as JSON if requester prefers that
Matthew Wild <mwild1@gmail.com>
parents: 13393
diff changeset
11
4711
4ddf3ba0c749 mod_http_errors: Module to handle HTTP errors with a HTML page
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
12 local show_private = module:get_option_boolean("http_errors_detailed", false);
4737
7b9e2a8c4710 mod_http_errors: Add two new config options, http_errors_always_show (show even for unknown errors) and http_errors_default_message (message for unknown errors)
Matthew Wild <mwild1@gmail.com>
parents: 4711
diff changeset
13 local always_serve = module:get_option_boolean("http_errors_always_show", true);
7b9e2a8c4710 mod_http_errors: Add two new config options, http_errors_always_show (show even for unknown errors) and http_errors_default_message (message for unknown errors)
Matthew Wild <mwild1@gmail.com>
parents: 4711
diff changeset
14 local default_message = { module:get_option_string("http_errors_default_message", "That's all I know.") };
4711
4ddf3ba0c749 mod_http_errors: Module to handle HTTP errors with a HTML page
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
15 local default_messages = {
4ddf3ba0c749 mod_http_errors: Module to handle HTTP errors with a HTML page
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
16 [400] = { "What kind of request do you call that??" };
4ddf3ba0c749 mod_http_errors: Module to handle HTTP errors with a HTML page
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
17 [403] = { "You're not allowed to do that." };
4ddf3ba0c749 mod_http_errors: Module to handle HTTP errors with a HTML page
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
18 [404] = { "Whatever you were looking for is not here. %";
4ddf3ba0c749 mod_http_errors: Module to handle HTTP errors with a HTML page
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
19 "Where did you put it?", "It's behind you.", "Keep looking." };
4ddf3ba0c749 mod_http_errors: Module to handle HTTP errors with a HTML page
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
20 [500] = { "% Check your error log for more info.";
4ddf3ba0c749 mod_http_errors: Module to handle HTTP errors with a HTML page
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
21 "Gremlins.", "It broke.", "Don't look at me." };
11403
747e8245f180 mod_http_errors: Add some silly variations for the '/' page
Kim Alvefur <zash@zash.se>
parents: 11395
diff changeset
22 ["/"] = {
747e8245f180 mod_http_errors: Add some silly variations for the '/' page
Kim Alvefur <zash@zash.se>
parents: 11395
diff changeset
23 "A study in simplicity.";
747e8245f180 mod_http_errors: Add some silly variations for the '/' page
Kim Alvefur <zash@zash.se>
parents: 11395
diff changeset
24 "Better catch it!";
747e8245f180 mod_http_errors: Add some silly variations for the '/' page
Kim Alvefur <zash@zash.se>
parents: 11395
diff changeset
25 "Don't just stand there, go after it!";
747e8245f180 mod_http_errors: Add some silly variations for the '/' page
Kim Alvefur <zash@zash.se>
parents: 11395
diff changeset
26 "Well, say something, before it runs too far!";
747e8245f180 mod_http_errors: Add some silly variations for the '/' page
Kim Alvefur <zash@zash.se>
parents: 11395
diff changeset
27 "Welcome to the world of XMPP!";
747e8245f180 mod_http_errors: Add some silly variations for the '/' page
Kim Alvefur <zash@zash.se>
parents: 11395
diff changeset
28 "You can do anything in XMPP!"; -- "The only limit is XML.";
747e8245f180 mod_http_errors: Add some silly variations for the '/' page
Kim Alvefur <zash@zash.se>
parents: 11395
diff changeset
29 "You can do anything with Prosody!"; -- the only limit is memory?
747e8245f180 mod_http_errors: Add some silly variations for the '/' page
Kim Alvefur <zash@zash.se>
parents: 11395
diff changeset
30 };
4711
4ddf3ba0c749 mod_http_errors: Module to handle HTTP errors with a HTML page
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
31 };
4ddf3ba0c749 mod_http_errors: Module to handle HTTP errors with a HTML page
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
32
4ddf3ba0c749 mod_http_errors: Module to handle HTTP errors with a HTML page
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
33 local messages = setmetatable(module:get_option("http_errors_messages", {}), { __index = default_messages });
4ddf3ba0c749 mod_http_errors: Module to handle HTTP errors with a HTML page
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
34
4ddf3ba0c749 mod_http_errors: Module to handle HTTP errors with a HTML page
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
35 local html = [[
4ddf3ba0c749 mod_http_errors: Module to handle HTTP errors with a HTML page
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
36 <!DOCTYPE html>
4ddf3ba0c749 mod_http_errors: Module to handle HTTP errors with a HTML page
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
37 <html>
4ddf3ba0c749 mod_http_errors: Module to handle HTTP errors with a HTML page
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
38 <head>
8364
f91ab40a3105 mod_http_errors: Use util.interpolation to render HTML template
Kim Alvefur <zash@zash.se>
parents: 8363
diff changeset
39 <meta charset="utf-8">
f91ab40a3105 mod_http_errors: Use util.interpolation to render HTML template
Kim Alvefur <zash@zash.se>
parents: 8363
diff changeset
40 <title>{title}</title>
f91ab40a3105 mod_http_errors: Use util.interpolation to render HTML template
Kim Alvefur <zash@zash.se>
parents: 8363
diff changeset
41 <style>
13393
f72ca74de456 mod_http_errors: Simplify CSS via built-in dark mode
Kim Alvefur <zash@zash.se>
parents: 12977
diff changeset
42 :root{color-scheme:light dark}
f72ca74de456 mod_http_errors: Simplify CSS via built-in dark mode
Kim Alvefur <zash@zash.se>
parents: 12977
diff changeset
43 body{margin-top:14%;text-align:center;font-family:sans-serif}
11388
60a61c509d87 mod_http_errors: Minify CSS
Kim Alvefur <zash@zash.se>
parents: 11155
diff changeset
44 h1{font-size:xx-large}
60a61c509d87 mod_http_errors: Minify CSS
Kim Alvefur <zash@zash.se>
parents: 11155
diff changeset
45 p{font-size:x-large}
11395
d336b28b4002 mod_http_errors: Style tweak
Kim Alvefur <zash@zash.se>
parents: 11390
diff changeset
46 p.warning>span{font-size:large;background-color:yellow}
11388
60a61c509d87 mod_http_errors: Minify CSS
Kim Alvefur <zash@zash.se>
parents: 11155
diff changeset
47 p.extra{font-size:large;font-family:courier}
60a61c509d87 mod_http_errors: Minify CSS
Kim Alvefur <zash@zash.se>
parents: 11155
diff changeset
48 @media(prefers-color-scheme:dark){
11395
d336b28b4002 mod_http_errors: Style tweak
Kim Alvefur <zash@zash.se>
parents: 11390
diff changeset
49 p.warning>span{background-color:inherit;color:yellow}
11154
dd81a318a794 mod_http_errors: Dark theme!
Kim Alvefur <zash@zash.se>
parents: 11153
diff changeset
50 }
8364
f91ab40a3105 mod_http_errors: Use util.interpolation to render HTML template
Kim Alvefur <zash@zash.se>
parents: 8363
diff changeset
51 </style>
4711
4ddf3ba0c749 mod_http_errors: Module to handle HTTP errors with a HTML page
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
52 </head>
4ddf3ba0c749 mod_http_errors: Module to handle HTTP errors with a HTML page
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
53 <body>
11662
a8798e04b5c8 mod_http_errors: Allow adding icons on error pages
Kim Alvefur <zash@zash.se>
parents: 11404
diff changeset
54 <h1>{icon?{icon_raw!?}} {title}</h1>
8364
f91ab40a3105 mod_http_errors: Use util.interpolation to render HTML template
Kim Alvefur <zash@zash.se>
parents: 8363
diff changeset
55 <p>{message}</p>
11395
d336b28b4002 mod_http_errors: Style tweak
Kim Alvefur <zash@zash.se>
parents: 11390
diff changeset
56 {warning&<p class="warning"><span>&#9888; {warning?} &#9888;</span></p>}
11155
8d692a8a8f48 mod_http_errors: Remove 'extra' element when empty
Kim Alvefur <zash@zash.se>
parents: 11154
diff changeset
57 {extra&<p class="extra">{extra?}</p>}
4711
4ddf3ba0c749 mod_http_errors: Module to handle HTTP errors with a HTML page
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
58 </body>
7492
9a749cf8c1ba mod_http_errors: Add a newline after end of HTML
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
59 </html>
9a749cf8c1ba mod_http_errors: Add a newline after end of HTML
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
60 ]];
4711
4ddf3ba0c749 mod_http_errors: Module to handle HTTP errors with a HTML page
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
61
4ddf3ba0c749 mod_http_errors: Module to handle HTTP errors with a HTML page
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
62 local function get_page(code, extra)
4ddf3ba0c749 mod_http_errors: Module to handle HTTP errors with a HTML page
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
63 local message = messages[code];
4737
7b9e2a8c4710 mod_http_errors: Add two new config options, http_errors_always_show (show even for unknown errors) and http_errors_default_message (message for unknown errors)
Matthew Wild <mwild1@gmail.com>
parents: 4711
diff changeset
64 if always_serve or message then
7b9e2a8c4710 mod_http_errors: Add two new config options, http_errors_always_show (show even for unknown errors) and http_errors_default_message (message for unknown errors)
Matthew Wild <mwild1@gmail.com>
parents: 4711
diff changeset
65 message = message or default_message;
8364
f91ab40a3105 mod_http_errors: Use util.interpolation to render HTML template
Kim Alvefur <zash@zash.se>
parents: 8363
diff changeset
66 return render(html, {
4711
4ddf3ba0c749 mod_http_errors: Module to handle HTTP errors with a HTML page
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
67 title = rawget(codes, code) or ("Code "..tostring(code));
4ddf3ba0c749 mod_http_errors: Module to handle HTTP errors with a HTML page
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
68 message = message[1]:gsub("%%", function ()
4ddf3ba0c749 mod_http_errors: Module to handle HTTP errors with a HTML page
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
69 return message[math.random(2, math.max(#message,2))];
4ddf3ba0c749 mod_http_errors: Module to handle HTTP errors with a HTML page
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
70 end);
8364
f91ab40a3105 mod_http_errors: Use util.interpolation to render HTML template
Kim Alvefur <zash@zash.se>
parents: 8363
diff changeset
71 extra = extra;
f91ab40a3105 mod_http_errors: Use util.interpolation to render HTML template
Kim Alvefur <zash@zash.se>
parents: 8363
diff changeset
72 });
4711
4ddf3ba0c749 mod_http_errors: Module to handle HTTP errors with a HTML page
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
73 end
4ddf3ba0c749 mod_http_errors: Module to handle HTTP errors with a HTML page
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
74 end
4ddf3ba0c749 mod_http_errors: Module to handle HTTP errors with a HTML page
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
75
11404
f7704f987439 mod_http_errors: Add some comments
Kim Alvefur <zash@zash.se>
parents: 11403
diff changeset
76 -- Main error page handler
4711
4ddf3ba0c749 mod_http_errors: Module to handle HTTP errors with a HTML page
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
77 module:hook_object_event(server, "http-error", function (event)
8363
e2460edc2a2f mod_http_errors: Set Content-Type header to HTML (fixes #1030)
Kim Alvefur <zash@zash.se>
parents: 7492
diff changeset
78 if event.response then
e2460edc2a2f mod_http_errors: Set Content-Type header to HTML (fixes #1030)
Kim Alvefur <zash@zash.se>
parents: 7492
diff changeset
79 event.response.headers.content_type = "text/html; charset=utf-8";
e2460edc2a2f mod_http_errors: Set Content-Type header to HTML (fixes #1030)
Kim Alvefur <zash@zash.se>
parents: 7492
diff changeset
80 end
10574
f70c874b7936 mod_http_errors: Use text from util.errror object if included
Kim Alvefur <zash@zash.se>
parents: 10430
diff changeset
81 return get_page(event.code, (show_private and event.private_message) or event.message or (event.error and event.error.text));
4711
4ddf3ba0c749 mod_http_errors: Module to handle HTTP errors with a HTML page
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
82 end);
10430
46dd9df2db0c mod_http_errors: Show a friendly page instead of 404 on top level
Kim Alvefur <zash@zash.se>
parents: 9760
diff changeset
83
13959
1b95d50cfa18 mod_http_errors: Return errors as JSON if requester prefers that
Matthew Wild <mwild1@gmail.com>
parents: 13393
diff changeset
84 -- Return error object as JSON if that's what requester prefers
1b95d50cfa18 mod_http_errors: Return errors as JSON if requester prefers that
Matthew Wild <mwild1@gmail.com>
parents: 13393
diff changeset
85 module:hook_object_event(server, "http-error", function (event)
13964
36d361722889 mod_http_errors: Fix traceback on missing Accept header
Kim Alvefur <zash@zash.se>
parents: 13959
diff changeset
86 if event.request and (event.request.headers.accept or ""):match("^application/json") then
13959
1b95d50cfa18 mod_http_errors: Return errors as JSON if requester prefers that
Matthew Wild <mwild1@gmail.com>
parents: 13393
diff changeset
87 event.response.headers.content_type = "application/json";
1b95d50cfa18 mod_http_errors: Return errors as JSON if requester prefers that
Matthew Wild <mwild1@gmail.com>
parents: 13393
diff changeset
88 local error = event.request and event.error;
1b95d50cfa18 mod_http_errors: Return errors as JSON if requester prefers that
Matthew Wild <mwild1@gmail.com>
parents: 13393
diff changeset
89 if not error then
1b95d50cfa18 mod_http_errors: Return errors as JSON if requester prefers that
Matthew Wild <mwild1@gmail.com>
parents: 13393
diff changeset
90 error = http_errors[event.response.status_code];
1b95d50cfa18 mod_http_errors: Return errors as JSON if requester prefers that
Matthew Wild <mwild1@gmail.com>
parents: 13393
diff changeset
91 end
1b95d50cfa18 mod_http_errors: Return errors as JSON if requester prefers that
Matthew Wild <mwild1@gmail.com>
parents: 13393
diff changeset
92 local extra = error.extra;
1b95d50cfa18 mod_http_errors: Return errors as JSON if requester prefers that
Matthew Wild <mwild1@gmail.com>
parents: 13393
diff changeset
93 return json.encode({
1b95d50cfa18 mod_http_errors: Return errors as JSON if requester prefers that
Matthew Wild <mwild1@gmail.com>
parents: 13393
diff changeset
94 instance_id = error.instance_id or new_short_id();
1b95d50cfa18 mod_http_errors: Return errors as JSON if requester prefers that
Matthew Wild <mwild1@gmail.com>
parents: 13393
diff changeset
95 type = error.type;
1b95d50cfa18 mod_http_errors: Return errors as JSON if requester prefers that
Matthew Wild <mwild1@gmail.com>
parents: 13393
diff changeset
96 condition = error.condition;
1b95d50cfa18 mod_http_errors: Return errors as JSON if requester prefers that
Matthew Wild <mwild1@gmail.com>
parents: 13393
diff changeset
97 text = error.text or (show_private and event.private_message) or event.message;
1b95d50cfa18 mod_http_errors: Return errors as JSON if requester prefers that
Matthew Wild <mwild1@gmail.com>
parents: 13393
diff changeset
98 namespace = extra and extra.namespace;
1b95d50cfa18 mod_http_errors: Return errors as JSON if requester prefers that
Matthew Wild <mwild1@gmail.com>
parents: 13393
diff changeset
99 subcondition = extra and extra.condition;
1b95d50cfa18 mod_http_errors: Return errors as JSON if requester prefers that
Matthew Wild <mwild1@gmail.com>
parents: 13393
diff changeset
100 source = error.source or "mod_http_errors";
1b95d50cfa18 mod_http_errors: Return errors as JSON if requester prefers that
Matthew Wild <mwild1@gmail.com>
parents: 13393
diff changeset
101 });
1b95d50cfa18 mod_http_errors: Return errors as JSON if requester prefers that
Matthew Wild <mwild1@gmail.com>
parents: 13393
diff changeset
102 end
1b95d50cfa18 mod_http_errors: Return errors as JSON if requester prefers that
Matthew Wild <mwild1@gmail.com>
parents: 13393
diff changeset
103 end, 0.1);
1b95d50cfa18 mod_http_errors: Return errors as JSON if requester prefers that
Matthew Wild <mwild1@gmail.com>
parents: 13393
diff changeset
104
11404
f7704f987439 mod_http_errors: Add some comments
Kim Alvefur <zash@zash.se>
parents: 11403
diff changeset
105 -- Way to use the template for other things so to give a consistent appearance
11389
29e7ed75ed3f mod_http_errors: Add way to reuse the error page template
Kim Alvefur <zash@zash.se>
parents: 11388
diff changeset
106 module:hook("http-message", function (event)
29e7ed75ed3f mod_http_errors: Add way to reuse the error page template
Kim Alvefur <zash@zash.se>
parents: 11388
diff changeset
107 if event.response then
29e7ed75ed3f mod_http_errors: Add way to reuse the error page template
Kim Alvefur <zash@zash.se>
parents: 11388
diff changeset
108 event.response.headers.content_type = "text/html; charset=utf-8";
29e7ed75ed3f mod_http_errors: Add way to reuse the error page template
Kim Alvefur <zash@zash.se>
parents: 11388
diff changeset
109 end
29e7ed75ed3f mod_http_errors: Add way to reuse the error page template
Kim Alvefur <zash@zash.se>
parents: 11388
diff changeset
110 return render(html, event);
11820
0375ef78ed64 mod_http_errors: Make it easier to override 'http-message' handler
Kim Alvefur <zash@zash.se>
parents: 11664
diff changeset
111 end, -1);
11389
29e7ed75ed3f mod_http_errors: Add way to reuse the error page template
Kim Alvefur <zash@zash.se>
parents: 11388
diff changeset
112
11663
04fa947784bc mod_http_errors: Add a Prosody logo to root page
Kim Alvefur <zash@zash.se>
parents: 11662
diff changeset
113 local icon = [[
04fa947784bc mod_http_errors: Add a Prosody logo to root page
Kim Alvefur <zash@zash.se>
parents: 11662
diff changeset
114 <svg xmlns="http://www.w3.org/2000/svg" height="0.7em" viewBox="0 0 480 480" width="0.7em">
04fa947784bc mod_http_errors: Add a Prosody logo to root page
Kim Alvefur <zash@zash.se>
parents: 11662
diff changeset
115 <rect fill="#6197df" height="220" rx="60" ry="60" width="220" x="10" y="10"></rect>
04fa947784bc mod_http_errors: Add a Prosody logo to root page
Kim Alvefur <zash@zash.se>
parents: 11662
diff changeset
116 <rect fill="#f29b00" height="220" rx="60" ry="60" width="220" x="10" y="240"></rect>
04fa947784bc mod_http_errors: Add a Prosody logo to root page
Kim Alvefur <zash@zash.se>
parents: 11662
diff changeset
117 <rect fill="#f29b00" height="220" rx="60" ry="60" width="220" x="240" y="10"></rect>
04fa947784bc mod_http_errors: Add a Prosody logo to root page
Kim Alvefur <zash@zash.se>
parents: 11662
diff changeset
118 <rect fill="#6197df" height="220" rx="60" ry="60" width="220" x="240" y="240"></rect>
04fa947784bc mod_http_errors: Add a Prosody logo to root page
Kim Alvefur <zash@zash.se>
parents: 11662
diff changeset
119 </svg>
04fa947784bc mod_http_errors: Add a Prosody logo to root page
Kim Alvefur <zash@zash.se>
parents: 11662
diff changeset
120 ]];
04fa947784bc mod_http_errors: Add a Prosody logo to root page
Kim Alvefur <zash@zash.se>
parents: 11662
diff changeset
121
11404
f7704f987439 mod_http_errors: Add some comments
Kim Alvefur <zash@zash.se>
parents: 11403
diff changeset
122 -- Something nicer shown instead of 404 at the root path, if nothing else handles this path
10430
46dd9df2db0c mod_http_errors: Show a friendly page instead of 404 on top level
Kim Alvefur <zash@zash.se>
parents: 9760
diff changeset
123 module:hook_object_event(server, "http-error", function (event)
46dd9df2db0c mod_http_errors: Show a friendly page instead of 404 on top level
Kim Alvefur <zash@zash.se>
parents: 9760
diff changeset
124 local request, response = event.request, event.response;
46dd9df2db0c mod_http_errors: Show a friendly page instead of 404 on top level
Kim Alvefur <zash@zash.se>
parents: 9760
diff changeset
125 if request and response and request.path == "/" and response.status_code == 404 then
11664
d83f8f44caea mod_http_errors: Set status code 200 from root page
Kim Alvefur <zash@zash.se>
parents: 11663
diff changeset
126 response.status_code = 200;
10430
46dd9df2db0c mod_http_errors: Show a friendly page instead of 404 on top level
Kim Alvefur <zash@zash.se>
parents: 9760
diff changeset
127 response.headers.content_type = "text/html; charset=utf-8";
11403
747e8245f180 mod_http_errors: Add some silly variations for the '/' page
Kim Alvefur <zash@zash.se>
parents: 11395
diff changeset
128 local message = messages["/"];
10430
46dd9df2db0c mod_http_errors: Show a friendly page instead of 404 on top level
Kim Alvefur <zash@zash.se>
parents: 9760
diff changeset
129 return render(html, {
11663
04fa947784bc mod_http_errors: Add a Prosody logo to root page
Kim Alvefur <zash@zash.se>
parents: 11662
diff changeset
130 icon_raw = icon,
10430
46dd9df2db0c mod_http_errors: Show a friendly page instead of 404 on top level
Kim Alvefur <zash@zash.se>
parents: 9760
diff changeset
131 title = "Prosody is running!";
11403
747e8245f180 mod_http_errors: Add some silly variations for the '/' page
Kim Alvefur <zash@zash.se>
parents: 11395
diff changeset
132 message = message[math.random(#message)];
10430
46dd9df2db0c mod_http_errors: Show a friendly page instead of 404 on top level
Kim Alvefur <zash@zash.se>
parents: 9760
diff changeset
133 });
46dd9df2db0c mod_http_errors: Show a friendly page instead of 404 on top level
Kim Alvefur <zash@zash.se>
parents: 9760
diff changeset
134 end
46dd9df2db0c mod_http_errors: Show a friendly page instead of 404 on top level
Kim Alvefur <zash@zash.se>
parents: 9760
diff changeset
135 end, 1);
46dd9df2db0c mod_http_errors: Show a friendly page instead of 404 on top level
Kim Alvefur <zash@zash.se>
parents: 9760
diff changeset
136