package org.apereo.cas.ticket; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeInfo; import org.apereo.cas.authentication.Authentication; import org.apereo.cas.authentication.principal.Service; import org.apereo.cas.ticket.proxy.ProxyGrantingTicket; import org.apereo.cas.ticket.proxy.ProxyTicket; import javax.persistence.DiscriminatorValue; import javax.persistence.Entity; /** * Concrete implementation of a proxy granting ticket (PGT). A PGT is * used by a service to obtain proxy tickets for obtaining access to a back-end * service on behalf of a client. It is analogous to a ticket-granting ticket * but only for proxying purposes. Proxy tickets will be issued off of * a given proxy granting ticket. * <p> * NOTE: A PGT shares the same implementation as a {@link TicketGrantingTicket}. * The intension of this implementation at this point is make explicit and visible * the use and declaration of a PGT per the CAS protocol. * * @author Misagh Moayyed * @since 4.1 */ @Entity @DiscriminatorValue(ProxyGrantingTicket.PROXY_GRANTING_TICKET_PREFIX) @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY) public class ProxyGrantingTicketImpl extends TicketGrantingTicketImpl implements ProxyGrantingTicket { private static final long serialVersionUID = -8126909926138945649L; /** * Instantiates a new proxy granting ticket impl. */ public ProxyGrantingTicketImpl() { } /** * Instantiates a new proxy granting ticket impl. * * @param id the id * @param authentication the authentication * @param policy the policy */ public ProxyGrantingTicketImpl(final String id, final Authentication authentication, final ExpirationPolicy policy) { super(id, authentication, policy); } /** * Instantiates a new proxy granting ticket impl. * * @param id the id * @param proxiedBy the proxied by * @param parentTicketGrantingTicket the ticket granting ticket * @param authentication the authentication * @param policy the policy */ @JsonCreator public ProxyGrantingTicketImpl( @JsonProperty("id") final String id, @JsonProperty("proxiedBy") final Service proxiedBy, @JsonProperty("grantingTicket") final TicketGrantingTicket parentTicketGrantingTicket, @JsonProperty("authentication") final Authentication authentication, @JsonProperty("expirationPolicy") final ExpirationPolicy policy) { super(id, proxiedBy, parentTicketGrantingTicket, authentication, policy); } @Override public ProxyTicket grantProxyTicket(final String id, final Service service, final ExpirationPolicy expirationPolicy, final boolean onlyTrackMostRecentSession) { final ProxyTicket serviceTicket = new ProxyTicketImpl(id, this, service, false, expirationPolicy); trackServiceSession(serviceTicket.getId(), service, onlyTrackMostRecentSession); return serviceTicket; } @Override public String getPrefix() { return ProxyGrantingTicket.PROXY_GRANTING_TICKET_PREFIX; } }