diff options
author | jonmv <venstad@gmail.com> | 2023-09-28 17:17:09 +0200 |
---|---|---|
committer | jonmv <venstad@gmail.com> | 2023-09-28 17:17:09 +0200 |
commit | 1b0cfae1d7c756c2caeef468d5d2725f81493fdc (patch) | |
tree | 7f5c9e89198ee71f8e3d2b4faa94659026d3ae2b /jdisc-security-filters | |
parent | a1bd65e6be24f8073c6a5cc826d291a3571ee676 (diff) |
Group fingerprints by token id
Diffstat (limited to 'jdisc-security-filters')
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)); } |