/* * See LICENSE for licensing and NOTICE for copyright. */ package net.shibboleth.idp.cas.ticket; import javax.annotation.Nonnull; import net.shibboleth.utilities.java.support.logic.Constraint; import org.joda.time.Instant; /** * Generic CAS ticket that has a natural identifier and expiration. All CAS tickets are bound to an IdP session ID * that indicates the IdP session in which they were created. * * @author Marvin S. Addison */ public class Ticket { /** IdP session ID used to create ticket. */ @Nonnull private final String sessionId; /** Ticket identifier. */ @Nonnull private String id; /** Service/relying party that requested the ticket. */ @Nonnull private String service; /** Expiration instant. */ @Nonnull private Instant expirationInstant; /** * Creates a new ticket with the given parameters.. * * @param id Ticket ID. * @param sessionId IdP session ID used to create ticket. * @param service Service that requested the ticket. * @param expiration Expiration instant. */ public Ticket( @Nonnull final String id, @Nonnull final String sessionId, @Nonnull final String service, @Nonnull final Instant expiration) { this.id = Constraint.isNotNull(id, "Id cannot be null"); this.sessionId = Constraint.isNotNull(sessionId, "SessionId cannot be null"); this.service = Constraint.isNotNull(service, "Service cannot be null"); this.expirationInstant = Constraint.isNotNull(expiration, "Expiration cannot be null"); } @Nonnull public String getId() { return id; } @Nonnull public String getSessionId() { return sessionId; } @Nonnull public String getService() { return service; } @Nonnull public Instant getExpirationInstant() { return expirationInstant; } @Override public boolean equals(final Object o) { if (o == null || !o.getClass().equals(getClass())) { return false; } final Ticket other = (Ticket) o; return other.id.equals(id); } @Override public int hashCode() { return 23 + 31 * id.hashCode(); } @Override public String toString() { return id; } }