commit 3f73fb13b9dbdd23f77e7274965aa2f6eea71d06 Author: Karsten Loesing karsten.loesing@gmx.net Date: Thu Jun 14 12:53:27 2012 +0200
Include bridge nicknames in documents. --- src/org/torproject/onionoo/CurrentNodes.java | 19 +++++++++++-------- src/org/torproject/onionoo/DetailDataWriter.java | 2 ++ src/org/torproject/onionoo/ResourceServlet.java | 2 +- src/org/torproject/onionoo/SummaryDataWriter.java | 3 +++ web/index.html | 11 +++++++++-- 5 files changed, 26 insertions(+), 11 deletions(-)
diff --git a/src/org/torproject/onionoo/CurrentNodes.java b/src/org/torproject/onionoo/CurrentNodes.java index 5732cb9..c2a91ec 100644 --- a/src/org/torproject/onionoo/CurrentNodes.java +++ b/src/org/torproject/onionoo/CurrentNodes.java @@ -82,6 +82,7 @@ public class CurrentNodes { + " is invalid. Exiting."); System.exit(1); } + String nickname = parts[1]; String hashedFingerprint = parts[2]; String address = parts[3]; long publishedMillis = dateTimeFormat.parse(parts[4] + " " @@ -90,8 +91,8 @@ public class CurrentNodes { int dirPort = Integer.parseInt(parts[7]); SortedSet<String> relayFlags = new TreeSet<String>( Arrays.asList(parts[8].split(","))); - this.addBridge(hashedFingerprint, address, publishedMillis, - orPort, dirPort, relayFlags); + this.addBridge(nickname, hashedFingerprint, address, + publishedMillis, orPort, dirPort, relayFlags); } } br.close(); @@ -140,6 +141,7 @@ public class CurrentNodes { + " " + consensusWeight + "\n"); } for (Node entry : this.currentBridges.values()) { + String nickname = entry.getNickname(); String fingerprint = entry.getFingerprint(); String published = dateTimeFormat.format( entry.getLastSeenMillis()); @@ -151,7 +153,7 @@ public class CurrentNodes { sb.append("," + relayFlag); } String relayFlags = sb.toString().substring(1); - bw.write("b Unnamed " + fingerprint + " " + address + " " + bw.write("b " + nickname + " " + fingerprint + " " + address + " " + published + " " + orPort + " " + dirPort + " " + relayFlags + " -1\n"); } @@ -312,24 +314,25 @@ public class CurrentNodes { private void updateBridgeNetworkStatus(BridgeNetworkStatus status) { long publishedMillis = status.getPublishedMillis(); for (NetworkStatusEntry entry : status.getStatusEntries().values()) { + String nickname = entry.getNickname(); String fingerprint = entry.getFingerprint(); String address = entry.getAddress(); int orPort = entry.getOrPort(); int dirPort = entry.getDirPort(); SortedSet<String> relayFlags = entry.getFlags(); - this.addBridge(fingerprint, address, publishedMillis, orPort, - dirPort, relayFlags); + this.addBridge(nickname, fingerprint, address, publishedMillis, + orPort, dirPort, relayFlags); } }
- public void addBridge(String fingerprint, String address, - long publishedMillis, int orPort, int dirPort, + public void addBridge(String nickname, String fingerprint, + String address, long publishedMillis, int orPort, int dirPort, SortedSet<String> relayFlags) { if (publishedMillis >= cutoff && (!this.currentBridges.containsKey(fingerprint) || this.currentBridges.get(fingerprint).getLastSeenMillis() < publishedMillis)) { - Node entry = new Node("Unnamed", fingerprint, address, + Node entry = new Node(nickname, fingerprint, address, publishedMillis, orPort, dirPort, relayFlags, -1L); this.currentBridges.put(fingerprint, entry); if (publishedMillis > this.lastPublishedMillis) { diff --git a/src/org/torproject/onionoo/DetailDataWriter.java b/src/org/torproject/onionoo/DetailDataWriter.java index cfae5ff..1e3be72 100644 --- a/src/org/torproject/onionoo/DetailDataWriter.java +++ b/src/org/torproject/onionoo/DetailDataWriter.java @@ -543,11 +543,13 @@ public class DetailDataWriter {
/* Generate network-status-specific part. */ Node entry = bridge.getValue(); + String nickname = entry.getNickname(); String running = entry.getRunning() ? "true" : "false"; String address = entry.getAddress(); int orPort = entry.getOrPort(); StringBuilder sb = new StringBuilder(); sb.append("{"version":1,\n" + + ""nickname":"" + nickname + "",\n" + ""hashed_fingerprint":"" + fingerprint + "",\n" + ""or_addresses":["" + address + ":" + orPort + ""],\n" + ""running":" + running + ","); diff --git a/src/org/torproject/onionoo/ResourceServlet.java b/src/org/torproject/onionoo/ResourceServlet.java index a85f3ec..e4f5b9f 100644 --- a/src/org/torproject/onionoo/ResourceServlet.java +++ b/src/org/torproject/onionoo/ResourceServlet.java @@ -475,7 +475,7 @@ public class ResourceServlet extends HttpServlet { /* Nickname matches. */ lineMatches = true; } else if ("unnamed".startsWith(searchTerm.toLowerCase()) && - line.startsWith("{"f":")) { + (line.startsWith("{"f":") || line.startsWith("{"h":"))) { /* Nickname "Unnamed" matches. */ lineMatches = true; } else if (line.contains(""f":"" + searchTerm.toUpperCase())) { diff --git a/src/org/torproject/onionoo/SummaryDataWriter.java b/src/org/torproject/onionoo/SummaryDataWriter.java index c438692..1391c02 100644 --- a/src/org/torproject/onionoo/SummaryDataWriter.java +++ b/src/org/torproject/onionoo/SummaryDataWriter.java @@ -68,12 +68,15 @@ public class SummaryDataWriter { + "",\n"bridges":["); written = 0; for (Node entry : this.currentBridges.values()) { + String nickname = !entry.getNickname().equals("Unnamed") ? + entry.getNickname() : null; String hashedFingerprint = entry.getFingerprint(); String running = entry.getRunning() ? "true" : "false"; if (written++ > 0) { bw.write(","); } bw.write("\n{" + + (nickname == null ? "" : ""n":"" + nickname + "",") + ""h":"" + hashedFingerprint + ""," + ""r":" + running + "}"); } diff --git a/web/index.html b/web/index.html index 93c798e..1539705 100755 --- a/web/index.html +++ b/web/index.html @@ -276,6 +276,11 @@ Required field.</li> Required field. Each array object contains the following key-value pairs: <ul> +<li><b>"nickname":</b> Bridge nickname consisting of 1–19 +alphanumerical characters. +Optional field. +Omitted if the bridge nickname is <i>"Unnamed"</i>. +<font color="blue">Added field on June 14, 2012.</font></li> <li><b>"hashed_fingerprint":</b> SHA-1 hash of the bridge fingerprint consisting of 40 upper-case hexadecimal characters. Required field.</li> @@ -603,13 +608,15 @@ of relay and/or bridge documents to be included in the response.</p> </td></tr> <tr><td><b>search</b></td><td>Return only relays with the parameter value matching the beginning of a nickname, (possibly $-prefixed) fingerprint, -or IP address, and bridges with the (possibly $-prefixed) hashed -fingerprint. +or IP address, and bridges with the nickname or (possibly $-prefixed) +hashed fingerprint. Searches are case-insensitive. Full fingerprints should always be hashed using SHA-1, regardless of searching for a relay or a bridge, in order to not accidentally leak non-hashed bridge fingerprints in the URL. <font color="blue">Parameter added on May 14, 2012.</font> +<font color="blue">Extended search to bridge nicknames on June 14, +2012.</font> </td></tr> <tr><td><b>lookup</b></td><td>Return only the relay with the parameter value matching the fingerprint or the bridge with the parameter value
tor-commits@lists.torproject.org