package org.apereo.cas.authentication;
import org.apereo.cas.authentication.principal.PrincipalResolver;
import java.util.Collection;
import java.util.Map;
import java.util.Set;
/**
* This is {@link AuthenticationEventExecutionPlan}.
* A higher-level abstraction to encapsulate the registration of authentication handlers, etc. Each module would interact with
* this interface that controls the registration and positioning of the handlers, etc.
* The authentication manager contains this interface, and may dynamically for each transaction ask for a candidate list of handlers/resolvers, etc.
*
* @author Misagh Moayyed
* @since 5.1.0
*/
public interface AuthenticationEventExecutionPlan {
/**
* Register authentication handler.
*
* @param handler the handler
*/
void registerAuthenticationHandler(AuthenticationHandler handler);
/**
* Register metadata populator.
*
* @param populator the populator
*/
void registerMetadataPopulator(AuthenticationMetaDataPopulator populator);
/**
* Register metadata populators.
*
* @param populator the populator
*/
void registerMetadataPopulators(Collection<AuthenticationMetaDataPopulator> populator);
/**
* Register authentication handler with principal resolver.
*
* @param plan the plan
*/
void registerAuthenticationHandlerWithPrincipalResolver(Map<AuthenticationHandler, PrincipalResolver> plan);
/**
* Register authentication handlers with principal resolver.
*
* @param handlers the handlers
* @param principalResolver the principal resolver
*/
void registerAuthenticationHandlerWithPrincipalResolvers(Collection<AuthenticationHandler> handlers, PrincipalResolver principalResolver);
/**
* Register authentication handler with principal resolver.
*
* @param handler the handler
* @param principalResolver the principal resolver
*/
void registerAuthenticationHandlerWithPrincipalResolver(AuthenticationHandler handler, PrincipalResolver principalResolver);
/**
* Gets authentication handlers for transaction.
*
* @param transaction the transaction
* @return the authentication handlers for transaction
*/
Set<AuthenticationHandler> getAuthenticationHandlersForTransaction(AuthenticationTransaction transaction);
/**
* Gets authentication metadata populators.
*
* @param transaction the transaction
* @return the authentication metadata populators
*/
Collection<AuthenticationMetaDataPopulator> getAuthenticationMetadataPopulators(AuthenticationTransaction transaction);
/**
* Gets principal resolver for authentication transaction.
*
* @param handler the handler
* @param transaction the transaction
* @return the principal resolver for authentication transaction
*/
PrincipalResolver getPrincipalResolverForAuthenticationTransaction(AuthenticationHandler handler, AuthenticationTransaction transaction);
}