package net.unicon.cas.mfa.authentication;
import net.unicon.cas.mfa.web.support.MultiFactorAuthenticationSupportingWebApplicationService;
import org.jasig.cas.authentication.AuthenticationBuilder;
import org.jasig.cas.authentication.AuthenticationMetaDataPopulator;
import org.jasig.cas.authentication.Credential;
import org.jasig.cas.authentication.principal.Service;
import org.jasig.cas.web.support.WebUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.webflow.execution.RequestContext;
import org.springframework.webflow.execution.RequestContextHolder;
/**
* Remember the authentication method used for the retrieved instance of
* {@link MultiFactorAuthenticationSupportingWebApplicationService}. The
* method will be placed into the authentication context as an attribute,
* remembered by {@link MultiFactorAuthenticationSupportingWebApplicationService#CONST_PARAM_AUTHN_METHOD}.
* @author Misagh Moayyed
*/
public class RememberAuthenticationMethodMetaDataPopulator implements AuthenticationMetaDataPopulator {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Override
public void populateAttributes(final AuthenticationBuilder authenticationBuilder, final Credential credential) {
final RequestContext context = RequestContextHolder.getRequestContext();
if (context != null) {
final Service svc = WebUtils.getService(context);
if (svc instanceof MultiFactorAuthenticationSupportingWebApplicationService) {
final MultiFactorAuthenticationSupportingWebApplicationService mfaSvc =
(MultiFactorAuthenticationSupportingWebApplicationService) svc;
authenticationBuilder.addAttribute(
MultiFactorAuthenticationSupportingWebApplicationService.CONST_PARAM_AUTHN_METHOD,
mfaSvc.getAuthenticationMethod());
logger.debug("Captured authentication method [{}] into the authentication context",
mfaSvc.getAuthenticationMethod());
}
}
}
@Override
public boolean supports(final Credential credential) {
return true;
}
}