package org.apereo.cas.authentication.metadata;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apereo.cas.authentication.AuthenticationBuilder;
import org.apereo.cas.authentication.AuthenticationHandler;
import org.apereo.cas.authentication.AuthenticationTransaction;
import org.apereo.cas.authentication.Credential;
import java.util.HashSet;
import java.util.Set;
/**
* Sets an authentication attribute containing the collection of authentication handlers (by name) that successfully
* authenticated credential. The attribute name is given by {@link AuthenticationHandler#SUCCESSFUL_AUTHENTICATION_HANDLERS}.
* This component provides a simple method to inject successful handlers into the CAS ticket validation
* response to support level of assurance and MFA use cases.
*
* @author Marvin S. Addison
* @author Alaa Nassef
* @since 4.0.0
*/
public class SuccessfulHandlerMetaDataPopulator extends BaseAuthenticationMetadataPopulator {
@Override
public void populateAttributes(final AuthenticationBuilder builder, final AuthenticationTransaction transaction) {
Set<String> successes = builder.getSuccesses().keySet();
if (successes != null && !successes.isEmpty()) {
successes = new HashSet(successes);
}
builder.mergeAttribute(AuthenticationHandler.SUCCESSFUL_AUTHENTICATION_HANDLERS, successes);
}
@Override
public boolean supports(final Credential credential) {
return true;
}
@Override
public String toString() {
return new ToStringBuilder(this)
.appendSuper(super.toString())
.toString();
}
}