org.apereo.cas.web.flow.AcceptableUsagePolicyFormAction Maven / Gradle / Ivy
package org.apereo.cas.web.flow;
import org.apache.commons.lang3.tuple.Pair;
import org.apereo.cas.authentication.Credential;
import org.apereo.cas.authentication.principal.Principal;
import org.apereo.cas.web.support.WebUtils;
import org.springframework.binding.message.MessageContext;
import org.springframework.webflow.action.AbstractAction;
import org.springframework.webflow.action.EventFactorySupport;
import org.springframework.webflow.execution.Event;
import org.springframework.webflow.execution.RequestContext;
/**
* Webflow action to receive and record the AUP response.
*
* @author Misagh Moayyed
* @since 4.1
*/
public class AcceptableUsagePolicyFormAction extends AbstractAction {
/**
* Event id to signal the policy needs to be accepted.
**/
protected static final String EVENT_ID_MUST_ACCEPT = "mustAccept";
private final AcceptableUsagePolicyRepository repository;
public AcceptableUsagePolicyFormAction(final AcceptableUsagePolicyRepository repository) {
this.repository = repository;
}
/**
* Verify whether the policy is accepted.
*
* @param context the context
* @param credential the credential
* @param messageContext the message context
* @return success if policy is accepted. {@link #EVENT_ID_MUST_ACCEPT} otherwise.
*/
public Event verify(final RequestContext context, final Credential credential, final MessageContext messageContext) {
final Pair res = repository.verify(context, credential);
context.getFlowScope().put("principal", res.getValue());
if (res.getKey()) {
return success();
}
return accept();
}
/**
* Record the fact that the policy is accepted.
*
* @param context the context
* @param credential the credential
* @param messageContext the message context
* @return success if policy acceptance is recorded successfully.
*/
public Event submit(final RequestContext context, final Credential credential, final MessageContext messageContext) {
if (repository.submit(context, credential)) {
return success();
}
return error();
}
@Override
protected Event doExecute(final RequestContext requestContext) throws Exception {
return verify(requestContext, WebUtils.getCredential(requestContext), requestContext.getMessageContext());
}
/**
* Accept event signaled by id {@link #EVENT_ID_MUST_ACCEPT}.
*
* @return the event
*/
protected Event accept() {
return new EventFactorySupport().event(this, EVENT_ID_MUST_ACCEPT);
}
}