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 711d3d792..b0e9c6c16 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
@@ -6,6 +6,8 @@ import java.io.PrintWriter;
import java.io.Serializable;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
+import java.net.URI;
+import java.net.URISyntaxException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Arrays;
@@ -3069,6 +3071,11 @@ public class I2PSnarkServlet extends BasicServlet {
announce = meta.getAnnounce();
if (announce == null)
announce = snark.getTrackerURL();
+ if (announce != null) {
+ // strip non-i2p trackers
+ if (!isI2PTracker(announce))
+ announce = null;
+ }
if (announce != null) {
announce = DataHelper.stripHTML(announce);
buf.append("
| ");
@@ -3078,21 +3085,29 @@ public class I2PSnarkServlet extends BasicServlet {
buf.append(" |
");
}
List> alist = meta.getAnnounceList();
+ List annlist = new ArrayList();
if (alist != null && !alist.isEmpty()) {
+ // strip non-i2p trackers
+ for (List alist2 : alist) {
+ for (String s : alist2) {
+ if (isI2PTracker(s))
+ annlist.add(s);
+ }
+ }
+ }
+ if (!annlist.isEmpty()) {
buf.append("| ");
toThemeImg(buf, "details");
buf.append(" | ")
.append(_t("Tracker List")).append(" | ");
- for (List alist2 : alist) {
+ boolean more = false;
+ for (String s : annlist) {
buf.append("");
- boolean more = false;
- for (String s : alist2) {
- if (more)
- buf.append(' ');
- else
- more = true;
- buf.append(getShortTrackerLink(DataHelper.stripHTML(s), snark.getInfoHash()));
- }
+ if (more)
+ buf.append(' ');
+ else
+ more = true;
+ buf.append(getShortTrackerLink(DataHelper.stripHTML(s), snark.getInfoHash()));
buf.append(" ");
}
buf.append(" |
\n");
@@ -3660,6 +3675,26 @@ public class I2PSnarkServlet extends BasicServlet {
return buf.toString();
}
+ /**
+ * Basic checks only, not as comprehensive as what TrackerClient does.
+ * Just to hide non-i2p trackers from the details page.
+ * @since 0.9.46
+ */
+ private static boolean isI2PTracker(String url) {
+ try {
+ URI uri = new URI(url);
+ String method = uri.getScheme();
+ if (!"http".equals(method) && !"https".equals(method))
+ return false;
+ String host = uri.getHost();
+ if (host == null || !host.endsWith(".i2p"))
+ return false;
+ } catch (URISyntaxException use) {
+ return false;
+ }
+ return true;
+ }
+
/**
* @param mime non-null
* @since 0.9.44