[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