From ad96c8498ddc85bf4abd5063f3b822767e296128 Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Mon, 22 Nov 2010 01:03:35 +0000
Subject: [PATCH] more conversion to POST

---
 .../org/klomp/snark/web/I2PSnarkServlet.java  | 102 ++++++++----------
 .../resources/themes/snark/ubergine/snark.css |  14 +++
 2 files changed, 59 insertions(+), 57 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 166bcfcc44..b9f06c8778 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
@@ -242,6 +242,13 @@ public class I2PSnarkServlet extends Default {
 
         List snarks = getSortedSnarks(req);
         String uri = req.getRequestURI();
+        boolean isForm = _manager.util().connected() || !snarks.isEmpty();
+        if (isForm) {
+            out.write("<form action=\"");
+            out.write(uri);
+            out.write("\" method=\"POST\">\n");
+            out.write("<input type=\"hidden\" name=\"nonce\" value=\"" + _nonce + "\" >\n");
+        }
         out.write(TABLE_HEADER);
         out.write("<img border=\"0\" src=\"/themes/snark/ubergine/images/status.png\"");
         out.write(" title=\"");
@@ -301,25 +308,17 @@ public class I2PSnarkServlet extends Default {
         out.write("</th>\n");
         out.write("<th align=\"center\">");
         if (_manager.util().connected()) {
-            out.write("<a href=\"" + uri + "?action=StopAll&nonce=" + _nonce +
-                      "\" title=\"");
-            out.write(_("Stop all torrents and the I2P tunnel"));
-            out.write("\">");
-            out.write("<img src=\"/themes/snark/ubergine/images/stop_all.png\" title=\"");
+            out.write("<input type=\"image\" name=\"action\" value=\"StopAll\" title=\"");
             out.write(_("Stop all torrents and the I2P tunnel"));
-            out.write("\" alt=\"");
+            out.write("\" src=\"/themes/snark/ubergine/images/stop_all.png\" alt=\"");
             out.write(_("Stop All"));
             out.write("\">");
-            out.write("</a>");
         } else if (!snarks.isEmpty()) {
-            out.write("<a href=\"" + uri + "?action=StartAll&nonce=" + _nonce +
-                      "\" title=\"");
+            out.write("<input type=\"image\" name=\"action\" value=\"StartAll\" title=\"");
             out.write(_("Start all torrents and the I2P tunnel"));
+            out.write("\" src=\"/themes/snark/ubergine/images/start_all.png\" alt=\"");
+            out.write(_("Start All"));
             out.write("\">");
-            out.write("<img src=\"/themes/snark/ubergine/images/start_all.png\" title=\"");
-            out.write(_("Start all torrents and the I2P tunnel"));
-            out.write("\" alt=\"Start All\">");
-            out.write("</a>");
         } else {
             out.write("&nbsp;");
         }
@@ -357,6 +356,8 @@ public class I2PSnarkServlet extends Default {
         }
         
         out.write("</table>");
+        if (isForm)
+            out.write("</form>\n");
     }
     
     /**
@@ -368,11 +369,9 @@ public class I2PSnarkServlet extends Default {
             // noop
             return;
         }
-        String method = req.getMethod();
-        // check in each clause until all disallow GET
+        if (!"POST".equals(req.getMethod()))
+            return;
         if ("Add".equals(action)) {
-            if (!method.equals("POST"))
-                return;
             String newFile = req.getParameter("newFile");
             String newURL = req.getParameter("newURL");
             // NOTE - newFile currently disabled in HTML form - see below
@@ -416,8 +415,8 @@ public class I2PSnarkServlet extends Default {
             } else {
                 // no file or URL specified
             }
-        } else if ("Stop".equals(action)) {
-            String torrent = req.getParameter("torrent");
+        } else if (action.startsWith("Stop_")) {
+            String torrent = action.substring(5);
             if (torrent != null) {
                 byte infoHash[] = Base64.decode(torrent);
                 if ( (infoHash != null) && (infoHash.length == 20) ) { // valid sha1
@@ -431,8 +430,8 @@ public class I2PSnarkServlet extends Default {
                     }
                 }
             }
-        } else if ("Start".equals(action)) {
-            String torrent = req.getParameter("torrent");
+        } else if (action.startsWith("Start_")) {
+            String torrent = action.substring(6);
             if (torrent != null) {
                 byte infoHash[] = Base64.decode(torrent);
                 if ( (infoHash != null) && (infoHash.length == 20) ) { // valid sha1
@@ -447,8 +446,8 @@ public class I2PSnarkServlet extends Default {
                     }
                 }
             }
-        } else if ("Remove".equals(action)) {
-            String torrent = req.getParameter("torrent");
+        } else if (action.startsWith("Remove_")) {
+            String torrent = action.substring(7);
             if (torrent != null) {
                 byte infoHash[] = Base64.decode(torrent);
                 if ( (infoHash != null) && (infoHash.length == 20) ) { // valid sha1
@@ -467,8 +466,8 @@ public class I2PSnarkServlet extends Default {
                     }
                 }
             }
-        } else if ("Delete".equals(action)) {
-            String torrent = req.getParameter("torrent");
+        } else if (action.startsWith("Delete_")) {
+            String torrent = action.substring(7);
             if (torrent != null) {
                 byte infoHash[] = Base64.decode(torrent);
                 if ( (infoHash != null) && (infoHash.length == 20) ) { // valid sha1
@@ -514,8 +513,6 @@ public class I2PSnarkServlet extends Default {
                 }
             }
         } else if ("Save".equals(action)) {
-            if (!method.equals("POST"))
-                return;
             String dataDir = req.getParameter("dataDir");
             boolean autoStart = req.getParameter("autoStart") != null;
             String seedPct = req.getParameter("seedPct");
@@ -531,8 +528,6 @@ public class I2PSnarkServlet extends Default {
             String openTrackers = req.getParameter("openTrackers");
             _manager.updateConfig(dataDir, autoStart, startupDel, seedPct, eepHost, eepPort, i2cpHost, i2cpPort, i2cpOpts, upLimit, upBW, useOpenTrackers, openTrackers);
         } else if ("Create".equals(action)) {
-            if (!method.equals("POST"))
-                return;
             String baseData = req.getParameter("baseFile");
             if (baseData != null && baseData.trim().length() > 0) {
                 File baseFile = new File(_manager.getDataDir(), baseData);
@@ -838,62 +833,55 @@ public class I2PSnarkServlet extends Default {
         out.write("</td>\n\t");
         out.write("<td align=\"center\" class=\"snarkTorrentAction " + rowClass + "\">");
         String parameters = "&nonce=" + _nonce + "&torrent=" + Base64.encode(snark.meta.getInfoHash());
+        String b64 = Base64.encode(snark.meta.getInfoHash());
         if (showPeers)
             parameters = parameters + "&p=1";
         if (isRunning) {
-            out.write("<a href=\"" + uri + "?action=Stop" + parameters
-                      + "\" title=\"");
-            out.write(_("Stop the torrent"));
-            out.write("\">");
-            out.write("<img src=\"/themes/snark/ubergine/images/stop.png\" title=\"");
+            out.write("<input type=\"image\" name=\"action\" value=\"Stop_");
+            out.write(b64);
+            out.write("\" title=\"");
             out.write(_("Stop the torrent"));
-            out.write("\" alt=\"");
+            out.write("\" src=\"/themes/snark/ubergine/images/stop.png\" alt=\"");
             out.write(_("Stop"));
             out.write("\">");
-            out.write("</a>");
         } else {
             if (isValid) {
-                out.write("<a href=\"" + uri + "?action=Start" + parameters
-                          + "\" title=\"");
+                out.write("<input type=\"image\" name=\"action\" value=\"Start_");
+                out.write(b64);
+                out.write("\" title=\"");
                 out.write(_("Start the torrent"));
-                out.write("\">");
-                out.write("<img src=\"/themes/snark/ubergine/images/start.png\" title=\"");
-                out.write(_("Start the torrent"));
-                out.write("\" alt=\"");
+                out.write("\" src=\"/themes/snark/ubergine/images/start.png\" alt=\"");
                 out.write(_("Start"));
                 out.write("\">");
-                out.write("</a>");
             }
-            out.write("<a href=\"" + uri + "?action=Remove" + parameters
-                      + "\" title=\"");
+
+            out.write("<input type=\"image\" name=\"action\" value=\"Remove_");
+            out.write(b64);
+            out.write("\" title=\"");
             out.write(_("Remove the torrent from the active list, deleting the .torrent file"));
             out.write("\" onclick=\"if (!confirm('");
             // Can't figure out how to escape double quotes inside the onclick string.
             // Single quotes in translate strings with parameters must be doubled.
             // Then the remaining single quite must be escaped
             out.write(_("Are you sure you want to delete the file \\''{0}.torrent\\'' (downloaded data will not be deleted) ?", fullFilename));
-            out.write("')) { return false; }\">");
-            out.write("<img src=\"/themes/snark/ubergine/images/remove.png\" title=\"");
-            out.write(_("Remove the torrent from the active list, deleting the .torrent file"));
-            out.write("\" alt=\"");
+            out.write("')) { return false; }\"");
+            out.write(" src=\"/themes/snark/ubergine/images/remove.png\" alt=\"");
             out.write(_("Remove"));
             out.write("\">");
-            out.write("</a>");
-            out.write("<a href=\"" + uri + "?action=Delete" + parameters
-                      + "\" title=\"");
+
+            out.write("<input type=\"image\" name=\"action\" value=\"Delete_");
+            out.write(b64);
+            out.write("\" title=\"");
             out.write(_("Delete the .torrent file and the associated data file(s)"));
             out.write("\" onclick=\"if (!confirm('");
             // Can't figure out how to escape double quotes inside the onclick string.
             // Single quotes in translate strings with parameters must be doubled.
             // Then the remaining single quite must be escaped
             out.write(_("Are you sure you want to delete the torrent \\''{0}\\'' and all downloaded data?", fullFilename));
-            out.write("')) { return false; }\">");
-            out.write("<img src=\"/themes/snark/ubergine/images/delete.png\" title=\"");
-            out.write(_("Delete the .torrent file and the associated data file(s)"));
-            out.write("\" alt=\"");
+            out.write("')) { return false; }\"");
+            out.write(" src=\"/themes/snark/ubergine/images/delete.png\" alt=\"");
             out.write(_("Delete"));
             out.write("\">");
-            out.write("</a>");
         }
         out.write("</td>\n</tr>\n");
 
diff --git a/installer/resources/themes/snark/ubergine/snark.css b/installer/resources/themes/snark/ubergine/snark.css
index 535c329549..52e9f53459 100644
--- a/installer/resources/themes/snark/ubergine/snark.css
+++ b/installer/resources/themes/snark/ubergine/snark.css
@@ -474,6 +474,20 @@ input[type=submit]:active {
      text-shadow: 0 !important;
 }
 
+input[type=image] {
+     padding: 0 !important;
+     background: #000;
+     -moz-border-radius: 0px;
+     -khtml-border-radius: 0px;
+     border-radius: 0px;
+     border: medium none;
+     margin: 0 2px;
+}
+
+input[type=image]:hover {
+     border: 1px outset #bbb;
+}
+
 input[type=text]:active, input[type=text]:hover, input.r:hover {
      background: #f60;
      color: #fff;
-- 
GitLab