diff --git a/build.gradle.kts b/build.gradle.kts index 653f710..6a045c0 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -60,7 +60,7 @@ tasks.named("bootBuildImage") { dependencies { - implementation("com.knecon.fforesight:keycloak-commons:0.9.0") + implementation("com.knecon.fforesight:keycloak-commons:0.10.0") implementation("com.knecon.fforesight:swagger-commons:0.5.0") implementation("org.postgresql:postgresql:42.5.4") implementation("com.google.guava:guava:31.1-jre") diff --git a/pom.xml b/pom.xml deleted file mode 100644 index 0795564..0000000 --- a/pom.xml +++ /dev/null @@ -1,191 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 3.0.6 - - - com.knecon.fforesight - tenant-user-management-service - 1.0-SNAPSHOT - tenant-user-management-service - tenant-user-management-service - - 17 - 21.0.1 - 1.7 - 31.1-jre - 0.5.0 - 0.9.0 - - - - - com.knecon.fforesight - keycloak-commons - ${keycloak-commons.version} - - - - com.knecon.fforesight - swagger-commons - ${swagger-commons.version} - - - - org.postgresql - postgresql - ${postgresql.version} - - - - com.google.guava - guava - ${guava.version} - - - - org.liquibase - liquibase-core - ${liquibase.version} - - - - org.keycloak - keycloak-admin-client - ${keycloak.version} - - - - org.springframework.boot - spring-boot-starter-amqp - - - - org.springframework.boot - spring-boot-starter-validation - - - - org.springframework.retry - spring-retry - - - - org.springframework.boot - spring-boot-starter-oauth2-resource-server - - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-starter-security - - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-data-jpa - - - - org.apache.commons - commons-lang3 - - - - commons-validator - commons-validator - ${commons-validator.version} - compile - - - - org.springframework.boot - spring-boot-configuration-processor - true - - - org.projectlombok - lombok - true - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - - - org.sonarsource.scanner.maven - sonar-maven-plugin - 3.9.0.2155 - - - org.owasp - dependency-check-maven - 6.3.1 - - ALL - - - - org.jacoco - jacoco-maven-plugin - - - prepare-agent - - prepare-agent - - - - report - - report - - - - - - - - - org.jacoco - jacoco-maven-plugin - 0.8.8 - - - prepare-agent - - prepare-agent - - - - report - - report-aggregate - - verify - - - - - - - diff --git a/src/main/java/com/knecon/fforesight/tenantusermanagement/DevConfiguration.java b/src/main/java/com/knecon/fforesight/tenantusermanagement/DevConfiguration.java index 9226539..af215fe 100644 --- a/src/main/java/com/knecon/fforesight/tenantusermanagement/DevConfiguration.java +++ b/src/main/java/com/knecon/fforesight/tenantusermanagement/DevConfiguration.java @@ -24,7 +24,6 @@ import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.StatementCallback; import org.springframework.jdbc.datasource.SingleConnectionDataSource; -import com.knecon.fforesight.tenantcommons.TenantContext; import com.knecon.fforesight.tenantcommons.model.DatabaseConnection; import com.knecon.fforesight.tenantcommons.model.S3StorageConnection; import com.knecon.fforesight.tenantcommons.model.SearchConnection; @@ -51,47 +50,50 @@ public class DevConfiguration { @PostConstruct - @SneakyThrows - public void createDefaultTenant() { - - log.info("Creating Redaction Tenant"); - // tenantRepository.deleteAll(); - - if (tenantManagementService.getTenants().isEmpty()) { - - var jdbcUrl = masterJDBCURL.substring(0, masterJDBCURL.lastIndexOf('/') + 1) + "redaction?currentSchema=redaction"; - - createDatabase("redaction", "redaction"); - createSchema(jdbcUrl, "redaction", "redaction"); - - var tenantRequest = TenantRequest.builder() - .tenantId("redaction") - .displayName("Redaction default") - .guid(UUID.randomUUID().toString()) - .databaseConnection(DatabaseConnection.builder() - .driver("postgresql") - .host("localhost") - .port("5432") - .database("redaction") - .schema("redaction") - .username("redaction") - .password("redaction") - .build()) - .searchConnection(SearchConnection.builder() - .hosts(Set.of("localhost")) - .port(9200) - .scheme("http") - .numberOfShards("1") - .numberOfReplicas("5") - .build()) - .s3StorageConnection(S3StorageConnection.builder().key("minioadmin").secret("minioadmin").bucketName("redaction").endpoint("http://localhost:9000").build()) - .build(); - - tenantManagementService.createTenant(tenantRequest); + public void postConstruct() { + var tenant = 1; + try { + tenantManagementService.getTenant("tenant" + tenant); + } catch (Exception e) { + createDefaultTenant(tenant); } - TenantContext.setTenantId("redaction"); + } + + + @SneakyThrows + public void createDefaultTenant(int number) { + + String tenantsDBName = "tenants"; + String tenantsDBPassword = "tenants"; + String tenantName = "tenant" + number; + log.info("Creating Tenant {} ", tenantName); + + var jdbcUrl = masterJDBCURL.substring(0, masterJDBCURL.lastIndexOf('/') + 1) + tenantsDBName + "?currentSchema=" + tenantName; + + createDatabase(tenantsDBName, tenantsDBPassword); + createSchema(jdbcUrl, tenantName, tenantsDBName, tenantsDBPassword); + + var tenantRequest = TenantRequest.builder() + .tenantId(tenantName) + .displayName(tenantName) + .guid(UUID.randomUUID().toString()) + .databaseConnection(DatabaseConnection.builder() + .driver("postgresql") + .host("localhost") + .port("5432") + .database(tenantsDBName) + .schema(tenantName) + .username(tenantsDBName) + .password(tenantsDBPassword) + .build()) + .searchConnection(SearchConnection.builder().hosts(Set.of("localhost")).port(9200).scheme("http").numberOfShards("1").numberOfReplicas("5").build()) + .s3StorageConnection(S3StorageConnection.builder().key("minioadmin").secret("minioadmin").bucketName("redaction").endpoint("http://localhost:9000").build()) + .build(); + + tenantManagementService.createTenant(tenantRequest); + } @@ -117,18 +119,18 @@ public class DevConfiguration { @SneakyThrows - public void createSchema(String jdbcUrl, String username, String password) { + public void createSchema(String jdbcUrl, String tenantName, String username, String password) { try (Connection connection = DriverManager.getConnection(jdbcUrl, username, password)) { DataSource tenantDataSource = new SingleConnectionDataSource(connection, false); JdbcTemplate insert = new JdbcTemplate(tenantDataSource); try { - insert.execute((StatementCallback) stmt -> stmt.execute("CREATE SCHEMA redaction")); + insert.execute((StatementCallback) stmt -> stmt.execute("CREATE SCHEMA " + tenantName)); } catch (Exception e) { log.warn("schema already exists"); } try { - insert.execute((StatementCallback) stmt -> stmt.execute("GRANT USAGE ON SCHEMA redaction TO " + username)); + insert.execute((StatementCallback) stmt -> stmt.execute("GRANT USAGE ON SCHEMA " + tenantName + " TO " + username)); } catch (Exception e) { log.warn("grant invalid"); } 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 fb1e548..3e7de52 100644 --- a/src/main/java/com/knecon/fforesight/tenantusermanagement/service/TenantManagementService.java +++ b/src/main/java/com/knecon/fforesight/tenantusermanagement/service/TenantManagementService.java @@ -29,6 +29,7 @@ import org.springframework.stereotype.Service; import org.springframework.web.server.ResponseStatusException; import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService; +import com.knecon.fforesight.tenantcommons.TenantContext; import com.knecon.fforesight.tenantcommons.TenantProvider; import com.knecon.fforesight.tenantcommons.model.AzureStorageConnection; import com.knecon.fforesight.tenantcommons.model.DatabaseConnection; @@ -148,7 +149,9 @@ public class TenantManagementService implements TenantProvider { generalConfigurationService.initGeneralConfiguration(tenantRequest.getTenantId()); keyCloakRoleManagerService.updateRoles(tenantRequest.getTenantId()); + TenantContext.setTenantId(tenantEntity.getTenantId()); rabbitTemplate.convertAndSend(tenantExchangeName, "tenant.created", new TenantCreatedEvent(tenantEntity.getTenantId())); + TenantContext.clear(); } else { throw new ResponseStatusException(HttpStatus.CONFLICT, "Tenant exists"); diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index d825647..0ecac00 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -85,7 +85,7 @@ spring: password: ${REDIS_PASSWORD:} fforesight: keycloak: - ignored-endpoints: [ '/actuator/health', '/tenant-user-management','/tenant-user-management/internal/**','/tenant-user-management/docs/**','/tenant-user-management/docs','/tenant-user-management/tenants/simple' ] + ignored-endpoints: [ '/actuator/health', '/tenant-user-management','/internal/**','/tenant-user-management/docs/**','/tenant-user-management/docs','/tenant-user-management/tenants/simple' ] enabled: true springdoc: base-path: '/tenant-user-management'