[tor-commits] [onionoo/master] Accept $ as a fingerprint prefix in searches.

karsten at torproject.org karsten at torproject.org
Sat Feb 25 21:23:17 UTC 2012


commit 7edb9269a4f57cd61a587e866922310f3cd1b5a8
Author: Karsten Loesing <karsten.loesing at gmx.net>
Date:   Sat Feb 18 12:38:23 2012 -0800

    Accept $ as a fingerprint prefix in searches.
    
    Implements issue #10.
---
 src/org/torproject/onionoo/ResourceServlet.java |   37 ++++++++++++++++++-----
 1 files changed, 29 insertions(+), 8 deletions(-)

diff --git a/src/org/torproject/onionoo/ResourceServlet.java b/src/org/torproject/onionoo/ResourceServlet.java
index cfff995..7ccc39d 100644
--- a/src/org/torproject/onionoo/ResourceServlet.java
+++ b/src/org/torproject/onionoo/ResourceServlet.java
@@ -175,7 +175,7 @@ public class ResourceServlet extends HttpServlet {
   }
 
   private static Pattern searchParameterPattern =
-      Pattern.compile("^[0-9a-zA-Z\\.]{1,40}$");
+      Pattern.compile("^\\$?[0-9a-fA-F]{1,40}$|^[0-9a-zA-Z\\.]{1,19}$");
   private String parseSearchParameter(String parameter) {
     if (!searchParameterPattern.matcher(parameter).matches()) {
       return null;
@@ -184,7 +184,7 @@ public class ResourceServlet extends HttpServlet {
   }
 
   private static Pattern fingerprintParameterPattern =
-      Pattern.compile("^[0-9a-zA-Z]+$");
+      Pattern.compile("^\\$[0-9a-zA-Z]{1,40}$");
   private Set<String> parseFingerprintParameters(String parameter) {
     if (!fingerprintParameterPattern.matcher(parameter).matches()) {
       return null;
@@ -239,13 +239,31 @@ public class ResourceServlet extends HttpServlet {
     pw.print("\"relays\":[");
     int written = 0;
     for (String line : this.relayLines) {
-      if (line.toLowerCase().contains("\"n\":\""
-          + searchTerm.toLowerCase()) ||
-          ("unnamed".startsWith(searchTerm.toLowerCase()) &&
-          line.startsWith("{\"f\":")) ||
-          line.contains("\"f\":\"" + searchTerm.toUpperCase()) ||
-          line.substring(line.indexOf("\"a\":[")).contains("\""
+      boolean lineMatches = false;
+      if (searchTerm.startsWith("$")) {
+        /* Search is for $-prefixed fingerprint. */
+        if (line.contains("\"f\":\""
+            + searchTerm.substring(1).toUpperCase())) {
+          /* $-prefixed fingerprint matches. */
+          lineMatches = true;
+        }
+      } else if (line.toLowerCase().contains("\"n\":\""
+          + searchTerm.toLowerCase())) {
+        /* Nickname matches. */
+        lineMatches = true;
+      } else if ("unnamed".startsWith(searchTerm.toLowerCase()) &&
+          line.startsWith("{\"f\":")) {
+        /* Nickname "Unnamed" matches. */
+        lineMatches = true;
+      } else if (line.contains("\"f\":\"" + searchTerm.toUpperCase())) {
+        /* Non-$-prefixed fingerprint matches. */
+        lineMatches = true;
+      } else if (line.substring(line.indexOf("\"a\":[")).contains("\""
           + searchTerm.toLowerCase())) {
+        /* Address matches. */
+        lineMatches = true;
+      }
+      if (lineMatches) {
         String lines = this.getFromSummaryLine(line, resourceType);
         if (lines.length() > 0) {
           pw.print((written++ > 0 ? ",\n" : "\n") + lines);
@@ -307,6 +325,9 @@ public class ResourceServlet extends HttpServlet {
 
   private void writeMatchingBridges(PrintWriter pw, String searchTerm,
       String resourceType) {
+    if (searchTerm.startsWith("$")) {
+      searchTerm = searchTerm.substring(1);
+    }
     pw.print("\"bridges\":[");
     int written = 0;
     for (String line : this.bridgeLines) {



More information about the tor-commits mailing list