/* * See LICENSE for licensing and NOTICE for copyright. */ package net.shibboleth.idp.cas.flow; import javax.annotation.Nonnull; import net.shibboleth.idp.cas.protocol.ProtocolError; import net.shibboleth.idp.cas.protocol.ProtocolParam; import net.shibboleth.idp.cas.protocol.TicketValidationRequest; import net.shibboleth.idp.profile.AbstractProfileAction; import net.shibboleth.idp.profile.ActionSupport; import org.opensaml.messaging.context.MessageContext; import org.opensaml.profile.context.ProfileRequestContext; import org.springframework.webflow.core.collection.ParameterMap; import org.springframework.webflow.execution.Event; import org.springframework.webflow.execution.RequestContext; /** * Initializes the CAS protocol interaction at the <code>/login</code> URI and returns one of the following events: * * <ul> * <li>{@link net.shibboleth.idp.cas.flow.Events#Proceed proceed}</li> * <li>{@link ProtocolError#ServiceNotSpecified serviceNotSpecified}</li> * <li>{@link ProtocolError#TicketNotSpecified ticketNotSpecified}</li> * </ul> * * On proceed places a {@link TicketValidationRequest} object in request scope under the key * {@value FlowStateSupport#TICKET_VALIDATION_REQUEST_KEY}. * * @author Marvin S. Addison */ public class InitializeValidateAction extends AbstractProfileAction { @Nonnull @Override protected Event doExecute( final @Nonnull RequestContext springRequestContext, final @Nonnull ProfileRequestContext profileRequestContext) { final ParameterMap params = springRequestContext.getRequestParameters(); final String service = params.get(ProtocolParam.Service.id()); if (service == null) { return ProtocolError.ServiceNotSpecified.event(this); } final String ticket = params.get(ProtocolParam.Ticket.id()); if (ticket == null) { return ProtocolError.TicketNotSpecified.event(this); } final TicketValidationRequest ticketValidationRequest = new TicketValidationRequest(service, ticket); final String renew = params.get(ProtocolParam.Renew.id()); if (renew != null) { ticketValidationRequest.setRenew(true); } ticketValidationRequest.setPgtUrl(params.get(ProtocolParam.PgtUrl.id())); final MessageContext messageContext = new MessageContext(); messageContext.setMessage(ticketValidationRequest); profileRequestContext.setInboundMessageContext(messageContext); FlowStateSupport.setTicketValidationRequest(springRequestContext, ticketValidationRequest); return ActionSupport.buildProceedEvent(this); } }