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(" "); } @@ -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