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 1aa831d5b0..ce93fb93ec 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java +++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java @@ -188,10 +188,14 @@ public class I2PSnarkServlet extends DefaultServlet { } else { String base = URIUtil.addPaths(req.getRequestURI(), "/"); String listing = getListHTML(resource, base, true, method.equals("POST") ? req.getParameterMap() : null); - if (listing != null) + if (method.equals("POST")) { + // P-R-G + sendRedirect(req, resp, ""); + } else if (listing != null) { resp.getWriter().write(listing); - else // shouldn't happen + } else { // shouldn't happen resp.sendError(404); + } } } else { super.service(req, resp); @@ -209,6 +213,9 @@ public class I2PSnarkServlet extends DefaultServlet { processRequest(req); else // nonce is constant, shouldn't happen _manager.addMessage("Please retry form submission (bad nonce)"); + // P-R-G (or G-R-G to hide the params from the address bar) + sendRedirect(req, resp, peerString); + return; } PrintWriter out = resp.getWriter(); @@ -807,6 +814,22 @@ public class I2PSnarkServlet extends DefaultServlet { } } + /** + * Redirect a POST to a GET (P-R-G), preserving the peer string + * @since 0.9.5 + */ + private void sendRedirect(HttpServletRequest req, HttpServletResponse resp, String p) throws IOException { + String url = req.getRequestURL().toString(); + StringBuilder buf = new StringBuilder(128); + if (url.endsWith("_post")) + url = url.substring(0, url.length() - 5); + buf.append(url); + if (p.length() > 0) + buf.append('?').append(p); + resp.setHeader("Location", buf.toString()); + resp.sendError(302, "Moved"); + } + /** @since 0.9 */ private void processTrackerForm(String action, HttpServletRequest req) { if (action.equals(_("Delete selected")) || action.equals(_("Save tracker configuration"))) { @@ -1768,10 +1791,11 @@ public class I2PSnarkServlet extends DefaultServlet { out.write(_("I2CP options")); out.write(":