package org.apereo.cas.adaptors.duo.web.flow.action;
import org.apereo.cas.adaptors.duo.authn.DuoAuthenticationService;
import org.apereo.cas.adaptors.duo.authn.DuoCredential;
import org.apereo.cas.adaptors.duo.authn.DuoMultifactorAuthenticationProvider;
import org.apereo.cas.authentication.principal.Principal;
import org.apereo.cas.services.VariegatedMultifactorAuthenticationProvider;
import org.apereo.cas.web.flow.CasWebflowConstants;
import org.apereo.cas.web.support.WebUtils;
import org.springframework.webflow.action.AbstractAction;
import org.springframework.webflow.execution.Event;
import org.springframework.webflow.execution.RequestContext;
/**
* This is {@link PrepareDuoWebLoginFormAction}.
*
* @author Misagh Moayyed
* @since 5.1.0
*/
public class PrepareDuoWebLoginFormAction extends AbstractAction {
private final VariegatedMultifactorAuthenticationProvider provider;
public PrepareDuoWebLoginFormAction(final VariegatedMultifactorAuthenticationProvider provider) {
this.provider = provider;
}
@Override
protected Event doExecute(final RequestContext requestContext) throws Exception {
final Principal p = WebUtils.getAuthentication(requestContext).getPrincipal();
final DuoCredential c = requestContext.getFlowScope().get(CasWebflowConstants.VAR_ID_CREDENTIAL, DuoCredential.class);
c.setUsername(p.getId());
WebUtils.getResolvedMultifactorAuthenticationProviders(requestContext).forEach(pr -> {
final DuoAuthenticationService duoAuthenticationService =
provider.findProvider(pr.getId(), DuoMultifactorAuthenticationProvider.class).getDuoAuthenticationService();
requestContext.getViewScope().put("sigRequest", duoAuthenticationService.signRequestToken(p.getId()));
requestContext.getViewScope().put("apiHost", duoAuthenticationService.getApiHost());
requestContext.getViewScope().put("commandName", "credential");
requestContext.getViewScope().put("principal", p);
});
return success();
}
}