57 PolicyEvaluationResponse response =
new PolicyEvaluationResponse();
58 List<PolicyEvaluationResponse.EvaluationResultRepresentation> resultsRep =
new ArrayList<>();
59 AccessToken accessToken = identity.getAccessToken();
60 AccessToken.Authorization authorizationData =
new AccessToken.Authorization();
62 authorizationData.setPermissions(decision.results());
63 accessToken.setAuthorization(authorizationData);
65 ClientModel clientModel = authorization.getRealm().getClientById(resourceServer.getId());
67 if (!accessToken.hasAudience(clientModel.getClientId())) {
68 accessToken.audience(clientModel.getClientId());
71 response.setRpt(accessToken);
73 Collection<Result> results = decision.getResults();
75 if (results.stream().anyMatch(evaluationResult -> evaluationResult.getEffect().equals(Decision.Effect.DENY))) {
76 response.setStatus(DecisionEffect.DENY);
78 response.setStatus(DecisionEffect.PERMIT);
81 for (Result result : results) {
82 PolicyEvaluationResponse.EvaluationResultRepresentation rep =
new PolicyEvaluationResponse.EvaluationResultRepresentation();
84 if (result.getEffect() == Decision.Effect.DENY) {
85 rep.setStatus(DecisionEffect.DENY);
87 rep.setStatus(DecisionEffect.PERMIT);
92 if (result.getPermission().getResource() != null) {
93 ResourceRepresentation resource =
new ResourceRepresentation();
95 resource.setId(result.getPermission().getResource().getId());
96 resource.setName(result.getPermission().getResource().getName());
98 rep.setResource(resource);
100 ResourceRepresentation resource =
new ResourceRepresentation();
102 resource.setName(
"Any Resource with Scopes " + result.getPermission().getScopes().stream().map(
Scope::getName).collect(Collectors.toList()));
104 rep.setResource(resource);
107 rep.setScopes(result.getPermission().getScopes().stream().map(scope -> {
108 ScopeRepresentation representation =
new ScopeRepresentation();
110 representation.setId(scope.getId());
111 representation.setName(scope.getName());
113 return representation;
114 }).collect(Collectors.toList()));
116 List<PolicyEvaluationResponse.PolicyResultRepresentation> policies =
new ArrayList<>();
118 for (Result.PolicyResult policy : result.getResults()) {
119 PolicyResultRepresentation policyRep =
toRepresentation(policy, authorization);
121 if (
"resource".equals(policy.getPolicy().getType())) {
122 policyRep.getPolicy().setScopes(result.getPermission().getResource().getScopes().stream().map(
Scope::getName).collect(Collectors.toSet()));
125 policies.add(policyRep);
128 rep.setPolicies(policies);
131 resultsRep.sort(Comparator.comparing(o -> o.getResource().getName()));
133 Map<String, PolicyEvaluationResponse.EvaluationResultRepresentation> groupedResults =
new HashMap<>();
135 resultsRep.forEach(evaluationResultRepresentation -> {
136 PolicyEvaluationResponse.EvaluationResultRepresentation result = groupedResults.get(evaluationResultRepresentation.getResource().getId());
137 ResourceRepresentation resource = evaluationResultRepresentation.getResource();
139 if (result == null) {
140 groupedResults.put(resource.getId(), evaluationResultRepresentation);
141 result = evaluationResultRepresentation;
144 if (result.getStatus().equals(DecisionEffect.PERMIT) || (evaluationResultRepresentation.getStatus().equals(DecisionEffect.PERMIT) && result.getStatus().equals(DecisionEffect.DENY))) {
145 result.setStatus(DecisionEffect.PERMIT);
148 List<ScopeRepresentation> scopes = result.getScopes();
150 if (DecisionEffect.PERMIT.equals(result.getStatus())) {
151 result.setAllowedScopes(scopes);
154 if (resource.getId() != null) {
155 if (!scopes.isEmpty()) {
156 result.getResource().setName(evaluationResultRepresentation.getResource().getName() +
" with scopes " + scopes.stream().flatMap((Function<ScopeRepresentation, Stream<?>>) scopeRepresentation -> Arrays.asList(scopeRepresentation.getName()).stream()).collect(Collectors.toList()));
158 result.getResource().setName(evaluationResultRepresentation.getResource().getName());
161 result.getResource().setName(
"Any Resource with Scopes " + scopes.stream().flatMap((Function<ScopeRepresentation, Stream<?>>) scopeRepresentation -> Arrays.asList(scopeRepresentation.getName()).stream()).collect(Collectors.toList()));
164 List<PolicyEvaluationResponse.PolicyResultRepresentation> policies = result.getPolicies();
166 for (PolicyEvaluationResponse.PolicyResultRepresentation policy :
new ArrayList<>(evaluationResultRepresentation.getPolicies())) {
167 if (!policies.contains(policy)) {
168 policies.add(policy);
173 response.setResults(groupedResults.values().stream().collect(Collectors.toList()));
static PolicyEvaluationResponse.PolicyResultRepresentation toRepresentation(Result.PolicyResult result, AuthorizationProvider authorization)
Definition: PolicyEvaluationResponseBuilder.java:178