diff --git a/config/pmd/test_pmd.xml b/config/pmd/test_pmd.xml index ac03639..d302c54 100644 --- a/config/pmd/test_pmd.xml +++ b/config/pmd/test_pmd.xml @@ -9,8 +9,9 @@ - + + diff --git a/src/main/java/com/knecon/fforesight/tenantusermanagement/service/TenantManagementService.java b/src/main/java/com/knecon/fforesight/tenantusermanagement/service/TenantManagementService.java index 24bc30b..0ecb211 100644 --- a/src/main/java/com/knecon/fforesight/tenantusermanagement/service/TenantManagementService.java +++ b/src/main/java/com/knecon/fforesight/tenantusermanagement/service/TenantManagementService.java @@ -10,7 +10,6 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.UUID; -import java.util.stream.Collectors; import javax.sql.DataSource; @@ -83,7 +82,7 @@ public class TenantManagementService implements TenantProvider { @SneakyThrows public TenantResponse createTenant(TenantRequest tenantRequest) { - log.info("Tenants are: {}", tenantRepository.findAll().stream().map(TenantEntity::getTenantId).collect(Collectors.toList())); + log.info("Tenants are: {}", tenantRepository.findAll().stream().map(TenantEntity::getTenantId).toList()); log.info("Requested to create tenant for: {}", tenantRequest.getTenantId()); try { @@ -193,6 +192,8 @@ public class TenantManagementService implements TenantProvider { throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, "Failed to create KC realm"); } + setPasswordPolicyForRealm(tenantRequest.getTenantId()); + generalConfigurationService.initGeneralConfiguration(tenantRequest.getTenantId()); keyCloakRoleManagerService.updateRoles(tenantRequest.getTenantId()); } @@ -295,12 +296,20 @@ public class TenantManagementService implements TenantProvider { rolesRepresentation.setRealm(roles); realm.setRoles(rolesRepresentation); - realm.setUsers(users.stream().map(this::toUserRepresentation).collect(Collectors.toList())); + realm.setUsers(users.stream().map(this::toUserRepresentation).toList()); keycloak.getAdminClient().realms().create(realm); } + private void setPasswordPolicyForRealm(String tenantId) { + + var realm = realmService.realm(tenantId).toRepresentation(); + realm.setPasswordPolicy("digits(1) and length(12) and lowerCase(1) and notEmail and notUsername and specialChars(1) and upperCase(1)"); + realmService.realm(tenantId).update(realm); + } + + private boolean tryToAccessRealm(String tenantId) { try { @@ -314,7 +323,7 @@ public class TenantManagementService implements TenantProvider { private UserRepresentation toUserRepresentation(TenantUser redUser) { var credentialRepresentation = new CredentialRepresentation(); - credentialRepresentation.setType("password"); + credentialRepresentation.setType(CredentialRepresentation.PASSWORD); credentialRepresentation.setValue(redUser.getPassword()); var user = new UserRepresentation(); @@ -442,9 +451,10 @@ public class TenantManagementService implements TenantProvider { public List getTenants() { - return tenantRepository.findAll().stream().map(this::convert).collect(Collectors.toList()); + return tenantRepository.findAll().stream().map(this::convert).toList(); } + public TenantResponse removePasswords(TenantResponse tenantResponse) { if (tenantResponse.getDatabaseConnection() != null) { @@ -459,7 +469,7 @@ public class TenantManagementService implements TenantProvider { tenantResponse.getAzureStorageConnection().setConnectionString(PASSWORD); } - if (tenantResponse.getS3StorageConnection() != null){ + if (tenantResponse.getS3StorageConnection() != null) { tenantResponse.getS3StorageConnection().setSecret(PASSWORD); } diff --git a/src/test/java/com/knecon/fforesight/tests/TenantsTest.java b/src/test/java/com/knecon/fforesight/tests/TenantsTest.java index 0e4195d..f2c3cfc 100644 --- a/src/test/java/com/knecon/fforesight/tests/TenantsTest.java +++ b/src/test/java/com/knecon/fforesight/tests/TenantsTest.java @@ -18,6 +18,7 @@ import com.knecon.fforesight.tenantcommons.model.DatabaseConnection; import com.knecon.fforesight.tenantcommons.model.S3StorageConnection; import com.knecon.fforesight.tenantcommons.model.SearchConnection; import com.knecon.fforesight.tenantusermanagement.model.TenantRequest; +import com.knecon.fforesight.tenantusermanagement.service.RealmService; import com.knecon.fforesight.utils.TestTenantService; import feign.FeignException; @@ -33,6 +34,10 @@ public class TenantsTest extends AbstractTenantUserManagementIntegrationTest { @Autowired private EncryptionDecryptionService encryptionService; + @Autowired + private RealmService realmService; + + private static final String PASSWORD = "**********"; @@ -52,6 +57,7 @@ public class TenantsTest extends AbstractTenantUserManagementIntegrationTest { assertThat(tenantsClient.getTenants().stream().anyMatch(t -> t.getTenantId().equals("new_tenant"))).isTrue(); TenantContext.clear(); + } @Test @@ -221,4 +227,19 @@ public class TenantsTest extends AbstractTenantUserManagementIntegrationTest { TenantContext.clear(); } + + @Test + public void testPasswordPolicy() { + testTenantService.createTestTenantIfNotExists("new_tenant", minioPort); + + TenantContext.setTenantId("new_tenant"); + + assertThat(tenantsClient.getTenant("new_tenant")).isNotNull(); + + var passwordPolicy = realmService.realm("new_tenant").toRepresentation().getPasswordPolicy(); + + assertThat(passwordPolicy).isNotEmpty(); + + TenantContext.clear(); + } }