package org.apereo.cas.mock; import org.apereo.cas.authentication.Authentication; import org.apereo.cas.authentication.BasicCredentialMetaData; import org.apereo.cas.authentication.CoreAuthenticationTestUtils; import org.apereo.cas.authentication.Credential; import org.apereo.cas.authentication.CredentialMetaData; import org.apereo.cas.authentication.DefaultAuthenticationBuilder; import org.apereo.cas.authentication.DefaultHandlerResult; import org.apereo.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler; import org.apereo.cas.authentication.principal.DefaultPrincipalFactory; import org.apereo.cas.authentication.principal.Service; import org.apereo.cas.ticket.ExpirationPolicy; import org.apereo.cas.ticket.ServiceTicket; import org.apereo.cas.ticket.Ticket; import org.apereo.cas.ticket.TicketGrantingTicket; import org.apereo.cas.ticket.TicketState; import org.apereo.cas.ticket.UniqueTicketIdGenerator; import org.apereo.cas.ticket.proxy.ProxyGrantingTicket; import org.apereo.cas.ticket.support.TicketGrantingTicketExpirationPolicy; import org.apereo.cas.util.DefaultUniqueTicketIdGenerator; import java.time.ZoneOffset; import java.time.ZonedDateTime; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; /** * Mock ticket-granting ticket. * * @author Marvin S. Addison * @since 3.0.0 */ public class MockTicketGrantingTicket implements TicketGrantingTicket, TicketState { public static final UniqueTicketIdGenerator ID_GENERATOR = new DefaultUniqueTicketIdGenerator(); private static final long serialVersionUID = 6546995681334670659L; private String id; private Authentication authentication; private ZonedDateTime created; private int usageCount; private boolean expired; private Map<String, Service> services = new HashMap<>(); private Set<ProxyGrantingTicket> proxyGrantingTickets = new HashSet<>(); public MockTicketGrantingTicket(final String principal, final Credential c, final Map attributes) { id = ID_GENERATOR.getNewTicketId("TGT"); final CredentialMetaData metaData = new BasicCredentialMetaData(c); authentication = new DefaultAuthenticationBuilder( new DefaultPrincipalFactory().createPrincipal(principal, attributes)) .addCredential(metaData) .addSuccess(SimpleTestUsernamePasswordAuthenticationHandler.class.getName(), new DefaultHandlerResult(new SimpleTestUsernamePasswordAuthenticationHandler(), metaData)) .build(); created = ZonedDateTime.now(ZoneOffset.UTC); } public MockTicketGrantingTicket(final String principal) { this(principal, CoreAuthenticationTestUtils.getCredentialsWithDifferentUsernameAndPassword("uid", "password"), new HashMap()); } @Override public Authentication getAuthentication() { return authentication; } @Override public void update() { usageCount++; } public ServiceTicket grantServiceTicket(final Service service) { return grantServiceTicket(ID_GENERATOR.getNewTicketId("ST"), service, null, false, true); } @Override public ServiceTicket grantServiceTicket( final String id, final Service service, final ExpirationPolicy expirationPolicy, final boolean credentialProvided, final boolean onlyTrackMostRecentSession) { update(); return new MockServiceTicket(id, service, this); } @Override public Service getProxiedBy() { return null; } @Override public boolean isRoot() { return true; } @Override public TicketGrantingTicket getRoot() { return this; } @Override public List<Authentication> getChainedAuthentications() { return Collections.emptyList(); } @Override public String getId() { return id; } @Override public boolean isExpired() { return expired; } @Override public TicketGrantingTicket getGrantingTicket() { return this; } @Override public ZonedDateTime getCreationTime() { return created; } @Override public int getCountOfUses() { return usageCount; } @Override public ZonedDateTime getLastTimeUsed() { return created; } @Override public ZonedDateTime getPreviousTimeUsed() { return created; } @Override public ExpirationPolicy getExpirationPolicy() { return new TicketGrantingTicketExpirationPolicy(100, 100); } @Override public Map<String, Service> getServices() { return this.services; } @Override public Collection<ProxyGrantingTicket> getProxyGrantingTickets() { return this.proxyGrantingTickets; } @Override public void removeAllServices() { } @Override public void markTicketExpired() { expired = true; } @Override public int compareTo(final Ticket o) { return this.id.compareTo(o.getId()); } @Override public boolean equals(final Object obj) { return compareTo((Ticket) obj) == 0; } @Override public int hashCode() { return this.id.hashCode(); } @Override public String getPrefix() { return TicketGrantingTicket.PREFIX; } }