diff options
| author | Karsten Loesing <karsten.loesing@gmx.net> | 2018-07-24 08:14:33 +0200 |
|---|---|---|
| committer | Karsten Loesing <karsten.loesing@gmx.net> | 2018-07-24 08:14:33 +0200 |
| commit | 49cdff77c4ca95b8a8f4d48b0d8374f4c7b4ad33 (patch) | |
| tree | 6a602f5cd79f72997571b468f4ca076373ca2f3c | |
| parent | 52494a7f343baa1d0ae84078ad23dac52e616c1d (diff) | |
Support queries by comma-separated list of flags.task-23914
Implements #23914.
4 files changed, 49 insertions, 12 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index cd11502..ffdca74 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +# Changes in version 6.2-1.16.0 - 2018-07-?? + + * Medium changes + - Extend flag parameter to support comma-separated list of flags. + + # Changes in version 6.1-1.15.0 - 2018-07-16 * Medium changes diff --git a/src/main/java/org/torproject/onionoo/server/RequestHandler.java b/src/main/java/org/torproject/onionoo/server/RequestHandler.java index b9d9b23..2c3932d 100644 --- a/src/main/java/org/torproject/onionoo/server/RequestHandler.java +++ b/src/main/java/org/torproject/onionoo/server/RequestHandler.java @@ -78,10 +78,10 @@ public class RequestHandler { this.as = as; } - private String flag; + private String[] flags; - public void setFlag(String flag) { - this.flag = flag; + public void setFlag(String[] flags) { + this.flags = flags; } private String[] contact; @@ -177,7 +177,7 @@ public class RequestHandler { this.filterByFingerprint(); this.filterByCountryCode(); this.filterByAsNumber(); - this.filterByFlag(); + this.filterByFlags(); this.filterNodesByFirstSeenDays(); this.filterNodesByLastSeenDays(); this.filterByContact(); @@ -424,12 +424,17 @@ public class RequestHandler { this.filteredBridges.clear(); } - private void filterByFlag() { - if (this.flag == null) { - /* Not filtering by relay flag. */ + private void filterByFlags() { + if (null == this.flags || 0 == this.flags.length) { + /* Not filtering by relay flags. */ return; } - String flag = this.flag.toLowerCase(); + for (String flag : this.flags) { + this.filterByFlag(flag); + } + } + + private void filterByFlag(String flag) { if (!this.nodeIndex.getRelaysByFlag().containsKey(flag)) { this.filteredRelays.clear(); } else { diff --git a/src/main/java/org/torproject/onionoo/server/ResourceServlet.java b/src/main/java/org/torproject/onionoo/server/ResourceServlet.java index e119518..817611e 100644 --- a/src/main/java/org/torproject/onionoo/server/ResourceServlet.java +++ b/src/main/java/org/torproject/onionoo/server/ResourceServlet.java @@ -249,7 +249,7 @@ public class ResourceServlet extends HttpServlet { rh.setAs(asNumberParameter); } if (parameterMap.containsKey("flag")) { - String flagParameter = this.parseFlagParameter( + String[] flagParameter = this.parseFlagParameter( parameterMap.get("flag")); if (flagParameter == null) { response.sendError(HttpServletResponse.SC_BAD_REQUEST); @@ -511,14 +511,14 @@ public class ResourceServlet extends HttpServlet { } private static Pattern flagPattern = - Pattern.compile("^[a-zA-Z0-9]{1,20}$"); + Pattern.compile("^[a-zA-Z0-9,]*$"); - private String parseFlagParameter(String parameter) { + private String[] parseFlagParameter(String parameter) { if (!flagPattern.matcher(parameter).matches()) { /* Flag contains illegal character(s). */ return null; } - return parameter; + return parameter.toLowerCase().split(","); } private static Pattern daysPattern = Pattern.compile("^[0-9-]{1,10}$"); diff --git a/src/test/java/org/torproject/onionoo/server/ResourceServletTest.java b/src/test/java/org/torproject/onionoo/server/ResourceServletTest.java index 2bc8203..2d18453 100644 --- a/src/test/java/org/torproject/onionoo/server/ResourceServletTest.java +++ b/src/test/java/org/torproject/onionoo/server/ResourceServletTest.java @@ -1205,6 +1205,32 @@ public class ResourceServletTest { } @Test(timeout = 100) + public void testFlagRunningAndFast() { + this.assertSummaryDocument( + "/summary?flag=Running,Fast", 2, + new String[] { "Ferrari458", "TimMayTribute" }, 0, null); + } + + @Test(timeout = 100) + public void testFlagRunningAndFastAndRunning() { + this.assertSummaryDocument( + "/summary?flag=Running,Fast,Running", 2, + new String[] { "Ferrari458", "TimMayTribute" }, 0, null); + } + + @Test(timeout = 100) + public void testFlagRunningAndAwesome() { + this.assertSummaryDocument( + "/summary?flag=Running,Awesome", 0, null, 0, null); + } + + @Test(timeout = 100) + public void testFlagRunningAndValidUpperCase() { + this.assertSummaryDocument( + "/summary?flag=RUNNING,VALID", 3, null, 1, null); + } + + @Test(timeout = 100) public void testFirstSeenDaysZeroToTwo() { this.assertSummaryDocument( "/summary?first_seen_days=0-2", 0, null, 0, null); |
