package org.apereo.cas.validation; import java.io.Serializable; import java.util.Collections; import java.util.List; import org.apache.commons.lang3.builder.HashCodeBuilder; import org.apereo.cas.authentication.Authentication; import org.apereo.cas.authentication.principal.Service; import org.springframework.util.Assert; /** * An immutable, serializable ticket validation assertion. * * @author Scott Battaglia * @author Marvin S. Addison * * @since 3.0.0 */ public class ImmutableAssertion implements Assertion, Serializable { /** Unique Id for Serialization. */ private static final long serialVersionUID = -3348826049921010423L; /** Primary authentication. */ private final Authentication primaryAuthentication; /** Chained authentications. */ private final List<Authentication> chainedAuthentications; /** Was this the result of a new login. */ private final boolean fromNewLogin; /** The service we are asserting this ticket for. */ private final Service service; /** * Creates a new instance with required parameters. * * @param primary Primary authentication. * @param chained Chained authentications. * @param service The service we are asserting this ticket for. * @param fromNewLogin True if the ticket was issued as a result of authentication, false otherwise. * * @throws IllegalArgumentException If any of the given arguments do not meet requirements. */ public ImmutableAssertion( final Authentication primary, final List<Authentication> chained, final Service service, final boolean fromNewLogin) { Assert.notNull(primary, "primary authentication cannot be null"); Assert.notNull(chained, "chained authentications cannot be null"); Assert.notNull(service, "service cannot be null"); Assert.notEmpty(chained, "chained authentications cannot be empty"); this.primaryAuthentication = primary; this.chainedAuthentications = chained; this.service = service; this.fromNewLogin = fromNewLogin; } @Override public Authentication getPrimaryAuthentication() { return this.primaryAuthentication; } @Override public List<Authentication> getChainedAuthentications() { return Collections.unmodifiableList(this.chainedAuthentications); } @Override public boolean isFromNewLogin() { return this.fromNewLogin; } @Override public Service getService() { return this.service; } @Override public boolean equals(final Object o) { if (!(o instanceof Assertion)) { return false; } final Assertion a = (Assertion) o; return this.primaryAuthentication.equals(a.getPrimaryAuthentication()) && this.chainedAuthentications.equals(a.getChainedAuthentications()) && this.service.equals(a.getService()) && this.fromNewLogin == a.isFromNewLogin(); } @Override public int hashCode() { final HashCodeBuilder builder = new HashCodeBuilder(15, 11); builder.append(this.primaryAuthentication); builder.append(this.chainedAuthentications); builder.append(this.service); builder.append(this.fromNewLogin); return builder.toHashCode(); } @Override public String toString() { return this.primaryAuthentication + ":" + this.service; } }