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(); } }