/*
* oxAuth is available under the MIT License (2008). See http://opensource.org/licenses/MIT for full text.
*
* Copyright (c) 2014, Gluu
*/
package org.xdi.oxauth.service.uma.authorization;
import org.apache.commons.lang.StringUtils;
import org.xdi.model.GluuAttribute;
import org.xdi.oxauth.model.common.IAuthorizationGrant;
import org.xdi.oxauth.model.common.uma.UmaRPT;
import org.xdi.oxauth.model.uma.ClaimToken;
import org.xdi.oxauth.model.uma.persistence.ResourceSetPermission;
import org.xdi.oxauth.service.AttributeService;
import org.xdi.oxauth.service.external.context.ExternalScriptContext;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
/**
* @author Yuriy Zabrovarnyy
* @author Javier Rojas Blum
* @author Yuriy Movchan
* @version 0.9 February 12, 2015
*/
public class AuthorizationContext extends ExternalScriptContext {
private final UmaRPT rpt;
private final ResourceSetPermission permission;
private final IAuthorizationGrant grant;
private final Map<String, List<String>> claims;
private NeedInfoAuthenticationContext needInfoAuthenticationContext;
private NeedInfoRequestingPartyClaims needInfoRequestingPartyClaims;
private AttributeService attributeService;
public AuthorizationContext(AttributeService attributeService, UmaRPT p_rpt, ResourceSetPermission p_permission, IAuthorizationGrant p_grant,
HttpServletRequest p_httpRequest, List<ClaimToken> claims) {
super(p_httpRequest);
this.attributeService = attributeService;
this.rpt = p_rpt;
this.permission = p_permission;
this.grant = p_grant;
this.claims = new HashMap<String, List<String>>();
if (claims != null) {
for (ClaimToken claim : claims) {
List<String> strings = this.claims.get(claim.getFormat());
if (strings == null) {
strings = new ArrayList<String>();
}
strings.add(claim.getToken());
this.claims.put(claim.getFormat(), strings);
}
}
}
public List<String> getRequestClaim(String p_claimName) {
if (StringUtils.isNotBlank(p_claimName) && claims != null) {
final List<String> value = claims.get(p_claimName);
if (value != null) {
return Collections.unmodifiableList(value);
}
}
return Collections.emptyList();
}
public IAuthorizationGrant getGrant() {
return grant;
}
public String getAcrs() {
return grant.getAcrValues();
}
public String getClientClaim(String p_claimName) {
return getEntryAttributeValue(getGrant().getClientDn(), p_claimName);
}
public String getUserClaim(String p_claimName) {
GluuAttribute gluuAttribute = attributeService.getByClaimName(p_claimName);
if (gluuAttribute != null) {
String ldapClaimName = gluuAttribute.getName();
return getEntryAttributeValue(getGrant().getUserDn(), ldapClaimName);
}
return null;
}
public String getUserClaimByLdapName(String p_ldapName) {
return getEntryAttributeValue(getGrant().getUserDn(), p_ldapName);
}
public UmaRPT getRpt() {
return rpt;
}
public ResourceSetPermission getPermission() {
return permission;
}
public NeedInfoAuthenticationContext getNeedInfoAuthenticationContext() {
return needInfoAuthenticationContext;
}
public void setNeedInfoAuthenticationContext(NeedInfoAuthenticationContext needInfoAuthenticationContext) {
this.needInfoAuthenticationContext = needInfoAuthenticationContext;
}
public NeedInfoRequestingPartyClaims getNeedInfoRequestingPartyClaims() {
return needInfoRequestingPartyClaims;
}
public void setNeedInfoRequestingPartyClaims(NeedInfoRequestingPartyClaims needInfoRequestingPartyClaims) {
this.needInfoRequestingPartyClaims = needInfoRequestingPartyClaims;
}
}