Diff

plugins/mod_http_errors.lua @ 8364:f91ab40a3105

mod_http_errors: Use util.interpolation to render HTML template
author Kim Alvefur <zash@zash.se>
date Fri, 27 Oct 2017 13:27:35 +0200
parent 8363:e2460edc2a2f
child 9760:88640b3ea6b8
line wrap: on
line diff
--- a/plugins/mod_http_errors.lua	Fri Oct 27 13:28:34 2017 +0200
+++ b/plugins/mod_http_errors.lua	Fri Oct 27 13:27:35 2017 +0200
@@ -2,6 +2,8 @@
 
 local server = require "net.http.server";
 local codes = require "net.http.codes";
+local xml_escape = require "util.stanza".xml_escape;
+local render = require "util.interpolation".new("%b{}", xml_escape);
 
 local show_private = module:get_option_boolean("http_errors_detailed", false);
 local always_serve = module:get_option_boolean("http_errors_always_show", true);
@@ -21,53 +23,46 @@
 <!DOCTYPE html>
 <html>
 <head>
-	<meta charset="utf-8">
-	<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 }
-        </style>
+<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;
+}
+</style>
 </head>
 <body>
-        <h1>$title</h1>
-        <p>$message</p>
-        <p>$extra</p>
+<h1>{title}</h1>
+<p>{message}</p>
+<p>{extra?}</p>
 </body>
 </html>
 ]];
-html = html:gsub("%s%s+", "");
-
-local entities = {
-	["<"] = "&lt;", [">"] = "&gt;", ["&"] = "&amp;",
-	["'"] = "&apos;", ["\""] = "&quot;", ["\n"] = "<br/>",
-};
-
-local function tohtml(plain)
-	return (plain:gsub("[<>&'\"\n]", entities));
-
-end
 
 local function get_page(code, extra)
 	local message = messages[code];
 	if always_serve or message then
 		message = message or default_message;
-		return (html:gsub("$(%a+)", {
+		return render(html, {
 			title = rawget(codes, code) or ("Code "..tostring(code));
 			message = message[1]:gsub("%%", function ()
 				return message[math.random(2, math.max(#message,2))];
 			end);
-			extra = tohtml(extra or "");
-		}));
+			extra = extra;
+		});
 	end
 end