1 package com.atlassian.asap.core.server.filter;
2
3 import com.atlassian.asap.api.Jwt;
4
5 import java.util.Map;
6 import java.util.Set;
7 import java.util.function.Predicate;
8
9 import static java.util.function.Function.identity;
10 import static java.util.stream.Collectors.toMap;
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 public class IssuerAndSubjectAwareRequestAuthorizationFilter extends RulesAwareRequestAuthorizationFilter {
27 public IssuerAndSubjectAwareRequestAuthorizationFilter(Map<String, Predicate<String>> issuersAndSubjectChecks) {
28 super(toJwtRules(issuersAndSubjectChecks));
29 }
30
31
32
33
34
35
36
37
38
39
40 public static IssuerAndSubjectAwareRequestAuthorizationFilter issuers(Set<String> issuers) {
41 return new IssuerAndSubjectAwareRequestAuthorizationFilter(issuerAndSubjectMatches(issuers));
42 }
43
44 private static Map<String, Predicate<String>> issuerAndSubjectMatches(Set<String> issuers) {
45 return issuers.stream().collect(toMap(
46 identity(),
47 issuer -> issuer::equals
48 ));
49 }
50
51 private static Map<String, Predicate<Jwt>> toJwtRules(Map<String, Predicate<String>> subjectRules) {
52 return subjectRules.entrySet().stream().collect(toMap(
53 Map.Entry::getKey,
54 entry -> jwt -> entry.getValue().test(jwt.getClaims().getSubject().orElse(jwt.getClaims().getIssuer()))
55 ));
56 }
57 }