package org.apereo.cas.support.saml.services; import org.apache.commons.lang3.BooleanUtils; import org.apereo.cas.support.saml.services.idp.metadata.SamlRegisteredServiceServiceProviderMetadataFacade; import org.apereo.cas.support.saml.services.idp.metadata.cache.SamlRegisteredServiceCachingMetadataResolver; import org.apereo.cas.util.RegexUtils; import org.opensaml.saml.saml2.metadata.EntityDescriptor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.ApplicationContext; import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * This is {@link PatternMatchingEntityIdAttributeReleasePolicy}. * * @author Misagh Moayyed * @since 5.1.0 */ public class PatternMatchingEntityIdAttributeReleasePolicy extends BaseSamlRegisteredServiceAttributeReleasePolicy { private static final long serialVersionUID = 2633701342213724854L; private static final Logger LOGGER = LoggerFactory.getLogger(PatternMatchingEntityIdAttributeReleasePolicy.class); private String entityIds = RegexUtils.MATCH_NOTHING_PATTERN.pattern(); private boolean fullMatch = true; @Override protected Map<String, Object> getAttributesForSamlRegisteredService(final Map<String, Object> attributes, final SamlRegisteredService service, final ApplicationContext applicationContext, final SamlRegisteredServiceCachingMetadataResolver resolver, final SamlRegisteredServiceServiceProviderMetadataFacade facade, final EntityDescriptor entityDescriptor) { final Pattern pattern = RegexUtils.createPattern(this.entityIds); final Matcher matcher = pattern.matcher(entityDescriptor.getEntityID()); LOGGER.debug("Creating pattern [{}] to match against entity id [{}]", pattern.pattern(), entityDescriptor.getEntityID()); final boolean matched = fullMatch ? matcher.matches() : matcher.find(); LOGGER.debug("Pattern [{}] matched against [{}]? [{}]", pattern.pattern(), entityDescriptor.getEntityID(), BooleanUtils.toStringYesNo(matched)); if (matched) { return authorizeReleaseOfAllowedAttributes(attributes); } return new HashMap<>(); } public String getEntityIds() { return entityIds; } public void setEntityIds(final String entityIds) { this.entityIds = entityIds; } }