package org.apereo.cas.adaptors.azure; import net.phonefactor.pfsdk.PFAuthParams; import net.phonefactor.pfsdk.PlainTextPinInfo; import net.phonefactor.pfsdk.StandardPinInfo; import org.apereo.cas.authentication.principal.Principal; import org.apereo.cas.configuration.model.support.mfa.MultifactorAuthenticationProperties; /** * This is {@link AzureAuthenticatorAuthenticationRequestBuilder}. * * @author Misagh Moayyed * @since 5.1.0 */ public class AzureAuthenticatorAuthenticationRequestBuilder { private final String phoneAttributeName; private final MultifactorAuthenticationProperties.Azure.AuthenticationModes mode; public AzureAuthenticatorAuthenticationRequestBuilder(final String phoneAttributeName, final MultifactorAuthenticationProperties.Azure.AuthenticationModes mode) { this.phoneAttributeName = phoneAttributeName; this.mode = mode; } /** * Build pf auth params. * * @param p the principal * @param c the credential/token * @return the pf auth params */ public PFAuthParams build(final Principal p, final AzureAuthenticatorTokenCredential c) { if (!p.getAttributes().containsKey(this.phoneAttributeName)) { throw new IllegalArgumentException(this.phoneAttributeName + " is not available as a principal attribute"); } final PFAuthParams params = new PFAuthParams(); params.setPhoneNumber(p.getAttributes().get(this.phoneAttributeName).toString()); params.setCountryCode("1"); params.setUsername(p.getId()); switch (mode) { case PIN: params.setAuthInfo(new PlainTextPinInfo(c.getToken())); break; case POUND: default: params.setAuthInfo(new StandardPinInfo()); } return params; } }