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 a72e2cd651ea9d557b614216dffa1eec64d6b577..8cbd02304a4a4c0cc0e014e956726c8dd2cb7b8b 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/NetDbHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/NetDbHelper.java @@ -5,6 +5,8 @@ import net.i2p.data.DataHelper; public class NetDbHelper extends HelperBase { private String _routerPrefix; + private String _version; + private String _country; private int _full; private boolean _lease; private boolean _debug; @@ -33,6 +35,18 @@ public class NetDbHelper extends HelperBase { _routerPrefix = DataHelper.stripHTML(r); // XSS } + /** @since 0.9.21 */ + public void setVersion(String v) { + if (v != null) + _version = DataHelper.stripHTML(v); // XSS + } + + /** @since 0.9.21 */ + public void setCountry(String c) { + if (c != null) + _country = DataHelper.stripHTML(c); // XSS + } + public void setFull(String f) { try { _full = Integer.parseInt(f); @@ -59,8 +73,8 @@ public class NetDbHelper extends HelperBase { NetDbRenderer renderer = new NetDbRenderer(_context); try { renderNavBar(); - if (_routerPrefix != null) - renderer.renderRouterInfoHTML(_out, _routerPrefix); + if (_routerPrefix != null || _version!= null || _country != null) + renderer.renderRouterInfoHTML(_out, _routerPrefix, _version, _country); else if (_lease) renderer.renderLeaseSetHTML(_out, _debug); else 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 01e4659878bb51ce3e727dafc13805ff9692dc82..89b4a7000e16325bf202af5f943f90605ea23aba 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java @@ -78,7 +78,14 @@ public class NetDbRenderer { } } - public void renderRouterInfoHTML(Writer out, String routerPrefix) throws IOException { + /** + * One String must be non-null + * + * @param routerPrefix may be null. "." for our router only + * @param version may be null + * @param country may be null + */ + public void renderRouterInfoHTML(Writer out, String routerPrefix, String version, String country) throws IOException { StringBuilder buf = new StringBuilder(4*1024); if (".".equals(routerPrefix)) { renderRouterInfo(buf, _context.router().getRouterInfo(), true, true); @@ -87,13 +94,23 @@ public class NetDbRenderer { Set<RouterInfo> routers = _context.netDb().getRouters(); for (RouterInfo ri : routers) { Hash key = ri.getIdentity().getHash(); - if (key.toBase64().startsWith(routerPrefix)) { + if ((routerPrefix != null && key.toBase64().startsWith(routerPrefix)) || + (version != null && version.equals(ri.getVersion())) || + (country != null && country.equals(_context.commSystem().getCountry(key)))) { renderRouterInfo(buf, ri, false, true); notFound = false; } } - if (notFound) - buf.append(_("Router") + ' ').append(routerPrefix).append(' ' + _("not found in network database") ); + if (notFound) { + buf.append(_("Router")).append(' '); + if (routerPrefix != null) + buf.append(routerPrefix); + else if (version != null) + buf.append(version); + else if (country != null) + buf.append(country); + buf.append(' ').append(_("not found in network database")); + } } out.write(buf.toString()); out.flush(); @@ -320,8 +337,9 @@ public class NetDbRenderer { buf.append("<tr><th>" + _("Version") + "</th><th>" + _("Count") + "</th></tr>\n"); for (String routerVersion : versionList) { int num = versions.count(routerVersion); - buf.append("<tr><td align=\"center\">").append(DataHelper.stripHTML(routerVersion)); - buf.append("</td><td align=\"center\">").append(num).append("</td></tr>\n"); + String ver = DataHelper.stripHTML(routerVersion); + buf.append("<tr><td align=\"center\"><a href=\"/netdb?v=").append(ver).append("\">").append(ver); + buf.append("</a></td><td align=\"center\">").append(num).append("</td></tr>\n"); } buf.append("</table>\n"); } @@ -353,9 +371,9 @@ public class NetDbRenderer { for (String country : countryList) { int num = countries.count(country); buf.append("<tr><td><img height=\"11\" width=\"16\" alt=\"").append(country.toUpperCase(Locale.US)).append("\""); - buf.append(" src=\"/flags.jsp?c=").append(country).append("\"> "); + buf.append(" src=\"/flags.jsp?c=").append(country).append("\"> <a href=\"/netdb?c=").append(country).append("\">"); buf.append(getTranslatedCountry(country)); - buf.append("</td><td align=\"center\">").append(num).append("</td></tr>\n"); + buf.append("</a></td><td align=\"center\">").append(num).append("</td></tr>\n"); } buf.append("</table>\n"); } diff --git a/apps/routerconsole/jsp/netdb.jsp b/apps/routerconsole/jsp/netdb.jsp index ccbbccfee78befa1abf42a719c5ebda8b5bc8753..15231ec852428e670abf5f5c0026b28359eff9b5 100644 --- a/apps/routerconsole/jsp/netdb.jsp +++ b/apps/routerconsole/jsp/netdb.jsp @@ -23,5 +23,7 @@ <jsp:setProperty name="netdbHelper" property="full" value="<%=request.getParameter(\"f\")%>" /> <jsp:setProperty name="netdbHelper" property="router" value="<%=request.getParameter(\"r\")%>" /> <jsp:setProperty name="netdbHelper" property="lease" value="<%=request.getParameter(\"l\")%>" /> + <jsp:setProperty name="netdbHelper" property="version" value="<%=request.getParameter(\"v\")%>" /> + <jsp:setProperty name="netdbHelper" property="country" value="<%=request.getParameter(\"c\")%>" /> <jsp:getProperty name="netdbHelper" property="netDbSummary" /> </div></div></body></html>