From 3db297de950ae4614c391392d015233c273dcc71 Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Wed, 17 Sep 2014 02:21:31 +0000 Subject: [PATCH] * i2psnark: - Forward port from trunk: Don't send HTML-only headers for icons (2nd try) - Consolidate HTML header code - Set no-cache headers - Don't set HTML headers for redirects --- .../org/klomp/snark/web/I2PSnarkServlet.java | 33 ++++++++++++------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java index 086fa4670e..1fe142207d 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java +++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java @@ -186,21 +186,19 @@ public class I2PSnarkServlet extends BasicServlet { super.doGet(req, resp); else // no POST either resp.sendError(405); + return; } _themePath = "/themes/snark/" + _manager.getTheme() + '/'; _imgPath = _themePath + "images/"; - resp.setHeader("X-Frame-Options", "SAMEORIGIN"); - resp.setHeader("Content-Security-Policy", "default-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'"); - resp.setHeader("X-XSS-Protection", "1; mode=block"); + req.setCharacterEncoding("UTF-8"); String pOverride = _manager.util().connected() ? null : ""; String peerString = getQueryString(req, pOverride, null, null); // AJAX for mainsection if ("/.ajax/xhr1.html".equals(path)) { - resp.setCharacterEncoding("UTF-8"); - resp.setContentType("text/html; charset=UTF-8"); + setHTMLHeaders(resp); PrintWriter out = resp.getWriter(); //if (_log.shouldLog(Log.DEBUG)) // _manager.addMessage((_context.clock().now() / 1000) + " xhr1 p=" + req.getParameter("p")); @@ -218,9 +216,6 @@ public class I2PSnarkServlet extends BasicServlet { // bypass the horrid Resource.getListHTML() String pathInfo = req.getPathInfo(); String pathInContext = addPaths(path, pathInfo); - req.setCharacterEncoding("UTF-8"); - resp.setCharacterEncoding("UTF-8"); - resp.setContentType("text/html; charset=UTF-8"); File resource = getResource(pathInContext); if (resource == null) { resp.sendError(404); @@ -231,6 +226,7 @@ public class I2PSnarkServlet extends BasicServlet { // P-R-G sendRedirect(req, resp, ""); } else if (listing != null) { + setHTMLHeaders(resp); resp.getWriter().write(listing); } else { // shouldn't happen resp.sendError(404); @@ -250,10 +246,6 @@ public class I2PSnarkServlet extends BasicServlet { // Either the main page or /configure - req.setCharacterEncoding("UTF-8"); - resp.setCharacterEncoding("UTF-8"); - resp.setContentType("text/html; charset=UTF-8"); - String nonce = req.getParameter("nonce"); if (nonce != null) { if (nonce.equals(String.valueOf(_nonce))) @@ -265,6 +257,7 @@ public class I2PSnarkServlet extends BasicServlet { return; } + setHTMLHeaders(resp); PrintWriter out = resp.getWriter(); out.write(DOCTYPE + "<html>\n" + "<head><link rel=\"shortcut icon\" href=\"" + _themePath + "favicon.ico\">\n" + @@ -366,6 +359,22 @@ public class I2PSnarkServlet extends BasicServlet { out.write(FOOTER); } + /** + * The standard HTTP headers for all HTML pages + * + * @since 0.9.16 moved from doGetAndPost() + */ + private static void setHTMLHeaders(HttpServletResponse resp) { + resp.setCharacterEncoding("UTF-8"); + resp.setContentType("text/html; charset=UTF-8"); + resp.setHeader("Cache-Control", "no-store, max-age=0, no-cache, must-revalidate"); + resp.setHeader("Content-Security-Policy", "default-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'"); + resp.setDateHeader("Expires", 0); + resp.setHeader("Pragma", "no-cache"); + resp.setHeader("X-Frame-Options", "SAMEORIGIN"); + resp.setHeader("X-XSS-Protection", "1; mode=block"); + } + private void writeMessages(PrintWriter out, boolean isConfigure, String peerString) throws IOException { List<String> msgs = _manager.getMessages(); if (!msgs.isEmpty()) { -- GitLab