package org.apereo.cas.authentication; import org.apereo.cas.authentication.principal.Principal; import java.io.Serializable; import java.time.ZonedDateTime; import java.util.List; import java.util.Map; import java.util.function.Predicate; /** * Constructs immutable {@link Authentication} objects using the builder pattern. * * @author Misagh Moayyed * @since 4.1.0 */ public interface AuthenticationBuilder extends Serializable { /** * Gets the authenticated principal. * * @return Principal. principal */ Principal getPrincipal(); /** * Add credentials authentication builder. * * @param credentials the credentials * @return the authentication builder * @since 4.2.0 */ AuthenticationBuilder addCredentials(List<CredentialMetaData> credentials); /** * Sets the principal returns this instance. * * @param p Authenticated principal. * @return This builder instance. */ AuthenticationBuilder setPrincipal(Principal p); /** * Adds metadata about a credential presented for authentication. * * @param credential Credential metadata. * @return This builder instance. */ AuthenticationBuilder addCredential(CredentialMetaData credential); /** * Adds an authentication metadata attribute key-value pair. * * @param key Authentication attribute key. * @param value Authentication attribute value. * @return This builder instance. */ AuthenticationBuilder addAttribute(String key, Object value); /** * Gets the authentication success map. * * @return Non -null map of handler names to successful handler authentication results. */ Map<String, HandlerResult> getSuccesses(); /** * Set successes authentication builder. * * @param successes the successes * @return the authentication builder * @since 4.2.0 */ AuthenticationBuilder setSuccesses(Map<String, HandlerResult> successes); /** * Adds successes authentication builder. * * @param successes the successes * @return the authentication builder * @since 4.2.0 */ AuthenticationBuilder addSuccesses(Map<String, HandlerResult> successes); /** * Sets failures. * * @param failures the failures * @return the failures */ AuthenticationBuilder setFailures(Map<String, Class<? extends Exception>> failures); /** * Adds failures. * * @param failures the failures * @return the failures * @since 4.2.0 */ AuthenticationBuilder addFailures(Map<String, Class<? extends Exception>> failures); /** * Adds an authentication success to the map of handler names to successful authentication handler results. * * @param key Authentication handler name. * @param value Successful authentication handler result produced by handler of given name. * @return This builder instance. */ AuthenticationBuilder addSuccess(String key, HandlerResult value); /** * Sets the authentication date and returns this instance. * * @param d Authentication date. * @return This builder instance. */ AuthenticationBuilder setAuthenticationDate(ZonedDateTime d); /** * Creates an immutable authentication instance from builder data. * * @return Immutable authentication. */ Authentication build(); /** * Gets the authentication failure map. * * @return Non -null authentication failure map. */ Map<String, Class<? extends Exception>> getFailures(); /** * Adds an authentication failure to the map of handler names to the authentication handler failures. * * @param key Authentication handler name. * @param value Exception raised on handler failure to authenticate credential. * @return This builder instance. */ AuthenticationBuilder addFailure(String key, Class<? extends Exception> value); /** * Sets the authentication metadata attributes. * * @param attributes Non-null map of authentication metadata attributes. * @return This builder instance. */ AuthenticationBuilder setAttributes(Map<String, Object> attributes); /** * Merge attribute. * * @param key the key * @param value the value * @return the authentication builder */ AuthenticationBuilder mergeAttribute(String key, Object value); /** * Has attribute boolean. * * @param name the name * @param value the value * @return true/false */ boolean hasAttribute(String name, Predicate<Object> value); }