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 338eccfaa1..f317f4bf19 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(""); _out.write(buf.toString()); } + + /** + * @since 0.9.28 + */ + private void renderLookupForm() throws IOException { + _out.write("

Pick One

\n" + + "Caps e.g. f or XOfR
\n" + + "Country code e.g. ru
\n" + + "Family
\n" + + "Hash prefix
\n" + + "IP IPv4 or IPv6, /24,/16,/8 suffixes optional for IPv4
\n" + + "Version
\n" + + "

Add Sybil analysis (must pick one above):

\n" + + "Sybil close to Router hash, dest hash, b32, or from address book
\n" + + "or Sybil close to this router
" + + "

" + + "
\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 68f6064b41..ee0a88788a 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 9ce3419986..dcd9dd292f 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 0a8f862c45..18a83ea049 100644 --- a/apps/routerconsole/jsp/netdb.jsp +++ b/apps/routerconsole/jsp/netdb.jsp @@ -29,5 +29,6 @@ " /> " /> " /> + " />