package org.apereo.cas.authentication;
import org.apache.commons.lang3.RandomUtils;
import org.apache.commons.lang3.StringUtils;
import org.apereo.cas.authentication.principal.DefaultPrincipalFactory;
import org.apereo.cas.authentication.principal.PrincipalFactory;
import org.apereo.cas.services.ServicesManager;
/**
* Base class for all authentication handlers that support configurable naming.
*
* @author Marvin S. Addison
* @since 4.0.0
*/
public abstract class AbstractAuthenticationHandler implements AuthenticationHandler {
/**
* Factory to create the principal type.
**/
protected final PrincipalFactory principalFactory;
/**
* The services manager instance, as the entry point to the registry.
**/
protected final ServicesManager servicesManager;
/**
* Sets the authentication handler name. Authentication handler names SHOULD be unique within an
* {@link AuthenticationManager}, and particular implementations
* may require uniqueness. Uniqueness is a best
* practice generally.
*/
private final String name;
/**
* Sets order. If order is undefined, generates a random order value.
* Since handlers are generally sorted by this order, it's important that
* order numbers be unique on a best-effort basis.
*/
private final int order;
/**
* Instantiates a new Abstract authentication handler.
*
* @param name Handler name.
* @param servicesManager the services manager.
* @param principalFactory the principal factory
* @param order the order
*/
public AbstractAuthenticationHandler(final String name, final ServicesManager servicesManager, final PrincipalFactory principalFactory,
final Integer order) {
this.name = StringUtils.isNotBlank(name) ? name : getClass().getSimpleName();
this.servicesManager = servicesManager;
this.principalFactory = principalFactory == null ? new DefaultPrincipalFactory() : principalFactory;
if (order == null) {
this.order = RandomUtils.nextInt(1, Integer.MAX_VALUE);
} else {
this.order = order;
}
}
@Override
public String getName() {
return this.name;
}
@Override
public int getOrder() {
return this.order;
}
}