package org.apereo.cas.services; import org.apereo.cas.authentication.principal.Service; import org.apereo.cas.util.RegexUtils; import javax.persistence.DiscriminatorValue; import javax.persistence.Entity; import java.util.regex.Pattern; /** * Mutable registered service that uses Java regular expressions for service matching. * Matching is case insensitive, and is successful, if, and only if, the entire region * sequence matches the pattern. * * @author Marvin S. Addison * @author Misagh Moayyed * @since 3.4 */ @Entity @DiscriminatorValue("regex") public class RegexRegisteredService extends AbstractRegisteredService { private static final long serialVersionUID = -8258660210826975771L; private transient Pattern servicePattern; @Override public void setServiceId(final String id) { this.serviceId = id; // reset the servicePattern because we just changed the serviceId this.servicePattern = null; } @Override public boolean matches(final Service service) { return service != null && matches(service.getId()); } @Override public boolean matches(final String serviceId) { if (this.servicePattern == null) { this.servicePattern = RegexUtils.createPattern(this.serviceId); } return this.servicePattern.matcher(serviceId).matches(); } @Override protected AbstractRegisteredService newInstance() { return new RegexRegisteredService(); } }