blob: 807be22a4861ef3b52a2fba623e9f7e386caf105 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.syncope.fit.core;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;
import java.io.IOException;
import java.util.EnumSet;
import java.util.List;
import java.util.UUID;
import javax.ws.rs.core.Response;
import org.apache.commons.lang3.ClassUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.syncope.common.lib.SyncopeClientException;
import org.apache.syncope.common.lib.SyncopeConstants;
import org.apache.syncope.common.lib.auth.AuthModuleConf;
import org.apache.syncope.common.lib.auth.DuoMfaAuthModuleConf;
import org.apache.syncope.common.lib.auth.GoogleMfaAuthModuleConf;
import org.apache.syncope.common.lib.auth.JDBCAuthModuleConf;
import org.apache.syncope.common.lib.auth.JaasAuthModuleConf;
import org.apache.syncope.common.lib.auth.LDAPAuthModuleConf;
import org.apache.syncope.common.lib.auth.OIDCAuthModuleConf;
import org.apache.syncope.common.lib.auth.SAML2IdPAuthModuleConf;
import org.apache.syncope.common.lib.auth.StaticAuthModuleConf;
import org.apache.syncope.common.lib.auth.SyncopeAuthModuleConf;
import org.apache.syncope.common.lib.auth.U2FAuthModuleConf;
import org.apache.syncope.common.lib.to.AuthModuleTO;
import org.apache.syncope.common.lib.to.ItemTO;
import org.apache.syncope.common.rest.api.service.AuthModuleService;
import org.apache.syncope.fit.AbstractITCase;
import org.junit.jupiter.api.Test;
public class AuthModuleITCase extends AbstractITCase {
private enum AuthModuleSupportedType {
GOOGLE_MFA,
DUO,
SAML2_IDP,
STATIC,
SYNCOPE,
LDAP,
JAAS,
JDBC,
U2F,
OIDC;
};
private static AuthModuleTO createAuthModule(final AuthModuleTO authModule) {
Response response = AUTH_MODULE_SERVICE.create(authModule);
if (response.getStatusInfo().getStatusCode() != Response.Status.CREATED.getStatusCode()) {
Exception ex = CLIENT_FACTORY.getExceptionMapper().fromResponse(response);
if (ex != null) {
throw (RuntimeException) ex;
}
}
return getObject(response.getLocation(), AuthModuleService.class, authModule.getClass());
}
private static AuthModuleTO buildAuthModuleTO(final AuthModuleSupportedType type) {
AuthModuleTO authModuleTO = new AuthModuleTO();
authModuleTO.setKey("Test" + type + "AuthenticationModule" + getUUIDString());
authModuleTO.setDescription("A test " + type + " Authentication Module");
AuthModuleConf conf;
switch (type) {
case LDAP:
conf = new LDAPAuthModuleConf();
LDAPAuthModuleConf.class.cast(conf).setBaseDn("dc=example,dc=org");
LDAPAuthModuleConf.class.cast(conf).setSearchFilter("cn={user}");
LDAPAuthModuleConf.class.cast(conf).setSubtreeSearch(true);
LDAPAuthModuleConf.class.cast(conf).setLdapUrl("ldap://localhost:1389");
LDAPAuthModuleConf.class.cast(conf).setUserIdAttribute("uid");
LDAPAuthModuleConf.class.cast(conf).setBaseDn("cn=Directory Manager,dc=example,dc=org");
LDAPAuthModuleConf.class.cast(conf).setBindCredential("Password");
break;
case GOOGLE_MFA:
conf = new GoogleMfaAuthModuleConf();
GoogleMfaAuthModuleConf.class.cast(conf).setCodeDigits(6);
GoogleMfaAuthModuleConf.class.cast(conf).setIssuer("SyncopeTest");
GoogleMfaAuthModuleConf.class.cast(conf).setLabel("Syncope");
GoogleMfaAuthModuleConf.class.cast(conf).setTimeStepSize(30);
GoogleMfaAuthModuleConf.class.cast(conf).setWindowSize(3);
break;
case DUO:
conf = new DuoMfaAuthModuleConf();
DuoMfaAuthModuleConf.class.cast(conf).setSecretKey("Q2IU2i6BFNd6VYflZT8Evl6lF7oPlj4PM15BmRU7");
DuoMfaAuthModuleConf.class.cast(conf).setIntegrationKey("DIOXVRZD1UMZ8XXMNFQ6");
DuoMfaAuthModuleConf.class.cast(conf).setApiHost("theapi.duosecurity.com");
DuoMfaAuthModuleConf.class.cast(conf).setApplicationKey("u4IHCaREMB7Cb0S6QMISAgHycpj6lPBkDGfWt99I");
break;
case JAAS:
conf = new JaasAuthModuleConf();
JaasAuthModuleConf.class.cast(conf).setKerberosKdcSystemProperty("sample-value");
JaasAuthModuleConf.class.cast(conf).setKerberosRealmSystemProperty("sample-value");
JaasAuthModuleConf.class.cast(conf).setLoginConfigType("JavaLoginConfig");
JaasAuthModuleConf.class.cast(conf).setRealm("SYNCOPE");
JaasAuthModuleConf.class.cast(conf).setLoginConfigurationFile("/opt/jaas/login.conf");
break;
case JDBC:
conf = new JDBCAuthModuleConf();
JDBCAuthModuleConf.class.cast(conf).setSql("SELECT * FROM table WHERE name=?");
JDBCAuthModuleConf.class.cast(conf).setFieldPassword("password");
JDBCAuthModuleConf.class.cast(conf).getPrincipalAttributeList().addAll(
List.of("sn", "cn:commonName", "givenName"));
break;
case OIDC:
conf = new OIDCAuthModuleConf();
OIDCAuthModuleConf.class.cast(conf).setId("OIDCTestId");
OIDCAuthModuleConf.class.cast(conf).setDiscoveryUri("www.testurl.com");
OIDCAuthModuleConf.class.cast(conf).setUserIdAttribute("username");
OIDCAuthModuleConf.class.cast(conf).setResponseType("code");
OIDCAuthModuleConf.class.cast(conf).setScope("openid email profile");
break;
case SAML2_IDP:
conf = new SAML2IdPAuthModuleConf();
SAML2IdPAuthModuleConf.class.cast(conf).setServiceProviderEntityId("testEntityId");
SAML2IdPAuthModuleConf.class.cast(conf).setProviderName("testProviderName");
break;
case SYNCOPE:
conf = new SyncopeAuthModuleConf();
SyncopeAuthModuleConf.class.cast(conf).setDomain(SyncopeConstants.MASTER_DOMAIN);
break;
case U2F:
conf = new U2FAuthModuleConf();
U2FAuthModuleConf.class.cast(conf).setExpireDevices(50);
break;
case STATIC:
default:
conf = new StaticAuthModuleConf();
StaticAuthModuleConf.class.cast(conf).getUsers().put("user1", UUID.randomUUID().toString());
StaticAuthModuleConf.class.cast(conf).getUsers().put("user2", "user2Password123");
break;
}
authModuleTO.setConf(conf);
ItemTO keyMapping = new ItemTO();
keyMapping.setIntAttrName("uid");
keyMapping.setExtAttrName("username");
authModuleTO.getItems().add(keyMapping);
ItemTO fullnameMapping = new ItemTO();
fullnameMapping.setIntAttrName("cn");
fullnameMapping.setExtAttrName("fullname");
authModuleTO.getItems().add(fullnameMapping);
return authModuleTO;
}
private static boolean isSpecificConf(final AuthModuleConf conf, final Class<? extends AuthModuleConf> clazz) {
return ClassUtils.isAssignable(clazz, conf.getClass());
}
@Test
public void list() {
List<AuthModuleTO> authModuleTOs = AUTH_MODULE_SERVICE.list();
assertNotNull(authModuleTOs);
assertFalse(authModuleTOs.isEmpty());
assertTrue(authModuleTOs.stream().anyMatch(
authModule -> isSpecificConf(authModule.getConf(), LDAPAuthModuleConf.class)
&& authModule.getKey().equals("DefaultLDAPAuthModule")));
assertTrue(authModuleTOs.stream().anyMatch(
authModule -> isSpecificConf(authModule.getConf(), JDBCAuthModuleConf.class)
&& authModule.getKey().equals("DefaultJDBCAuthModule")));
assertTrue(authModuleTOs.stream().anyMatch(
authModule -> isSpecificConf(authModule.getConf(), GoogleMfaAuthModuleConf.class)
&& authModule.getKey().equals("DefaultGoogleMfaAuthModule")));
assertTrue(authModuleTOs.stream().anyMatch(
authModule -> isSpecificConf(authModule.getConf(), DuoMfaAuthModuleConf.class)
&& authModule.getKey().equals("DefaultDuoMfaAuthModule")));
assertTrue(authModuleTOs.stream().anyMatch(
authModule -> isSpecificConf(authModule.getConf(), OIDCAuthModuleConf.class)
&& authModule.getKey().equals("DefaultOIDCAuthModule")));
assertTrue(authModuleTOs.stream().anyMatch(
authModule -> isSpecificConf(authModule.getConf(), SAML2IdPAuthModuleConf.class)
&& authModule.getKey().equals("DefaultSAML2IdPAuthModule")));
assertTrue(authModuleTOs.stream().anyMatch(
authModule -> isSpecificConf(authModule.getConf(), JaasAuthModuleConf.class)
&& authModule.getKey().equals("DefaultJaasAuthModule")));
assertTrue(authModuleTOs.stream().anyMatch(
authModule -> isSpecificConf(authModule.getConf(), StaticAuthModuleConf.class)
&& authModule.getKey().equals("DefaultStaticAuthModule")));
assertTrue(authModuleTOs.stream().anyMatch(
authModule -> isSpecificConf(authModule.getConf(), SyncopeAuthModuleConf.class)
&& authModule.getKey().equals("DefaultSyncopeAuthModule")));
assertTrue(authModuleTOs.stream().anyMatch(
authModule -> isSpecificConf(authModule.getConf(), U2FAuthModuleConf.class)
&& authModule.getKey().equals("DefaultU2FAuthModule")));
}
@Test
public void getLDAPAuthModule() {
AuthModuleTO authModuleTO = AUTH_MODULE_SERVICE.read("DefaultLDAPAuthModule");
assertNotNull(authModuleTO);
assertTrue(StringUtils.isNotBlank(authModuleTO.getDescription()));
assertTrue(isSpecificConf(authModuleTO.getConf(), LDAPAuthModuleConf.class));
assertFalse(isSpecificConf(authModuleTO.getConf(), JDBCAuthModuleConf.class));
}
@Test
public void getJDBCAuthModule() {
AuthModuleTO authModuleTO = AUTH_MODULE_SERVICE.read("DefaultJDBCAuthModule");
assertNotNull(authModuleTO);
assertTrue(StringUtils.isNotBlank(authModuleTO.getDescription()));
assertTrue(isSpecificConf(authModuleTO.getConf(), JDBCAuthModuleConf.class));
assertFalse(isSpecificConf(authModuleTO.getConf(), GoogleMfaAuthModuleConf.class));
}
@Test
public void getGoogleMfaAuthModule() {
AuthModuleTO authModuleTO = AUTH_MODULE_SERVICE.read("DefaultGoogleMfaAuthModule");
assertNotNull(authModuleTO);
assertTrue(StringUtils.isNotBlank(authModuleTO.getDescription()));
assertTrue(isSpecificConf(authModuleTO.getConf(), GoogleMfaAuthModuleConf.class));
assertFalse(isSpecificConf(authModuleTO.getConf(), OIDCAuthModuleConf.class));
}
@Test
public void getDuoMfaAuthModule() {
AuthModuleTO authModuleTO = AUTH_MODULE_SERVICE.read("DefaultDuoMfaAuthModule");
assertNotNull(authModuleTO);
assertTrue(StringUtils.isNotBlank(authModuleTO.getDescription()));
assertTrue(isSpecificConf(authModuleTO.getConf(), DuoMfaAuthModuleConf.class));
}
@Test
public void getOIDCAuthModule() {
AuthModuleTO authModuleTO = AUTH_MODULE_SERVICE.read("DefaultOIDCAuthModule");
assertNotNull(authModuleTO);
assertTrue(StringUtils.isNotBlank(authModuleTO.getDescription()));
assertTrue(isSpecificConf(authModuleTO.getConf(), OIDCAuthModuleConf.class));
assertFalse(isSpecificConf(authModuleTO.getConf(), SAML2IdPAuthModuleConf.class));
}
@Test
public void getSAML2IdPAuthModule() {
AuthModuleTO authModuleTO = AUTH_MODULE_SERVICE.read("DefaultSAML2IdPAuthModule");
assertNotNull(authModuleTO);
assertTrue(StringUtils.isNotBlank(authModuleTO.getDescription()));
assertTrue(isSpecificConf(authModuleTO.getConf(), SAML2IdPAuthModuleConf.class));
assertFalse(isSpecificConf(authModuleTO.getConf(), JaasAuthModuleConf.class));
}
@Test
public void getJaasAuthModule() {
AuthModuleTO authModuleTO = AUTH_MODULE_SERVICE.read("DefaultJaasAuthModule");
assertNotNull(authModuleTO);
assertTrue(StringUtils.isNotBlank(authModuleTO.getDescription()));
assertTrue(isSpecificConf(authModuleTO.getConf(), JaasAuthModuleConf.class));
assertFalse(isSpecificConf(authModuleTO.getConf(), StaticAuthModuleConf.class));
}
@Test
public void getStaticAuthModule() {
AuthModuleTO authModuleTO = AUTH_MODULE_SERVICE.read("DefaultStaticAuthModule");
assertNotNull(authModuleTO);
assertTrue(StringUtils.isNotBlank(authModuleTO.getDescription()));
assertTrue(isSpecificConf(authModuleTO.getConf(), StaticAuthModuleConf.class));
assertFalse(isSpecificConf(authModuleTO.getConf(), SyncopeAuthModuleConf.class));
}
@Test
public void getSyncopeAuthModule() {
AuthModuleTO authModuleTO = AUTH_MODULE_SERVICE.read("DefaultSyncopeAuthModule");
assertNotNull(authModuleTO);
assertTrue(StringUtils.isNotBlank(authModuleTO.getDescription()));
assertTrue(isSpecificConf(authModuleTO.getConf(), SyncopeAuthModuleConf.class));
assertFalse(isSpecificConf(authModuleTO.getConf(), U2FAuthModuleConf.class));
}
@Test
public void getU2FAuthModule() {
AuthModuleTO authModuleTO = AUTH_MODULE_SERVICE.read("DefaultU2FAuthModule");
assertNotNull(authModuleTO);
assertTrue(StringUtils.isNotBlank(authModuleTO.getDescription()));
assertTrue(isSpecificConf(authModuleTO.getConf(), U2FAuthModuleConf.class));
assertFalse(isSpecificConf(authModuleTO.getConf(), LDAPAuthModuleConf.class));
}
@Test
public void create() {
EnumSet.allOf(AuthModuleSupportedType.class).forEach(type -> {
AuthModuleTO authModuleTO = createAuthModule(buildAuthModuleTO(type));
assertNotNull(authModuleTO);
assertTrue(authModuleTO.getDescription().contains("A test " + type + " Authentication Module"));
assertEquals(2, authModuleTO.getItems().size());
});
}
@Test
public void updateGoogleMfaAuthModule() {
AuthModuleTO googleMfaAuthModuleTO = AUTH_MODULE_SERVICE.read("DefaultGoogleMfaAuthModule");
assertNotNull(googleMfaAuthModuleTO);
AuthModuleTO newGoogleMfaAuthModuleTO = buildAuthModuleTO(AuthModuleSupportedType.GOOGLE_MFA);
newGoogleMfaAuthModuleTO = createAuthModule(newGoogleMfaAuthModuleTO);
assertNotNull(newGoogleMfaAuthModuleTO);
AuthModuleConf conf = googleMfaAuthModuleTO.getConf();
assertNotNull(conf);
GoogleMfaAuthModuleConf.class.cast(conf).setLabel("newLabel");
newGoogleMfaAuthModuleTO.setConf(conf);
// update new auth module
AUTH_MODULE_SERVICE.update(newGoogleMfaAuthModuleTO);
newGoogleMfaAuthModuleTO = AUTH_MODULE_SERVICE.read(newGoogleMfaAuthModuleTO.getKey());
assertNotNull(newGoogleMfaAuthModuleTO);
conf = newGoogleMfaAuthModuleTO.getConf();
assertEquals("newLabel", GoogleMfaAuthModuleConf.class.cast(conf).getLabel());
}
@Test
public void updateDuoMfaAuthModule() {
AuthModuleTO duoMfaAuthModuleTO = AUTH_MODULE_SERVICE.read("DefaultDuoMfaAuthModule");
assertNotNull(duoMfaAuthModuleTO);
AuthModuleTO newDuoMfaAuthModuleTO = buildAuthModuleTO(AuthModuleSupportedType.DUO);
newDuoMfaAuthModuleTO = createAuthModule(newDuoMfaAuthModuleTO);
assertNotNull(newDuoMfaAuthModuleTO);
AuthModuleConf conf = duoMfaAuthModuleTO.getConf();
assertNotNull(conf);
String secretKey = UUID.randomUUID().toString();
DuoMfaAuthModuleConf.class.cast(conf).setSecretKey(secretKey);
newDuoMfaAuthModuleTO.setConf(conf);
// update new auth module
AUTH_MODULE_SERVICE.update(newDuoMfaAuthModuleTO);
newDuoMfaAuthModuleTO = AUTH_MODULE_SERVICE.read(newDuoMfaAuthModuleTO.getKey());
assertNotNull(newDuoMfaAuthModuleTO);
conf = newDuoMfaAuthModuleTO.getConf();
assertEquals(secretKey, DuoMfaAuthModuleConf.class.cast(conf).getSecretKey());
}
@Test
public void updateLDAPAuthModule() {
AuthModuleTO ldapAuthModuleTO = AUTH_MODULE_SERVICE.read("DefaultLDAPAuthModule");
assertNotNull(ldapAuthModuleTO);
AuthModuleTO newLdapAuthModuleTO = buildAuthModuleTO(AuthModuleSupportedType.LDAP);
newLdapAuthModuleTO = createAuthModule(newLdapAuthModuleTO);
assertNotNull(newLdapAuthModuleTO);
AuthModuleConf conf = ldapAuthModuleTO.getConf();
assertNotNull(conf);
LDAPAuthModuleConf.class.cast(conf).setSubtreeSearch(false);
newLdapAuthModuleTO.setConf(conf);
// update new auth module
AUTH_MODULE_SERVICE.update(newLdapAuthModuleTO);
newLdapAuthModuleTO = AUTH_MODULE_SERVICE.read(newLdapAuthModuleTO.getKey());
assertNotNull(newLdapAuthModuleTO);
conf = newLdapAuthModuleTO.getConf();
assertFalse(LDAPAuthModuleConf.class.cast(conf).isSubtreeSearch());
}
@Test
public void updateSAML2IdPAuthModule() {
AuthModuleTO saml2IdpAuthModuleTO = AUTH_MODULE_SERVICE.read("DefaultSAML2IdPAuthModule");
assertNotNull(saml2IdpAuthModuleTO);
AuthModuleTO newsaml2IdpAuthModuleTO = buildAuthModuleTO(AuthModuleSupportedType.SAML2_IDP);
newsaml2IdpAuthModuleTO = createAuthModule(newsaml2IdpAuthModuleTO);
assertNotNull(newsaml2IdpAuthModuleTO);
AuthModuleConf conf = saml2IdpAuthModuleTO.getConf();
assertNotNull(conf);
SAML2IdPAuthModuleConf.class.cast(conf).setServiceProviderEntityId("newEntityId");
newsaml2IdpAuthModuleTO.setConf(conf);
// update new auth module
AUTH_MODULE_SERVICE.update(newsaml2IdpAuthModuleTO);
newsaml2IdpAuthModuleTO = AUTH_MODULE_SERVICE.read(newsaml2IdpAuthModuleTO.getKey());
assertNotNull(newsaml2IdpAuthModuleTO);
conf = newsaml2IdpAuthModuleTO.getConf();
assertEquals("newEntityId", SAML2IdPAuthModuleConf.class.cast(conf).getServiceProviderEntityId());
}
@Test
public void updateOIDCAuthModule() {
AuthModuleTO oidcAuthModuleTO = AUTH_MODULE_SERVICE.read("DefaultOIDCAuthModule");
assertNotNull(oidcAuthModuleTO);
AuthModuleTO newOIDCAuthModuleTO = buildAuthModuleTO(AuthModuleSupportedType.OIDC);
newOIDCAuthModuleTO = createAuthModule(newOIDCAuthModuleTO);
assertNotNull(newOIDCAuthModuleTO);
AuthModuleConf conf = oidcAuthModuleTO.getConf();
assertNotNull(conf);
OIDCAuthModuleConf.class.cast(conf).setResponseType("newCode");
newOIDCAuthModuleTO.setConf(conf);
// update new auth module
AUTH_MODULE_SERVICE.update(newOIDCAuthModuleTO);
newOIDCAuthModuleTO = AUTH_MODULE_SERVICE.read(newOIDCAuthModuleTO.getKey());
assertNotNull(newOIDCAuthModuleTO);
conf = newOIDCAuthModuleTO.getConf();
assertEquals("newCode", OIDCAuthModuleConf.class.cast(conf).getResponseType());
}
@Test
public void updateJDBCAuthModule() {
AuthModuleTO jdbcAuthModuleTO = AUTH_MODULE_SERVICE.read("DefaultJDBCAuthModule");
assertNotNull(jdbcAuthModuleTO);
AuthModuleTO newJDBCAuthModuleTO = buildAuthModuleTO(AuthModuleSupportedType.JDBC);
newJDBCAuthModuleTO = createAuthModule(newJDBCAuthModuleTO);
assertNotNull(newJDBCAuthModuleTO);
AuthModuleConf conf = jdbcAuthModuleTO.getConf();
assertNotNull(conf);
JDBCAuthModuleConf.class.cast(conf).setFieldPassword("uPassword");
newJDBCAuthModuleTO.setConf(conf);
// update new auth module
AUTH_MODULE_SERVICE.update(newJDBCAuthModuleTO);
newJDBCAuthModuleTO = AUTH_MODULE_SERVICE.read(newJDBCAuthModuleTO.getKey());
assertNotNull(newJDBCAuthModuleTO);
conf = newJDBCAuthModuleTO.getConf();
assertEquals("uPassword", JDBCAuthModuleConf.class.cast(conf).getFieldPassword());
}
@Test
public void updateJaasAuthModule() {
AuthModuleTO jaasAuthModuleTO = AUTH_MODULE_SERVICE.read("DefaultJaasAuthModule");
assertNotNull(jaasAuthModuleTO);
AuthModuleTO newJaasAuthModuleTO = buildAuthModuleTO(AuthModuleSupportedType.JAAS);
newJaasAuthModuleTO = createAuthModule(newJaasAuthModuleTO);
assertNotNull(newJaasAuthModuleTO);
AuthModuleConf conf = jaasAuthModuleTO.getConf();
assertNotNull(conf);
JaasAuthModuleConf.class.cast(conf).setRealm("SYNCOPE_NEW");
newJaasAuthModuleTO.setConf(conf);
// update new auth module
AUTH_MODULE_SERVICE.update(newJaasAuthModuleTO);
newJaasAuthModuleTO = AUTH_MODULE_SERVICE.read(newJaasAuthModuleTO.getKey());
assertNotNull(newJaasAuthModuleTO);
conf = newJaasAuthModuleTO.getConf();
assertEquals("SYNCOPE_NEW", JaasAuthModuleConf.class.cast(conf).getRealm());
}
@Test
public void updateStaticAuthModule() {
AuthModuleTO staticAuthModuleTO = AUTH_MODULE_SERVICE.read("DefaultStaticAuthModule");
assertNotNull(staticAuthModuleTO);
AuthModuleTO newStaticAuthModuleTO = buildAuthModuleTO(AuthModuleSupportedType.STATIC);
newStaticAuthModuleTO = createAuthModule(newStaticAuthModuleTO);
assertNotNull(newStaticAuthModuleTO);
AuthModuleConf conf = staticAuthModuleTO.getConf();
assertNotNull(conf);
assertEquals(1, StaticAuthModuleConf.class.cast(conf).getUsers().size());
StaticAuthModuleConf.class.cast(conf).getUsers().put("user3", "user3Password123");
newStaticAuthModuleTO.setConf(conf);
// update new auth module
AUTH_MODULE_SERVICE.update(newStaticAuthModuleTO);
newStaticAuthModuleTO = AUTH_MODULE_SERVICE.read(newStaticAuthModuleTO.getKey());
assertNotNull(newStaticAuthModuleTO);
conf = newStaticAuthModuleTO.getConf();
assertEquals(2, StaticAuthModuleConf.class.cast(conf).getUsers().size());
}
@Test
public void updateU2fAuthModule() {
AuthModuleTO u2fAuthModuleTO = AUTH_MODULE_SERVICE.read("DefaultU2FAuthModule");
assertNotNull(u2fAuthModuleTO);
AuthModuleTO newU2fAuthModuleTO = buildAuthModuleTO(AuthModuleSupportedType.U2F);
newU2fAuthModuleTO = createAuthModule(newU2fAuthModuleTO);
assertNotNull(newU2fAuthModuleTO);
AuthModuleConf conf = u2fAuthModuleTO.getConf();
assertNotNull(conf);
U2FAuthModuleConf.class.cast(conf).setExpireDevices(24);
newU2fAuthModuleTO.setConf(conf);
// update new auth module
AUTH_MODULE_SERVICE.update(newU2fAuthModuleTO);
newU2fAuthModuleTO = AUTH_MODULE_SERVICE.read(newU2fAuthModuleTO.getKey());
assertNotNull(newU2fAuthModuleTO);
conf = newU2fAuthModuleTO.getConf();
assertEquals(24, U2FAuthModuleConf.class.cast(conf).getExpireDevices());
}
@Test
public void updateSyncopeAuthModule() {
AuthModuleTO syncopeAuthModuleTO = AUTH_MODULE_SERVICE.read("DefaultSyncopeAuthModule");
assertNotNull(syncopeAuthModuleTO);
AuthModuleTO newSyncopeAuthModuleTO = buildAuthModuleTO(AuthModuleSupportedType.SYNCOPE);
newSyncopeAuthModuleTO = createAuthModule(newSyncopeAuthModuleTO);
assertNotNull(newSyncopeAuthModuleTO);
AuthModuleConf conf = syncopeAuthModuleTO.getConf();
assertNotNull(conf);
SyncopeAuthModuleConf.class.cast(conf).setDomain("Two");
newSyncopeAuthModuleTO.setConf(conf);
// update new auth module
AUTH_MODULE_SERVICE.update(newSyncopeAuthModuleTO);
newSyncopeAuthModuleTO = AUTH_MODULE_SERVICE.read(newSyncopeAuthModuleTO.getKey());
assertNotNull(newSyncopeAuthModuleTO);
conf = newSyncopeAuthModuleTO.getConf();
assertEquals("Two", SyncopeAuthModuleConf.class.cast(conf).getDomain());
}
@Test
public void delete() throws IOException {
EnumSet.allOf(AuthModuleSupportedType.class).forEach(type -> {
AuthModuleTO read = createAuthModule(buildAuthModuleTO(type));
assertNotNull(read);
AUTH_MODULE_SERVICE.delete(read.getKey());
try {
AUTH_MODULE_SERVICE.read(read.getKey());
fail("This should not happen");
} catch (SyncopeClientException e) {
assertNotNull(e);
}
});
}
}