Commit 49cdff77 authored by Karsten Loesing's avatar Karsten Loesing
Browse files

Support queries by comma-separated list of flags.

Implements #23914.
parent 52494a7f
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
# 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
+13 −8
Original line number Diff line number Diff line
@@ -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 {
+4 −4
Original line number Diff line number Diff line
@@ -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}$");
+26 −0
Original line number Diff line number Diff line
@@ -1204,6 +1204,32 @@ public class ResourceServletTest {
        "/summary?flag=Cool", 0, null, 0, null);
  }

  @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(