package org.apereo.cas.mgmt.services.web.factory;
import org.apereo.cas.mgmt.services.web.beans.RegisteredServiceEditBean.FormData;
import org.apereo.cas.mgmt.services.web.beans.RegisteredServiceEditBean.ServiceData;
import org.apereo.cas.mgmt.services.web.beans.RegisteredServiceViewBean;
import org.apereo.cas.services.AbstractRegisteredService;
import org.apereo.cas.services.RegisteredService;
import org.apereo.cas.services.RegisteredServiceAccessStrategy;
import org.apereo.cas.services.RegisteredServiceAttributeReleasePolicy;
import org.apereo.cas.services.RegisteredServiceMultifactorPolicy;
import org.apereo.cas.services.RegisteredServiceProxyPolicy;
import org.apereo.cas.services.RegisteredServiceUsernameAttributeProvider;
import java.util.List;
/**
* Default implmentation of {@link RegisteredServiceFactory}.
*
* @author Daniel Frett
* @since 4.2
*/
public class DefaultRegisteredServiceFactory implements RegisteredServiceFactory {
private final MultifactorAuthenticationMapper multifactorAuthenticationMapper = new DefaultMultifactorAuthenticationMapper();
private final AccessStrategyMapper accessStrategyMapper;
private final AttributeReleasePolicyMapper attributeReleasePolicyMapper;
private final ProxyPolicyMapper proxyPolicyMapper;
private final RegisteredServiceMapper registeredServiceMapper;
private final UsernameAttributeProviderMapper usernameAttributeProviderMapper;
private final List<? extends FormDataPopulator> formDataPopulators;
public DefaultRegisteredServiceFactory(final AccessStrategyMapper accessStrategyMapper, final AttributeReleasePolicyMapper attributeReleasePolicyMapper,
final ProxyPolicyMapper proxyPolicyMapper, final RegisteredServiceMapper registeredServiceMapper,
final DefaultUsernameAttributeProviderMapper defaultUsernameAttributeProviderMapper,
final List<? extends FormDataPopulator> formDataPopulators) {
this.accessStrategyMapper = accessStrategyMapper;
this.attributeReleasePolicyMapper = attributeReleasePolicyMapper;
this.proxyPolicyMapper = proxyPolicyMapper;
this.registeredServiceMapper = registeredServiceMapper;
this.usernameAttributeProviderMapper = defaultUsernameAttributeProviderMapper;
this.formDataPopulators = formDataPopulators;
}
@Override
public FormData createFormData() {
final FormData data = new FormData();
this.formDataPopulators.forEach(populator -> populator.populateFormData(data));
return data;
}
@Override
public ServiceData createServiceData(final RegisteredService svc) {
final ServiceData bean = new ServiceData();
this.registeredServiceMapper.mapRegisteredService(svc, bean);
this.accessStrategyMapper.mapAccessStrategy(svc.getAccessStrategy(), bean);
this.usernameAttributeProviderMapper.mapUsernameAttributeProvider(svc.getUsernameAttributeProvider(), bean);
this.proxyPolicyMapper.mapProxyPolicy(svc.getProxyPolicy(), bean);
this.attributeReleasePolicyMapper.mapAttributeReleasePolicy(svc.getAttributeReleasePolicy(), bean);
this.multifactorAuthenticationMapper.mapMultifactorPolicy(svc.getMultifactorPolicy(), bean);
return bean;
}
@Override
public RegisteredServiceViewBean createServiceViewBean(final RegisteredService svc) {
final RegisteredServiceViewBean bean = new RegisteredServiceViewBean();
this.registeredServiceMapper.mapRegisteredService(svc, bean);
this.accessStrategyMapper.mapAccessStrategy(svc.getAccessStrategy(), bean);
this.usernameAttributeProviderMapper.mapUsernameAttributeProvider(svc.getUsernameAttributeProvider(), bean);
this.proxyPolicyMapper.mapProxyPolicy(svc.getProxyPolicy(), bean);
this.attributeReleasePolicyMapper.mapAttributeReleasePolicy(svc.getAttributeReleasePolicy(), bean);
return bean;
}
@Override
public RegisteredService createRegisteredService(final ServiceData data) {
final RegisteredService svc = this.registeredServiceMapper.toRegisteredService(data);
if (svc instanceof AbstractRegisteredService) {
final AbstractRegisteredService absSvc = (AbstractRegisteredService) svc;
final RegisteredServiceAccessStrategy accessStrategy = this.accessStrategyMapper.toAccessStrategy(data);
if (accessStrategy != null) {
absSvc.setAccessStrategy(accessStrategy);
}
final RegisteredServiceUsernameAttributeProvider usernameAttributeProvider =
this.usernameAttributeProviderMapper.toUsernameAttributeProvider(data);
if (usernameAttributeProvider != null) {
absSvc.setUsernameAttributeProvider(usernameAttributeProvider);
}
final RegisteredServiceProxyPolicy proxyPolicy = this.proxyPolicyMapper.toProxyPolicy(data);
if (proxyPolicy != null) {
absSvc.setProxyPolicy(proxyPolicy);
}
final RegisteredServiceAttributeReleasePolicy attrPolicy = this.attributeReleasePolicyMapper
.toAttributeReleasePolicy(data);
if (attrPolicy != null) {
absSvc.setAttributeReleasePolicy(attrPolicy);
}
final RegisteredServiceMultifactorPolicy mfaPolicy = this.multifactorAuthenticationMapper.toMultifactorPolicy(data);
if (mfaPolicy != null) {
absSvc.setMultifactorPolicy(mfaPolicy);
}
}
return svc;
}
}