aboutsummaryrefslogtreecommitdiffstats
path: root/jdisc-security-filters
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2023-09-28 17:17:09 +0200
committerjonmv <venstad@gmail.com>2023-09-28 17:17:09 +0200
commit1b0cfae1d7c756c2caeef468d5d2725f81493fdc (patch)
tree7f5c9e89198ee71f8e3d2b4faa94659026d3ae2b /jdisc-security-filters
parenta1bd65e6be24f8073c6a5cc826d291a3571ee676 (diff)
Group fingerprints by token id
Diffstat (limited to 'jdisc-security-filters')
-rw-r--r--jdisc-security-filters/src/main/java/com/yahoo/jdisc/http/filter/security/cloud/CloudTokenDataPlaneHandler.java32
-rw-r--r--jdisc-security-filters/src/test/java/com/yahoo/jdisc/http/filter/security/cloud/CloudTokenDataPlaneHandlerTest.java2
2 files changed, 27 insertions, 7 deletions
diff --git a/jdisc-security-filters/src/main/java/com/yahoo/jdisc/http/filter/security/cloud/CloudTokenDataPlaneHandler.java b/jdisc-security-filters/src/main/java/com/yahoo/jdisc/http/filter/security/cloud/CloudTokenDataPlaneHandler.java
index 88a2e3b5a00..09cf2abdbd3 100644
--- a/jdisc-security-filters/src/main/java/com/yahoo/jdisc/http/filter/security/cloud/CloudTokenDataPlaneHandler.java
+++ b/jdisc-security-filters/src/main/java/com/yahoo/jdisc/http/filter/security/cloud/CloudTokenDataPlaneHandler.java
@@ -6,30 +6,50 @@ import com.yahoo.container.jdisc.HttpRequest;
import com.yahoo.container.jdisc.HttpResponse;
import com.yahoo.container.jdisc.ThreadedHttpRequestHandler;
import com.yahoo.jdisc.http.filter.security.cloud.config.CloudTokenDataPlaneFilterConfig;
+import com.yahoo.jdisc.http.filter.security.cloud.config.CloudTokenDataPlaneFilterConfig.Clients.Tokens;
import com.yahoo.restapi.SlimeJsonResponse;
+import com.yahoo.slime.Cursor;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.TreeSet;
import java.util.concurrent.Executor;
+import static java.util.stream.Collectors.flatMapping;
+import static java.util.stream.Collectors.groupingBy;
+import static java.util.stream.Collectors.toCollection;
+import static java.util.stream.Collectors.toList;
+import static java.util.stream.Collectors.toMap;
+
/**
* @author jonmv
*/
public class CloudTokenDataPlaneHandler extends ThreadedHttpRequestHandler {
- private final List<String> fingerprints;
+ private final Map<String, Set<String>> tokens;
@Inject
public CloudTokenDataPlaneHandler(CloudTokenDataPlaneFilterConfig config, Executor executor) {
super(executor);
- fingerprints = config.clients().stream()
- .flatMap(client -> client.tokens().stream())
- .flatMap(token -> token.fingerprints().stream())
- .distinct().sorted().toList();
+ tokens = new TreeMap<>(config.clients().stream()
+ .flatMap(client -> client.tokens().stream())
+ .collect(groupingBy(Tokens::id,
+ flatMapping(token -> token.fingerprints().stream(),
+ toCollection(TreeSet::new)))));
}
@Override
public HttpResponse handle(HttpRequest request) {
- return new SlimeJsonResponse() {{ fingerprints.forEach(slime.setObject().setArray("fingerprints")::addString); }};
+ return new SlimeJsonResponse() {{
+ Cursor tokensArray = slime.setObject().setArray("tokens");
+ tokens.forEach((id, fingerprints) -> {
+ Cursor tokenObject = tokensArray.addObject();
+ tokenObject.setString("id", id);
+ fingerprints.forEach(tokenObject.setArray("fingerprints")::addString);
+ });
+ }};
}
}
diff --git a/jdisc-security-filters/src/test/java/com/yahoo/jdisc/http/filter/security/cloud/CloudTokenDataPlaneHandlerTest.java b/jdisc-security-filters/src/test/java/com/yahoo/jdisc/http/filter/security/cloud/CloudTokenDataPlaneHandlerTest.java
index f4a57f81d0f..c066dae6dca 100644
--- a/jdisc-security-filters/src/test/java/com/yahoo/jdisc/http/filter/security/cloud/CloudTokenDataPlaneHandlerTest.java
+++ b/jdisc-security-filters/src/test/java/com/yahoo/jdisc/http/filter/security/cloud/CloudTokenDataPlaneHandlerTest.java
@@ -49,7 +49,7 @@ public class CloudTokenDataPlaneHandlerTest {
assertEquals(200,
response.getStatus());
assertEquals("""
- {"fingerprints":["index","middle","pinky","ring","thumb","toasty"]}""",
+ {"tokens":[{"id":"id1","fingerprints":["index","middle","pinky","ring","thumb"]},{"id":"id2","fingerprints":["toasty"]}]}""",
new ByteArrayOutputStream() {{ response.render(this); }}.toString(UTF_8));
}