package org.apereo.cas.ws.idp.services; import org.apereo.cas.authentication.principal.Principal; import org.apereo.cas.services.AbstractRegisteredServiceAttributeReleasePolicy; import org.apereo.cas.services.RegisteredService; import org.apereo.cas.ws.idp.WSFederationClaims; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.HashMap; import java.util.Map; import java.util.TreeMap; /** * This is {@link WSFederationClaimsReleasePolicy}. * * @author Misagh Moayyed * @since 5.1.0 */ public class WSFederationClaimsReleasePolicy extends AbstractRegisteredServiceAttributeReleasePolicy { private static final long serialVersionUID = -2814928645221579489L; private static final Logger LOGGER = LoggerFactory.getLogger(WSFederationClaimsReleasePolicy.class); private Map<String, String> allowedAttributes; /** * Instantiates a new Return allowed attribute release policy. */ public WSFederationClaimsReleasePolicy() { this(new HashMap<>()); } /** * Instantiates a new Return allowed attribute release policy. * * @param allowedAttributes the allowed attributes */ public WSFederationClaimsReleasePolicy(final Map<String, String> allowedAttributes) { setAllowedAttributes(allowedAttributes); } public void setAllowedAttributes(final Map<String, String> allowed) { this.allowedAttributes = allowed; } public Map<String, String> getAllowedAttributes() { return this.allowedAttributes; } @Override protected Map<String, Object> getAttributesInternal(final Principal principal, final Map<String, Object> attrs, final RegisteredService service) { final Map<String, Object> resolvedAttributes = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); resolvedAttributes.putAll(attrs); final Map<String, Object> attributesToRelease = new HashMap<>(resolvedAttributes.size()); getAllowedAttributes().forEach((claim, attributeName) -> { LOGGER.debug("Evaluating claim [{}] mapped to attribute name [{}]", WSFederationClaims.valueOf(claim).getUri(), attributeName); final Object value = resolvedAttributes.get(attributeName); if (value != null) { LOGGER.debug("Adding claim [{}] to the collection of released attributes", WSFederationClaims.valueOf(claim).getUri()); attributesToRelease.put(claim, value); } }); return attributesToRelease; } }