diff --git a/apps/routerconsole/java/src/net/i2p/router/web/NetDbHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/NetDbHelper.java index 338eccfaa1f0c28389b1762b5caab3f1ee1329cc..f317f4bf19c7061f4893df01731060d8de00979c 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/NetDbHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/NetDbHelper.java @@ -21,7 +21,8 @@ public class NetDbHelper extends HelperBase { _x("All Routers with Full Stats"), // 4 "LeaseSet Debug", // 5 _x("LeaseSets"), // 6 - "Sybil" }; // 7 + "Sybil", // 7 + "Advanced Lookup" }; // 8 private static final String links[] = {"", // 0 @@ -31,40 +32,41 @@ public class NetDbHelper extends HelperBase { "?f=1", // 4 "?l=2", // 5 "?l=1", // 6 - "?f=3" }; // 7 + "?f=3", // 7 + "?f=4" }; // 8 public void setRouter(String r) { - if (r != null) + if (r != null && r.length() > 0) _routerPrefix = DataHelper.stripHTML(r); // XSS } /** @since 0.9.21 */ public void setVersion(String v) { - if (v != null) + if (v != null && v.length() > 0) _version = DataHelper.stripHTML(v); // XSS } /** @since 0.9.21 */ public void setCountry(String c) { - if (c != null) + if (c != null && c.length() > 0) _country = DataHelper.stripHTML(c); // XSS } /** @since 0.9.28 */ public void setFamily(String c) { - if (c != null) + if (c != null && c.length() > 0) _family = DataHelper.stripHTML(c); // XSS } /** @since 0.9.28 */ public void setCaps(String c) { - if (c != null) + if (c != null && c.length() > 0) _caps = DataHelper.stripHTML(c); // XSS } /** @since 0.9.28 */ public void setIp(String c) { - if (c != null) + if (c != null && c.length() > 0) _ip = DataHelper.stripHTML(c); // XSS } @@ -74,6 +76,14 @@ public class NetDbHelper extends HelperBase { _sybil = DataHelper.stripHTML(c); // XSS } + /** For form, same as above but with a length check + * @since 0.9.28 + */ + public void setSybil2(String c) { + if (c != null && c.length() > 0) + _sybil = DataHelper.stripHTML(c); // XSS + } + public void setFull(String f) { try { _full = Integer.parseInt(f); @@ -108,6 +118,8 @@ public class NetDbHelper extends HelperBase { renderer.renderLeaseSetHTML(_out, _debug); else if (_full == 3) (new SybilRenderer(_context)).getNetDbSummary(_out); + else if (_full == 4) + renderLookupForm(); else renderer.renderStatusHTML(_out, _full); } catch (IOException ioe) { @@ -126,7 +138,8 @@ public class NetDbHelper extends HelperBase { return 6; if (".".equals(_routerPrefix)) return 1; - if (_routerPrefix != null) + if (_routerPrefix != null || _version != null || _country != null || + _family != null || _caps != null || _ip != null || _sybil != null) return 2; if (_full == 2) return 3; @@ -134,6 +147,8 @@ public class NetDbHelper extends HelperBase { return 4; if (_full == 3) return 7; + if (_full == 4) + return 8; return 0; } @@ -152,7 +167,7 @@ public class NetDbHelper extends HelperBase { for (int i = 0; i < titles.length; i++) { if (i == 2 && tab != 2) continue; // can't nav to lookup - if ((i == 5 || i == 7) && !_context.getBooleanProperty(PROP_ADVANCED)) + if ((i == 5 || i == 7 || i == 8) && !_context.getBooleanProperty(PROP_ADVANCED)) continue; if (i == tab) { // we are there @@ -175,4 +190,22 @@ public class NetDbHelper extends HelperBase { buf.append("</div>"); _out.write(buf.toString()); } + + /** + * @since 0.9.28 + */ + private void renderLookupForm() throws IOException { + _out.write("<form action=\"/netdb\" method=\"GET\"><p><b>Pick One</b></p>\n" + + "Caps <input type=\"text\" name=\"caps\">e.g. f or XOfR<br>\n" + + "Country code <input type=\"text\" name=\"c\">e.g. ru<br>\n" + + "Family <input type=\"text\" name=\"fam\"><br>\n" + + "Hash prefix <input type=\"text\" name=\"r\"><br>\n" + + "IP <input type=\"text\" name=\"ip\">IPv4 or IPv6, /24,/16,/8 suffixes optional for IPv4<br>\n" + + "Version <input type=\"text\" name=\"v\"><br>\n" + + "<p><b>Add Sybil analysis (must pick one above):</b></p>\n" + + "Sybil close to <input type=\"text\" name=\"sybil2\">Router hash, dest hash, b32, or from address book<br>\n" + + "or Sybil close to this router <input type=\"checkbox\" class=\"optbox\" value=\"1\" name=\"sybil\"><br>" + + "<p><input type=\"submit\" class=\"search\" value=\"Lookup\"></p>" + + "</form>\n"); + } } diff --git a/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java index 68f6064b4199311970a3935e1e6a847c9ce75006..ee0a88788aadac3f23f17de8cf725b36df0cc9c3 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java @@ -107,7 +107,7 @@ class NetDbRenderer { ipMode = 3; } for (int i = 0; i < ipMode; i++) { - int last = ip.lastIndexOf('.'); + int last = ip.substring(0, ip.length() - 1).lastIndexOf('.'); if (last > 0) ip = ip.substring(0, last + 1); } diff --git a/apps/routerconsole/java/src/net/i2p/router/web/SybilRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/SybilRenderer.java index 9ce341998683e8a677c0fb697c269aa99c4a465f..dcd9dd292f743f936070038e8073cee69b0d4847 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/SybilRenderer.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/SybilRenderer.java @@ -75,6 +75,7 @@ class SybilRenderer { private static final double POINTS_BAD_VERSION = 50.0; private static final double POINTS_UNREACHABLE = 4.0; private static final double POINTS_NEW = 4.0; + private static final double POINTS_BANLIST = 25.0; public SybilRenderer(RouterContext ctx) { _context = ctx; @@ -638,6 +639,8 @@ class SybilRenderer { RateAverages ra = RateAverages.getTemp(); for (RouterInfo info : ris) { Hash h = info.getHash(); + if (_context.banlist().isBanlisted(h)) + addPoints(points, h, POINTS_BANLIST, "Banlisted"); PeerProfile prof = _context.profileOrganizer().getProfileNonblocking(h); if (prof != null) { long heard = prof.getFirstHeardAbout(); diff --git a/apps/routerconsole/jsp/netdb.jsp b/apps/routerconsole/jsp/netdb.jsp index 0a8f862c457bfaa298282e72afa4d375e2262a0a..18a83ea049bc78c3d2a3b838700e6da990219fb0 100644 --- a/apps/routerconsole/jsp/netdb.jsp +++ b/apps/routerconsole/jsp/netdb.jsp @@ -29,5 +29,6 @@ <jsp:setProperty name="netdbHelper" property="caps" value="<%=request.getParameter(\"caps\")%>" /> <jsp:setProperty name="netdbHelper" property="ip" value="<%=request.getParameter(\"ip\")%>" /> <jsp:setProperty name="netdbHelper" property="sybil" value="<%=request.getParameter(\"sybil\")%>" /> + <jsp:setProperty name="netdbHelper" property="sybil2" value="<%=request.getParameter(\"sybil2\")%>" /> <jsp:getProperty name="netdbHelper" property="netDbSummary" /> </div></div></body></html>