package org.apereo.cas.mgmt.services.web.factory;
import org.apache.commons.lang3.StringUtils;
import org.apereo.cas.mgmt.services.web.beans.RegisteredServiceEditBean;
import org.apereo.cas.services.DefaultRegisteredServiceMultifactorPolicy;
import org.apereo.cas.services.RegisteredServiceMultifactorPolicy;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* This is {@link DefaultMultifactorAuthenticationMapper}.
*
* @author Misagh Moayyed
* @since 5.0.0
*/
public class DefaultMultifactorAuthenticationMapper implements MultifactorAuthenticationMapper {
@Override
public void mapMultifactorPolicy(final RegisteredServiceMultifactorPolicy multifactorPolicy, final RegisteredServiceEditBean.ServiceData bean) {
bean.getMultiAuth().setFailureMode(multifactorPolicy.getFailureMode().name());
bean.getMultiAuth().setProviders(multifactorPolicy.getMultifactorAuthenticationProviders().stream().collect(Collectors.joining(",")));
bean.getMultiAuth().getPrincipalAttr().setNameTrigger(multifactorPolicy.getPrincipalAttributeNameTrigger());
bean.getMultiAuth().getPrincipalAttr().setValueMatch(multifactorPolicy.getPrincipalAttributeValueToMatch());
bean.getMultiAuth().setBypassEnabled(multifactorPolicy.isBypassEnabled());
}
@Override
public RegisteredServiceMultifactorPolicy toMultifactorPolicy(final RegisteredServiceEditBean.ServiceData data) {
if (StringUtils.isNotBlank(data.getMultiAuth().getProviders())) {
final DefaultRegisteredServiceMultifactorPolicy policy = new DefaultRegisteredServiceMultifactorPolicy();
policy.setFailureMode(
RegisteredServiceMultifactorPolicy.FailureModes.valueOf(data.getMultiAuth().getFailureMode().toUpperCase()));
policy.setPrincipalAttributeNameTrigger(data.getMultiAuth().getPrincipalAttr().getNameTrigger());
policy.setPrincipalAttributeValueToMatch(data.getMultiAuth().getPrincipalAttr().getValueMatch());
final String[] providers = data.getMultiAuth().getProviders().split(",");
policy.setMultifactorAuthenticationProviders(Stream.of(providers).collect(Collectors.toSet()));
policy.setBypassEnabled(data.getMultiAuth().isBypassEnabled());
return policy;
}
return null;
}
}