package com.constellio.model.conf.ldap;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import org.joda.time.Duration;
import org.junit.Before;
import org.junit.Test;
import com.constellio.model.conf.LDAPTestConfig;
import com.constellio.model.conf.ldap.config.AzureADServerConfig;
import com.constellio.model.conf.ldap.config.AzureADUserSynchConfig;
import com.constellio.model.conf.ldap.config.LDAPServerConfiguration;
import com.constellio.model.conf.ldap.config.LDAPUserSyncConfiguration;
import com.constellio.sdk.tests.ConstellioTest;
public class LDAPConfigurationManagerAcceptanceTest extends ConstellioTest {
private LDAPConfigurationManager ldapConfigManager;
private RegexFilter azurUsersRegex = new RegexFilter("zAcceptUser", "zRejectUser"), azurGroupsRegex = new RegexFilter("zAccG",
"zRejectGroups");
private Duration azurDuration = new Duration(120000 * 60);
private List<String> azurCollections = Arrays.asList("zAzurColl1", "zAzurColl2");
@Before
public void setup()
throws Exception {
//pour avoir le fichier d encryptage
prepareSystem(
withZeCollection()
);
sdkProperties = new HashMap<>();
ldapConfigManager = getModelLayerFactory().getLdapConfigurationManager();
}
private void saveValidLDAPConfig() {
LDAPServerConfiguration ldapServerConfiguration = LDAPTestConfig.getLDAPServerConfiguration();
LDAPUserSyncConfiguration ldapUserSyncConfiguration = LDAPTestConfig.getLDAPUserSyncConfiguration();
ldapConfigManager.saveLDAPConfiguration(ldapServerConfiguration, ldapUserSyncConfiguration);
}
private void saveValidAzurConfig() {
AzureADServerConfig serverConfig = new AzureADServerConfig().setClientId("zclientId").setAuthorityTenantId("zTanentId");
LDAPServerConfiguration ldapServerConfiguration = new LDAPServerConfiguration(serverConfig, false);
AzureADUserSynchConfig azurConf = new AzureADUserSynchConfig().setApplicationKey("zApplicationKey").setClientId("synchClientId");
LDAPUserSyncConfiguration ldapUserSyncConfiguration = new LDAPUserSyncConfiguration(azurConf, azurUsersRegex,
azurGroupsRegex, azurDuration, azurCollections);
ldapConfigManager.saveLDAPConfiguration(ldapServerConfiguration, ldapUserSyncConfiguration);
}
@Test
public void givenConfigWithDurationWhenSaveConfigurationThenDurationIsSavedAsNull()
throws Exception {
LDAPServerConfiguration ldapServerConfiguration = LDAPTestConfig.getLDAPServerConfiguration();
LDAPUserSyncConfiguration ldapUserSyncConfiguration = LDAPTestConfig.getLDAPUserSyncConfiguration();
ldapUserSyncConfiguration.setDurationBetweenExecution(new Duration(0));
ldapConfigManager.saveLDAPConfiguration(ldapServerConfiguration, ldapUserSyncConfiguration);
assertThat(ldapConfigManager.isLDAPAuthentication()).isEqualTo(true);
assertThat(ldapConfigManager.idUsersSynchActivated()).isEqualTo(false);
ldapUserSyncConfiguration = ldapConfigManager.getLDAPUserSyncConfiguration();
assertThat(ldapUserSyncConfiguration.getDurationBetweenExecution()).isNull();
}
@Test(expected = TooShortDurationRuntimeException.class)
public void givenConfigWithAShortDurationWhenSaveConfigurationThenException()
throws Exception {
LDAPServerConfiguration ldapServerConfiguration = LDAPTestConfig.getLDAPServerConfiguration();
LDAPUserSyncConfiguration ldapUserSyncConfiguration = LDAPTestConfig.getLDAPUserSyncConfiguration();
ldapUserSyncConfiguration.setDurationBetweenExecution(new Duration(LDAPConfigurationManager.MIN_DURATION - 1));
ldapConfigManager.saveLDAPConfiguration(ldapServerConfiguration, ldapUserSyncConfiguration);
}
@Test
public void givenConfigWithANonShortDurationWhenSaveConfigurationSavedCorrectly()
throws Exception {
LDAPServerConfiguration ldapServerConfiguration = LDAPTestConfig.getLDAPServerConfiguration();
LDAPUserSyncConfiguration ldapUserSyncConfiguration = LDAPTestConfig.getLDAPUserSyncConfiguration();
Duration nonShortDuration = new Duration(LDAPConfigurationManager.MIN_DURATION + 1);
ldapUserSyncConfiguration.setDurationBetweenExecution(nonShortDuration);
ldapConfigManager.saveLDAPConfiguration(ldapServerConfiguration, ldapUserSyncConfiguration);
ldapUserSyncConfiguration = ldapConfigManager.getLDAPUserSyncConfiguration();
assertThat(ldapUserSyncConfiguration.getDurationBetweenExecution().toStandardMinutes())
.isEqualTo(nonShortDuration.toStandardMinutes());
}
@Test
public void givenLDAPSavedAfterAzurWhenGetLDAPServerConfigurationThenItIsCreatedWithConfigInformation()
throws Exception {
saveValidAzurConfig();
saveValidLDAPConfig();
assertThat(ldapConfigManager.isLDAPAuthentication()).isEqualTo(true);
LDAPServerConfiguration ldapServerConfiguration = ldapConfigManager.getLDAPServerConfiguration();
assertThat(ldapServerConfiguration.getDirectoryType()).isEqualTo(LDAPDirectoryType.ACTIVE_DIRECTORY);
assertThat(ldapServerConfiguration.getUrls()).containsAll(LDAPTestConfig.getUrls());
assertThat(ldapServerConfiguration.getDomains()).containsAll(LDAPTestConfig.getDomains());
assertThat(ldapServerConfiguration.getTenantName()).isNull();
assertThat(ldapServerConfiguration.getClientId()).isNull();
}
@Test
public void givenLDAPSavedAfterAzurWhenGetLDAPSyncConfigurationThenItIsCreatedWithConfigInformation()
throws Exception {
saveValidAzurConfig();
saveValidLDAPConfig();
LDAPUserSyncConfiguration ldapUserSyncConfiguration = ldapConfigManager.getLDAPUserSyncConfiguration(true);
//assertThat(ldapUserSyncConfiguration.getDurationBetweenExecution().getStandardDays()).isEqualTo(1l);
assertThat(ldapUserSyncConfiguration.getGroupBaseContextList())
.containsAll(Arrays.asList("OU=Groupes,DC=test,DC=doculibre,DC=ca"));
assertThat(ldapUserSyncConfiguration.getUsersWithoutGroupsBaseContextList())
.containsAll(Arrays.asList("CN=Users,DC=test,DC=doculibre,DC=ca"));
assertThat(ldapUserSyncConfiguration.getUser()).isEqualTo(LDAPTestConfig.getUser());
assertThat(ldapUserSyncConfiguration.getPassword()).isEqualTo(LDAPTestConfig.getPassword());
assertThat(ldapUserSyncConfiguration.getGroupFilter().getAcceptedRegex())
.isEqualTo(LDAPTestConfig.getGroupFiler().getAcceptedRegex());
assertThat(ldapUserSyncConfiguration.getGroupFilter().getRejectedRegex())
.isEqualTo(LDAPTestConfig.getGroupFiler().getRejectedRegex());
assertThat(ldapUserSyncConfiguration.getUserFilter().getAcceptedRegex())
.isEqualTo(LDAPTestConfig.getUserFiler().getAcceptedRegex());
assertThat(ldapUserSyncConfiguration.getUserFilter().getRejectedRegex())
.isEqualTo(LDAPTestConfig.getUserFiler().getRejectedRegex());
assertThat(ldapUserSyncConfiguration.isGroupAccepted("GGS-SEC-ALF_SCEC_ext")).isFalse();
assertThat(ldapUserSyncConfiguration.isGroupAccepted("GGS-SEC-ALF_SCEC")).isTrue();
assertThat(ldapUserSyncConfiguration.isGroupAccepted("GGS-SEC-ALF_SCEC_ext")).isFalse();
assertThat(ldapUserSyncConfiguration.isGroupAccepted("GGS-SEC-ALF_tous_centres_SCEC")).isFalse();
assertThat(ldapUserSyncConfiguration.isUserAccepted("testuser")).isTrue();
assertThat(ldapUserSyncConfiguration.isUserAccepted("testAuj")).isFalse();
assertThat(ldapUserSyncConfiguration.isUserAccepted("admin")).isFalse();
assertThat(ldapUserSyncConfiguration.getClientSecret()).isNull();
}
@Test
public void givenAzurSavedAfterLDAPWhenGetLDAPServerConfigurationThenItIsCreatedWithConfigInformation()
throws Exception {
saveValidLDAPConfig();
saveValidAzurConfig();
assertThat(ldapConfigManager.isLDAPAuthentication()).isEqualTo(false);
LDAPServerConfiguration ldapServerConfiguration = ldapConfigManager.getLDAPServerConfiguration();
assertThat(ldapServerConfiguration.getClientId()).isEqualTo("zclientId");
assertThat(ldapServerConfiguration.getTenantName()).isEqualTo("zTanentId");
assertThat(ldapServerConfiguration.getDirectoryType()).isEqualTo(LDAPDirectoryType.AZURE_AD);
assertThat(ldapServerConfiguration.getUrls()).isNull();
assertThat(ldapServerConfiguration.getDomains()).isNull();
}
@Test
public void givenAzurSavedAfterLDAPWhenGetLDAPSyncConfigurationThenItIsCreatedWithConfigInformation()
throws Exception {
saveValidLDAPConfig();
saveValidAzurConfig();
LDAPUserSyncConfiguration ldapUserSyncConfiguration = ldapConfigManager.getLDAPUserSyncConfiguration(true);
assertThat(ldapUserSyncConfiguration.getClientSecret()).isEqualTo("zApplicationKey");
assertThat(ldapUserSyncConfiguration.getClientId()).isEqualTo("synchClientId");
assertThat(ldapUserSyncConfiguration.getGroupFilter().getAcceptedRegex()).isEqualTo(azurGroupsRegex.getAcceptedRegex());
assertThat(ldapUserSyncConfiguration.getGroupFilter().getRejectedRegex()).isEqualTo(azurGroupsRegex.getRejectedRegex());
assertThat(ldapUserSyncConfiguration.getUserFilter().getAcceptedRegex()).isEqualTo(azurUsersRegex.getAcceptedRegex());
assertThat(ldapUserSyncConfiguration.getUserFilter().getRejectedRegex()).isEqualTo(azurUsersRegex.getRejectedRegex());
assertThat(ldapUserSyncConfiguration.getSelectedCollectionsCodes()).containsExactlyElementsOf(azurCollections);
assertThat(ldapUserSyncConfiguration.getGroupBaseContextList()).isNull();
assertThat(ldapUserSyncConfiguration.getUsersWithoutGroupsBaseContextList()).isNull();
assertThat(ldapUserSyncConfiguration.getUser()).isNull();
assertThat(ldapUserSyncConfiguration.getPassword()).isNull();
}
}