package org.apereo.cas.authentication;
import org.apereo.cas.services.RegisteredService;
import org.apereo.cas.authentication.principal.Principal;
import org.apereo.cas.services.MultifactorAuthenticationProvider;
import javax.servlet.http.HttpServletRequest;
import java.util.Collection;
import java.util.Optional;
/**
* This interface is responsible for deciding which Multifactor provider to use based on the request, service, and
* principal.
*
* @author Daniel Frett
* @since 5.0.0
*/
public interface MultifactorTriggerSelectionStrategy {
/**
* Resolve the multifactor authentication provider id for the specified HttpServletRequest, RegisteredService and
* Principal.
*
* @param providers a Map of available MFA providers loaded in the spring context
* @param request The original request to check for MFA requirements
* @param service The service to check for MFA requirements
* @param principal The principal to check for MFA requirements
* @return the provider id of the MFA provider required for authentication
*/
Optional<String> resolve(Collection<MultifactorAuthenticationProvider> providers, HttpServletRequest request,
RegisteredService service,
Principal principal);
}