commit 66a1986644d919b426c4de562043cda559bca5ac Author: Karsten Loesing karsten.loesing@gmx.net Date: Fri Jan 6 19:53:54 2017 +0100
Support email addresses in qualified search terms.
More generally, accept the same characters in qualified search terms as in their parameter equivalents.
This includes the '@' sign and others in search terms like 'contact:user@domain.com', which were supported in the contact parameter but not in the search parameter before.
Fixes #10972. --- CHANGELOG.md | 2 ++ src/main/java/org/torproject/onionoo/server/ResourceServlet.java | 4 ++-- .../java/org/torproject/onionoo/server/ResourceServletTest.java | 8 ++++++++ 3 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md index d457e60..e02f36f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ - Unify the build process by adding git-submodule metrics-base in src/build and removing all centralized parts of the build process. + - Accept the same characters in qualified search terms as in their + parameter equivalents.
# Changes in version 3.1-1.0.0 - 2016-11-23 diff --git a/src/main/java/org/torproject/onionoo/server/ResourceServlet.java b/src/main/java/org/torproject/onionoo/server/ResourceServlet.java index 92d0d81..c1c5757 100644 --- a/src/main/java/org/torproject/onionoo/server/ResourceServlet.java +++ b/src/main/java/org/torproject/onionoo/server/ResourceServlet.java @@ -362,7 +362,7 @@ public class ResourceServlet extends HttpServlet {
private static Pattern searchQueryStringPattern = Pattern.compile("(?:.*[\?&])*?" // lazily skip other parameters - + "search=([0-9a-zA-Z+/\.: \$\[\]%]+)" // capture parameter + + "search=([\p{Graph} &&[^&]]+)" // capture parameter + "(?:&.*)*"); // skip remaining parameters
private static Pattern searchParameterPattern = @@ -370,7 +370,7 @@ public class ResourceServlet extends HttpServlet { + "^[0-9a-zA-Z+/]{1,27}$|" /* Base64 fingerprint. */ + "^[0-9a-zA-Z\.]{1,19}$|" /* Nickname or IPv4 address. */ + "^\[[0-9a-fA-F:\.]{1,39}\]?$|" /* IPv6 address. */ - + "^[a-zA-Z_]+:[0-9a-zA-Z_,-]+$" /* Qualified search term. */); + + "^[a-zA-Z_]+:\p{Graph}+$" /* Qualified search term. */);
protected static String[] parseSearchParameters(String queryString) { Matcher searchQueryStringMatcher = searchQueryStringPattern.matcher( diff --git a/src/test/java/org/torproject/onionoo/server/ResourceServletTest.java b/src/test/java/org/torproject/onionoo/server/ResourceServletTest.java index ac466c9..93c3a34 100644 --- a/src/test/java/org/torproject/onionoo/server/ResourceServletTest.java +++ b/src/test/java/org/torproject/onionoo/server/ResourceServletTest.java @@ -869,6 +869,14 @@ public class ResourceServletTest { this.assertErrorStatusCode("/summary?search=limit:1", 400); }
+ + @Test() + public void testSearchEmailAddress() { + this.assertSummaryDocument( + "/summary?search=contact:tor+steven.murdoch@cl.cam.ac.uk", 1, + new String[] { "TimMayTribute" }, 0, null); + } + @Test() public void testLookupFingerprint() { this.assertSummaryDocument(
tor-commits@lists.torproject.org