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.AuthenticationManager;
import org.apereo.cas.authentication.AuthenticationTransaction;
import org.apereo.cas.authentication.Credential;
import org.apereo.cas.services.MultifactorAuthenticationProvider;
/**
* This is {@link AuthenticationContextAttributeMetaDataPopulator}.
*
* @author Misagh Moayyed
* @since 5.1.0
*/
public class AuthenticationContextAttributeMetaDataPopulator extends BaseAuthenticationMetadataPopulator {
private final String authenticationContextAttribute;
private final AuthenticationHandler authenticationHandler;
private final MultifactorAuthenticationProvider provider;
public AuthenticationContextAttributeMetaDataPopulator(final String authenticationContextAttribute,
final AuthenticationHandler authenticationHandler,
final MultifactorAuthenticationProvider provider) {
this.authenticationContextAttribute = authenticationContextAttribute;
this.authenticationHandler = authenticationHandler;
this.provider = provider;
}
@Override
public void populateAttributes(final AuthenticationBuilder builder, final AuthenticationTransaction transaction) {
if (builder.hasAttribute(AuthenticationManager.AUTHENTICATION_METHOD_ATTRIBUTE,
obj -> obj.toString().equals(this.authenticationHandler.getName()))) {
builder.mergeAttribute(this.authenticationContextAttribute, this.provider.getId());
}
}
@Override
public boolean supports(final Credential credential) {
return this.authenticationHandler.supports(credential);
}
@Override
public String toString() {
return new ToStringBuilder(this)
.appendSuper(super.toString())
.append("authenticationContextAttribute", authenticationContextAttribute)
.append("authenticationHandler", authenticationHandler)
.append("provider", provider)
.toString();
}
}