From e2acc9fdd236b61851ad947feecad57b8e5dec99 Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Sat, 3 Mar 2012 18:58:31 +0000
Subject: [PATCH]   * i2psnark:     - CSS tweaks     - Ajax fixes     - Move js
 to console in prep for merging w/ homepage

---
 apps/i2psnark/java/build.xml                   |  6 +-----
 .../org/klomp/snark/web/I2PSnarkServlet.java   | 18 +++++++++++++-----
 .../jsp/js/ajax.js}                            | 12 ++++--------
 3 files changed, 18 insertions(+), 18 deletions(-)
 rename apps/{i2psnark/js/i2psnark.js => routerconsole/jsp/js/ajax.js} (71%)

diff --git a/apps/i2psnark/java/build.xml b/apps/i2psnark/java/build.xml
index 3065ed9bc3..94dd809b6e 100644
--- a/apps/i2psnark/java/build.xml
+++ b/apps/i2psnark/java/build.xml
@@ -99,14 +99,10 @@
         <copy todir="build/icons/.icons" >
             <fileset dir="../icons/" />
         </copy>
-        <copy todir="build/js/.js" >
-            <fileset dir="../js/" />
-        </copy>
         <war destfile="../i2psnark.war" webxml="../web.xml" >
           <!-- include only the web stuff, as of 0.7.12 the router will add i2psnark.jar to the classpath for the war -->
           <classes dir="./build/obj" includes="**/web/*.class" />
             <fileset dir="build/icons/" />
-            <fileset dir="build/js/" />
             <manifest>
                 <attribute name="Implementation-Version" value="${full.version}" />
                 <attribute name="Built-By" value="${build.built-by}" />
@@ -119,7 +115,7 @@
     
     <target name="warUpToDate">
         <uptodate property="war.uptodate" targetfile="../i2psnark.war" >
-            <srcfiles dir= "." includes="build/obj/org/klomp/snark/web/*.class ../icons/* ../js/* ../web.xml" />
+            <srcfiles dir= "." includes="build/obj/org/klomp/snark/web/*.class ../icons/* ../web.xml" />
         </uptodate>
     </target>
     
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 5e3aa5f2db..24094515c5 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
@@ -158,6 +158,8 @@ public class I2PSnarkServlet extends Default {
             resp.setCharacterEncoding("UTF-8");
             resp.setContentType("text/html; charset=UTF-8");
             PrintWriter out = resp.getWriter();
+            //if (_log.shouldLog(Log.DEBUG))
+            //    _manager.addMessage((_context.clock().now() / 1000) + " xhr1 p=" + req.getParameter("p"));
             writeMessages(out);
             writeTorrents(out, req);
             return;
@@ -204,7 +206,8 @@ public class I2PSnarkServlet extends Default {
         
         String peerParam = req.getParameter("p");
         String peerString;
-        if (peerParam == null || !_manager.util().connected()) {
+        if (peerParam == null || (!_manager.util().connected()) ||
+            peerParam.replaceAll("[a-zA-Z0-9~=-]", "").length() > 0) {  // XSS
             peerString = "";
         } else {
             peerString = "?p=" + peerParam;
@@ -223,15 +226,20 @@ public class I2PSnarkServlet extends Default {
         int delay = 0;
         if (!isConfigure) {
             delay = _manager.getRefreshDelaySeconds();
-            if (delay > 0)
+            if (delay > 0) {
                 //out.write("<meta http-equiv=\"refresh\" content=\"" + delay + ";/i2psnark/" + peerString + "\">\n");
-                out.write("<script src=\"/i2psnark/.js/i2psnark.js\" type=\"text/javascript\"></script>\n");
+                out.write("<script src=\"/js/ajax.js\" type=\"text/javascript\"></script>\n" +
+                          "<script type=\"text/javascript\">\n"  +
+                          "function requestAjax1() { ajax(\"/i2psnark/.ajax/xhr1.html" + peerString + "\", \"mainsection\", " + (delay*1000) + "); }\n" +
+                          "function initAjax(delayMs) { setTimeout(requestAjax1, " + (delay*1000) +");  }\n"  +
+                          "</script>\n");
+            }
         }
         out.write(HEADER_A + _themePath + HEADER_B + "</head>\n");
         if (isConfigure || delay <= 0)
             out.write("<body>");
         else
-            out.write("<body onload=\"initAjax(" + (delay * 1000) + ")\">");
+            out.write("<body onload=\"initAjax()\">");
         out.write("<center>");
         if (isConfigure) {
             out.write("<div class=\"snarknavbar\"><a href=\"/i2psnark/\" title=\"");
@@ -304,7 +312,6 @@ public class I2PSnarkServlet extends Default {
         String peerParam = req.getParameter("p");
 
         List snarks = getSortedSnarks(req);
-        String uri = req.getRequestURI();
         boolean isForm = _manager.util().connected() || !snarks.isEmpty();
         if (isForm) {
             out.write("<form action=\"_post\" method=\"POST\">\n");
@@ -418,6 +425,7 @@ public class I2PSnarkServlet extends Default {
             out.write("&nbsp;");
         }
         out.write("</th></tr></thead>\n");
+        String uri = "/i2psnark/";
         for (int i = 0; i < snarks.size(); i++) {
             Snark snark = (Snark)snarks.get(i);
             boolean showDebug = "2".equals(peerParam);
diff --git a/apps/i2psnark/js/i2psnark.js b/apps/routerconsole/jsp/js/ajax.js
similarity index 71%
rename from apps/i2psnark/js/i2psnark.js
rename to apps/routerconsole/jsp/js/ajax.js
index ba0e3f9115..dab3164a09 100644
--- a/apps/i2psnark/js/i2psnark.js
+++ b/apps/routerconsole/jsp/js/ajax.js
@@ -1,9 +1,8 @@
-//var page = "home";
-function ajax(url,target) {
+function ajax(url, target, refresh) {
   // native XMLHttpRequest object
   if (window.XMLHttpRequest) {
     req = new XMLHttpRequest();
-    req.onreadystatechange = function() {ajaxDone(target);};
+    req.onreadystatechange = function() {ajaxDone(url, target, refresh);};
     req.open("GET", url, true);
     req.send(null);
     // IE/Windows ActiveX version
@@ -15,10 +14,9 @@ function ajax(url,target) {
       req.send(null);
     }
   }
-  //setTimeout("ajax(page,'scriptoutput')", 5000);
 }
 
-function ajaxDone(target) {
+function ajaxDone(url, target, refresh) {
   // only if req is "loaded"
   if (req.readyState == 4) {
     // only if "OK"
@@ -30,8 +28,6 @@ function ajaxDone(target) {
       document.getElementById(target).innerHTML="<b>Router is down</b>";
       document.getElementById("lowersection").style.display="none";
     }
+    setTimeout(function() {ajax(url, target, refresh);}, refresh);
   }
 }
-
-function requestAjax1() { ajax("/i2psnark/.ajax/xhr1.html", "mainsection"); }
-function initAjax(delayMs) { setInterval(requestAjax1, delayMs);  }
-- 
GitLab