package org.apereo.cas.ticket.accesstoken;
import org.apereo.cas.authentication.Authentication;
import org.apereo.cas.authentication.principal.Service;
import org.apereo.cas.ticket.ExpirationPolicy;
import org.apereo.cas.ticket.Ticket;
import org.apereo.cas.ticket.TicketFactory;
import org.apereo.cas.ticket.TicketGrantingTicket;
import org.apereo.cas.ticket.UniqueTicketIdGenerator;
import org.apereo.cas.util.DefaultUniqueTicketIdGenerator;
/**
* Default OAuth access token factory.
*
* @author Jerome Leleu
* @since 5.0.0
*/
public class DefaultAccessTokenFactory implements AccessTokenFactory {
/** Default instance for the ticket id generator. */
protected final UniqueTicketIdGenerator accessTokenIdGenerator;
/** ExpirationPolicy for refresh tokens. */
protected final ExpirationPolicy expirationPolicy;
public DefaultAccessTokenFactory(final ExpirationPolicy expirationPolicy) {
this(new DefaultUniqueTicketIdGenerator(), expirationPolicy);
}
public DefaultAccessTokenFactory(final UniqueTicketIdGenerator refreshTokenIdGenerator, final ExpirationPolicy expirationPolicy) {
this.accessTokenIdGenerator = refreshTokenIdGenerator;
this.expirationPolicy = expirationPolicy;
}
@Override
public AccessToken create(final Service service, final Authentication authentication, final TicketGrantingTicket ticketGrantingTicket) {
final String codeId = this.accessTokenIdGenerator.getNewTicketId(AccessToken.PREFIX);
final AccessToken at = new AccessTokenImpl(codeId, service, authentication, this.expirationPolicy, ticketGrantingTicket);
if (ticketGrantingTicket != null) {
ticketGrantingTicket.getDescendantTickets().add(at.getId());
}
return at;
}
@Override
public <T extends TicketFactory> T get(final Class<? extends Ticket> clazz) {
return (T) this;
}
}