Search in sources :

Example 1 with UmaNeedInfoResponse

use of org.gluu.oxauth.model.uma.UmaNeedInfoResponse in project oxAuth by GluuFederation.

the class UmaNeedsInfoService method checkNeedsInfo.

public Map<UmaScriptByScope, UmaAuthorizationContext> checkNeedsInfo(Claims claims, Map<Scope, Boolean> requestedScopes, List<UmaPermission> permissions, UmaPCT pct, HttpServletRequest httpRequest, Client client) {
    Map<UmaScriptByScope, UmaAuthorizationContext> scriptMap = new HashMap<UmaScriptByScope, UmaAuthorizationContext>();
    Map<String, String> ticketAttributes = new HashMap<String, String>();
    List<ClaimDefinition> missedClaims = new ArrayList<ClaimDefinition>();
    UmaAuthorizationContextBuilder contextBuilder = new UmaAuthorizationContextBuilder(appConfiguration, attributeService, resourceService, permissions, requestedScopes, claims, httpRequest, sessionService, userService, permissionService, client);
    for (Scope scope : requestedScopes.keySet()) {
        List<String> authorizationPolicies = scope.getUmaAuthorizationPolicies();
        if (authorizationPolicies != null && !authorizationPolicies.isEmpty()) {
            for (String scriptDN : authorizationPolicies) {
                // log.trace("Loading UMA script: " + scriptDN + ", scope: " + scope + " ...");
                CustomScriptConfiguration script = policyService.getScriptByDn(scriptDN);
                if (script != null) {
                    UmaAuthorizationContext context = contextBuilder.build(script);
                    scriptMap.put(new UmaScriptByScope(scope, script), context);
                    List<ClaimDefinition> requiredClaims = policyService.getRequiredClaims(script, context);
                    if (requiredClaims != null && !requiredClaims.isEmpty()) {
                        for (ClaimDefinition definition : requiredClaims) {
                            if (!claims.has(definition.getName())) {
                                missedClaims.add(definition);
                            }
                        }
                    }
                    String claimsGatheringScriptName = policyService.getClaimsGatheringScriptName(script, context);
                    if (StringUtils.isNotBlank(claimsGatheringScriptName)) {
                        ticketAttributes.put(UmaConstants.GATHERING_ID, constructGatheringScriptNameValue(ticketAttributes.get(UmaConstants.GATHERING_ID), claimsGatheringScriptName));
                    } else {
                        log.debug("External 'getClaimsGatheringScriptName' script method return null or blank value, script: " + script.getName());
                    }
                } else {
                    log.error("Unable to load UMA script dn: '{}'", scriptDN);
                }
            }
        } else {
            log.trace("No policies defined for scope: " + scope.getId() + ", scopeDn: " + scope.getDn());
        }
    }
    if (!missedClaims.isEmpty()) {
        ticketAttributes.put(UmaPermission.PCT, pct.getCode());
        String newTicket = permissionService.changeTicket(permissions, ticketAttributes);
        UmaNeedInfoResponse needInfoResponse = new UmaNeedInfoResponse();
        needInfoResponse.setTicket(newTicket);
        needInfoResponse.setError("need_info");
        needInfoResponse.setRedirectUser(buildClaimsGatheringRedirectUri(scriptMap.values(), client, newTicket));
        needInfoResponse.setRequiredClaims(missedClaims);
        throw new WebApplicationException(Response.status(Response.Status.FORBIDDEN).entity(ServerUtil.asJsonSilently(needInfoResponse)).build());
    }
    return scriptMap;
}
Also used : UmaNeedInfoResponse(org.gluu.oxauth.model.uma.UmaNeedInfoResponse) WebApplicationException(javax.ws.rs.WebApplicationException) ClaimDefinition(org.gluu.model.uma.ClaimDefinition) Scope(org.oxauth.persistence.model.Scope) CustomScriptConfiguration(org.gluu.model.custom.script.conf.CustomScriptConfiguration)

Aggregations

WebApplicationException (javax.ws.rs.WebApplicationException)1 CustomScriptConfiguration (org.gluu.model.custom.script.conf.CustomScriptConfiguration)1 ClaimDefinition (org.gluu.model.uma.ClaimDefinition)1 UmaNeedInfoResponse (org.gluu.oxauth.model.uma.UmaNeedInfoResponse)1 Scope (org.oxauth.persistence.model.Scope)1