diff --git a/src/main/java/com/knecon/fforesight/tenantusermanagement/service/MongoDbOntheFlyMigrationService.java b/src/main/java/com/knecon/fforesight/tenantusermanagement/service/MongoDbOntheFlyMigrationService.java new file mode 100644 index 0000000..56e362a --- /dev/null +++ b/src/main/java/com/knecon/fforesight/tenantusermanagement/service/MongoDbOntheFlyMigrationService.java @@ -0,0 +1,116 @@ +package com.knecon.fforesight.tenantusermanagement.service; + +import org.bson.BsonArray; +import org.bson.BsonDocument; +import org.bson.BsonString; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService; +import com.knecon.fforesight.tenantcommons.model.MongoDBConnection; +import com.knecon.fforesight.tenantcommons.utils.MongoConnectionStringHelper; +import com.knecon.fforesight.tenantusermanagement.entity.MongoDBConnectionEntity; +import com.knecon.fforesight.tenantusermanagement.entity.TenantEntity; +import com.knecon.fforesight.tenantusermanagement.properties.TenantUserManagementProperties; +import com.knecon.fforesight.tenantusermanagement.repository.TenantRepository; +import com.mongodb.MongoCommandException; +import com.mongodb.client.MongoClient; +import com.mongodb.client.MongoClients; +import com.mongodb.client.MongoDatabase; + +import lombok.RequiredArgsConstructor; + +// This is just for migration from 4.0 to 4.1 and can be removed afterward. + +@Service +@RequiredArgsConstructor +public class MongoDbOntheFlyMigrationService { + + private final EncryptionDecryptionService encryptionService; + private final TenantUserManagementProperties tenantUserManagementProperties; + private final TenantRepository tenantRepository; + + @Value("${default.mongodb.username:}") + private String defaultMongoDBUsername; + + @Value("${default.mongodb.password:}") + private String defaultMongoDBPassword; + + @Value("${default.mongodb.address:}") + private String defaultMongoDBAddress; + + @Value("${default.mongodb.prefix:}") + private String defaultMongoDBPrefix; + + @Value("${default.mongodb.options:}") + private String defaultMongoDBOptions; + + + @Transactional + public TenantEntity updateMongoDatabaseConnection(TenantEntity tenantEntity) { + + if ((tenantEntity.getMongoDBConnection() == null || tenantEntity.getMongoDBConnection().getUsername() == null) && defaultMongoDBUsername != null) { + tenantEntity.setMongoDBConnection(MongoDBConnectionEntity.builder() + .prefix(defaultMongoDBPrefix) + .username(defaultMongoDBUsername) + .password(encryptionService.encrypt(defaultMongoDBPassword)) + .address(defaultMongoDBAddress) + .database(buildIndexPrefix(tenantEntity.getTenantId())) + .options(defaultMongoDBOptions) + .build()); + tenantRepository.save(tenantEntity); + createMongoDBDatabase(convert(tenantEntity.getMongoDBConnection())); + } + return tenantEntity; + } + + + private String buildIndexPrefix(String tenantId) { + + return tenantUserManagementProperties.getAppPrefix() + "_" + tenantId; + } + + + private MongoDBConnection convert(MongoDBConnectionEntity mongoDBConnectionEntity) { + + return MongoDBConnection.builder() + .prefix(mongoDBConnectionEntity.getPrefix()) + .username(mongoDBConnectionEntity.getUsername()) + .password(mongoDBConnectionEntity.getPassword()) + .address(mongoDBConnectionEntity.getAddress()) + .database(mongoDBConnectionEntity.getDatabase()) + .options(mongoDBConnectionEntity.getOptions()) + .build(); + } + + + private void createMongoDBDatabase(MongoDBConnection mongoDBConnection) { + + try (MongoClient mongoClient = MongoClients.create(MongoConnectionStringHelper.buildGenericMongoConnectionString(mongoDBConnection))) { + String databaseName = mongoDBConnection.getDatabase(); + String username = mongoDBConnection.getUsername(); + String password = defaultMongoDBPassword; + MongoDatabase database = mongoClient.getDatabase(databaseName); + BsonDocument createUserCommand = new BsonDocument(); + createUserCommand.append("createUser", new BsonString(username)); + createUserCommand.append("pwd", new BsonString(password)); + BsonArray roles = new BsonArray(); + roles.add(new BsonDocument("role", new BsonString("dbOwner")).append("db", new BsonString(databaseName))); + createUserCommand.append("roles", roles); + + try { + database.runCommand(createUserCommand); + } catch (MongoCommandException mongoCommandException) { + // ignore user already exists (51003) because of possibly already created users being present + // and command not supported (115) because of azure deployment having a different user management + if (mongoCommandException.getErrorCode() != 51003 && mongoCommandException.getErrorCode() != 115) { + throw mongoCommandException; + } + + } + + } + } + +} 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 ebbd2d9..cf764a8 100644 --- a/src/main/java/com/knecon/fforesight/tenantusermanagement/service/TenantManagementService.java +++ b/src/main/java/com/knecon/fforesight/tenantusermanagement/service/TenantManagementService.java @@ -104,6 +104,7 @@ public class TenantManagementService implements TenantProvider { private final RealmService realmService; private final RabbitTemplate rabbitTemplate; private final StorageConfiguration storageConfiguration; + private final MongoDbOntheFlyMigrationService mongoDbOntheFlyMigrationService; @Value("${fforesight.tenant-exchange.name}") private String tenantExchangeName; @@ -116,11 +117,7 @@ public class TenantManagementService implements TenantProvider { updateMasterTheme(tenantUserManagementProperties.getLoginTheme()); updateMasterDisplayName(tenantUserManagementProperties.getApplicationName()); - log.info("Tenants are: {}", - tenantRepository.findAll() - .stream() - .map(TenantEntity::getTenantId) - .toList()); + log.info("Tenants are: {}", tenantRepository.findAll().stream().map(TenantEntity::getTenantId).toList()); log.info("Requested to create tenant for: {}", tenantRequest.getTenantId()); try { @@ -137,34 +134,34 @@ public class TenantManagementService implements TenantProvider { .displayName(tenantRequest.getDisplayName()) .guid(UUID.randomUUID().toString()) .databaseConnection(DatabaseConnectionEntity.builder() - .driver(databaseConnection.getDriver()) - .host(databaseConnection.getHost()) - .port(databaseConnection.getPort()) - .database(databaseConnection.getDatabase()) - .schema(databaseConnection.getSchema()) - .username(databaseConnection.getUsername()) - .password(encryptionService.encrypt(databaseConnection.getPassword())) - .build()) + .driver(databaseConnection.getDriver()) + .host(databaseConnection.getHost()) + .port(databaseConnection.getPort()) + .database(databaseConnection.getDatabase()) + .schema(databaseConnection.getSchema()) + .username(databaseConnection.getUsername()) + .password(encryptionService.encrypt(databaseConnection.getPassword())) + .build()) .searchConnection(SearchConnectionEntity.builder() - .hosts(searchConnection.getHosts()) - .port(searchConnection.getPort()) - .scheme(searchConnection.getScheme()) - .username(searchConnection.getUsername()) - .password(encryptionService.encrypt(searchConnection.getPassword())) - .numberOfShards(searchConnection.getNumberOfShards()) - .numberOfReplicas(searchConnection.getNumberOfReplicas()) - .indexPrefix(buildIndexPrefix(tenantRequest.getTenantId())) - .build()); + .hosts(searchConnection.getHosts()) + .port(searchConnection.getPort()) + .scheme(searchConnection.getScheme()) + .username(searchConnection.getUsername()) + .password(encryptionService.encrypt(searchConnection.getPassword())) + .numberOfShards(searchConnection.getNumberOfShards()) + .numberOfReplicas(searchConnection.getNumberOfReplicas()) + .indexPrefix(buildIndexPrefix(tenantRequest.getTenantId())) + .build()); MongoDBConnection mongoDBConnection = tenantRequest.getMongoDBConnection(); if (mongoDBConnection != null) { tenantEntityBuilder.mongoDBConnection(MongoDBConnectionEntity.builder() - .prefix(mongoDBConnection.getPrefix()) - .username(mongoDBConnection.getUsername()) - .password(encryptionService.encrypt(mongoDBConnection.getPassword())) - .address(mongoDBConnection.getAddress()) - .database(mongoDBConnection.getDatabase()) - .options(mongoDBConnection.getOptions()) - .build()); + .prefix(mongoDBConnection.getPrefix()) + .username(mongoDBConnection.getUsername()) + .password(encryptionService.encrypt(mongoDBConnection.getPassword())) + .address(mongoDBConnection.getAddress()) + .database(mongoDBConnection.getDatabase()) + .options(mongoDBConnection.getOptions()) + .build()); } TenantEntity tenantEntity = tenantEntityBuilder.build(); @@ -173,9 +170,9 @@ public class TenantManagementService implements TenantProvider { testAzureConnection(azureStorageConnection.getConnectionString(), azureStorageConnection.getContainerName()); tenantEntity.setAzureStorageConnection(AzureStorageConnectionEntity.builder() - .connectionString(encryptionService.encrypt(azureStorageConnection.getConnectionString())) - .containerName(azureStorageConnection.getContainerName()) - .build()); + .connectionString(encryptionService.encrypt(azureStorageConnection.getConnectionString())) + .containerName(azureStorageConnection.getContainerName()) + .build()); } S3StorageConnection s3StorageConnection = tenantRequest.getS3StorageConnection(); @@ -183,13 +180,13 @@ public class TenantManagementService implements TenantProvider { testS3Connection(s3StorageConnection); tenantEntity.setS3StorageConnection(S3StorageConnectionEntity.builder() - .key(s3StorageConnection.getKey()) - .secret(encryptionService.encrypt(s3StorageConnection.getSecret())) - .signerType(s3StorageConnection.getSignerType()) - .bucketName(s3StorageConnection.getBucketName()) - .region(s3StorageConnection.getRegion()) - .endpoint(s3StorageConnection.getEndpoint()) - .build()); + .key(s3StorageConnection.getKey()) + .secret(encryptionService.encrypt(s3StorageConnection.getSecret())) + .signerType(s3StorageConnection.getSignerType()) + .bucketName(s3StorageConnection.getBucketName()) + .region(s3StorageConnection.getRegion()) + .endpoint(s3StorageConnection.getEndpoint()) + .build()); } createSchema(tenantRequest); @@ -265,17 +262,17 @@ public class TenantManagementService implements TenantProvider { var s3StorageConnectionTemplate = tenant.getS3StorageConnection(); com.iqser.red.storage.commons.model.S3StorageConnection s3StorageConnection; s3StorageConnection = new com.iqser.red.storage.commons.model.S3StorageConnection(s3StorageConnectionTemplate.getKey(), - encryptionService.decrypt(s3StorageConnectionTemplate.getSecret()), - s3StorageConnectionTemplate.getSignerType(), - s3StorageConnectionTemplate.getBucketName(), - s3StorageConnectionTemplate.getRegion(), - s3StorageConnectionTemplate.getEndpoint()); + encryptionService.decrypt(s3StorageConnectionTemplate.getSecret()), + s3StorageConnectionTemplate.getSignerType(), + s3StorageConnectionTemplate.getBucketName(), + s3StorageConnectionTemplate.getRegion(), + s3StorageConnectionTemplate.getEndpoint()); log.info("Deleting s3 bucket for tenant: {}", tenantId); try (var client = storageConfiguration.getS3StorageService().initAmazonS3(s3StorageConnection)) { String bucketName = s3StorageConnection.getBucketName(); ListObjectsRequest listObjects = ListObjectsRequest.builder().bucket(bucketName).build(); try { - ListObjectsResponse objectList = client.listObjects(listObjects); + ListObjectsResponse objectList = client.listObjects(listObjects); for (S3Object object : objectList.contents()) { // Delete each object client.deleteObject(DeleteObjectRequest.builder().bucket(bucketName).key(object.key()).build()); @@ -353,8 +350,8 @@ public class TenantManagementService implements TenantProvider { var jdbcUrl = JDBCUtils.buildJdbcUrl(tenantRequest.getDatabaseConnection()); try (Connection connection = DriverManager.getConnection(jdbcUrl, - tenantRequest.getDatabaseConnection().getUsername(), - tenantRequest.getDatabaseConnection().getPassword())) { + tenantRequest.getDatabaseConnection().getUsername(), + tenantRequest.getDatabaseConnection().getPassword())) { DataSource tenantDataSource = new SingleConnectionDataSource(connection, false); JdbcTemplate jdbcTemplate = new JdbcTemplate(tenantDataSource); String createStatement = "CREATE SCHEMA IF NOT EXISTS \"" + tenantRequest.getDatabaseConnection().getSchema() + "\""; @@ -374,8 +371,8 @@ public class TenantManagementService implements TenantProvider { log.info("Deleting schema for tenant: {}", tenant.getTenantId()); var jdbcUrl = JDBCUtils.buildJdbcUrl(tenant.getDatabaseConnection()); try (Connection connection = DriverManager.getConnection(jdbcUrl, - tenant.getDatabaseConnection().getUsername(), - this.encryptionService.decrypt(tenant.getDatabaseConnection().getPassword()))) { + tenant.getDatabaseConnection().getUsername(), + this.encryptionService.decrypt(tenant.getDatabaseConnection().getPassword()))) { DataSource tenantDataSource = new SingleConnectionDataSource(connection, false); JdbcTemplate jdbcTemplate = new JdbcTemplate(tenantDataSource); String deleteStatement = "DROP SCHEMA IF EXISTS \"" + tenant.getDatabaseConnection().getSchema() + "\" CASCADE;"; @@ -446,9 +443,7 @@ public class TenantManagementService implements TenantProvider { realm.setRoles(getRealmRoles()); if (users != null) { - realm.setUsers(users.stream() - .map(this::toUserRepresentation) - .toList()); + realm.setUsers(users.stream().map(this::toUserRepresentation).toList()); } keycloak.getAdminClient().realms().create(realm); @@ -480,15 +475,12 @@ public class TenantManagementService implements TenantProvider { existingRealm.setAccessTokenLifespan(tenantUserManagementProperties.getAccessTokenLifeSpan()); existingRealm.setSsoSessionIdleTimeout(tenantUserManagementProperties.getSsoSessionIdleTimeout()); var clients = getRealmClients(); - var relevantClientNames = clients.stream() - .map(c -> c.getClientId().toLowerCase(Locale.getDefault())) - .collect(Collectors.toSet()); + var relevantClientNames = clients.stream().map(c -> c.getClientId().toLowerCase(Locale.getDefault())).collect(Collectors.toSet()); var existingClients = keycloak.getAdminClient().realm(tenantId).clients().findAll(); existingClients.forEach(ec -> { if (relevantClientNames.contains(ec.getClientId().toLowerCase(Locale.getDefault()))) { log.info("Removing client: {}", ec.getName()); - keycloak.getAdminClient().realm(tenantId).clients() - .get(ec.getId()).remove(); + keycloak.getAdminClient().realm(tenantId).clients().get(ec.getId()).remove(); } }); @@ -598,9 +590,7 @@ public class TenantManagementService implements TenantProvider { private boolean tryToAccessRealm(String tenantId) { try { - return keycloak.getAdminClient().realms().findAll() - .stream() - .anyMatch(r -> r.getRealm().equals(tenantId)); + return keycloak.getAdminClient().realms().findAll().stream().anyMatch(r -> r.getRealm().equals(tenantId)); } catch (Exception e) { return false; } @@ -656,9 +646,9 @@ public class TenantManagementService implements TenantProvider { public TenantResponse getTenant(String tenantId) { - return tenantRepository.findById(tenantId) - .map(this::convert) - .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, "Tenant does not exist")); + var tenantEntity = tenantRepository.findById(tenantId).orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, "Tenant does not exist")); + + return convert(mongoDbOntheFlyMigrationService.updateMongoDatabaseConnection(tenantEntity)); } @@ -677,29 +667,29 @@ public class TenantManagementService implements TenantProvider { var databaseConnection = tenantRequest.getDatabaseConnection(); if (databaseConnection != null) { tenantEntity.setDatabaseConnection(DatabaseConnectionEntity.builder() - .driver(databaseConnection.getDriver()) - .host(databaseConnection.getHost()) - .port(databaseConnection.getPort()) - .database(databaseConnection.getDatabase()) - .schema(databaseConnection.getSchema()) - .username(databaseConnection.getUsername()) - .password(encryptionService.encrypt(databaseConnection.getPassword())) - .params(databaseConnection.getParams()) - .build()); + .driver(databaseConnection.getDriver()) + .host(databaseConnection.getHost()) + .port(databaseConnection.getPort()) + .database(databaseConnection.getDatabase()) + .schema(databaseConnection.getSchema()) + .username(databaseConnection.getUsername()) + .password(encryptionService.encrypt(databaseConnection.getPassword())) + .params(databaseConnection.getParams()) + .build()); } var searchConnection = tenantRequest.getSearchConnection(); if (searchConnection != null) { tenantEntity.setSearchConnection(SearchConnectionEntity.builder() - .hosts(searchConnection.getHosts()) - .port(searchConnection.getPort()) - .scheme(searchConnection.getScheme()) - .username(searchConnection.getUsername()) - .password(encryptionService.encrypt(searchConnection.getPassword())) - .numberOfShards(searchConnection.getNumberOfShards()) - .numberOfReplicas(searchConnection.getNumberOfReplicas()) - .indexPrefix(tenantEntity.getSearchConnection().getIndexPrefix()) - .build()); + .hosts(searchConnection.getHosts()) + .port(searchConnection.getPort()) + .scheme(searchConnection.getScheme()) + .username(searchConnection.getUsername()) + .password(encryptionService.encrypt(searchConnection.getPassword())) + .numberOfShards(searchConnection.getNumberOfShards()) + .numberOfReplicas(searchConnection.getNumberOfReplicas()) + .indexPrefix(tenantEntity.getSearchConnection().getIndexPrefix()) + .build()); } var azureStorageConnection = tenantRequest.getAzureStorageConnection(); @@ -709,9 +699,9 @@ public class TenantManagementService implements TenantProvider { } testAzureConnection(azureStorageConnection.getConnectionString(), azureStorageConnection.getContainerName()); tenantEntity.setAzureStorageConnection(AzureStorageConnectionEntity.builder() - .connectionString(encryptionService.encrypt(azureStorageConnection.getConnectionString())) - .containerName(azureStorageConnection.getContainerName()) - .build()); + .connectionString(encryptionService.encrypt(azureStorageConnection.getConnectionString())) + .containerName(azureStorageConnection.getContainerName()) + .build()); } else { tenantEntity.setAzureStorageConnection(null); } @@ -723,13 +713,13 @@ public class TenantManagementService implements TenantProvider { } testS3Connection(s3StorageConnection); tenantEntity.setS3StorageConnection(S3StorageConnectionEntity.builder() - .key(s3StorageConnection.getKey()) - .secret(encryptionService.encrypt(s3StorageConnection.getSecret())) - .signerType(s3StorageConnection.getSignerType()) - .bucketName(s3StorageConnection.getBucketName()) - .region(s3StorageConnection.getRegion()) - .endpoint(s3StorageConnection.getEndpoint()) - .build()); + .key(s3StorageConnection.getKey()) + .secret(encryptionService.encrypt(s3StorageConnection.getSecret())) + .signerType(s3StorageConnection.getSignerType()) + .bucketName(s3StorageConnection.getBucketName()) + .region(s3StorageConnection.getRegion()) + .endpoint(s3StorageConnection.getEndpoint()) + .build()); } else { tenantEntity.setS3StorageConnection(null); } @@ -737,13 +727,13 @@ public class TenantManagementService implements TenantProvider { var mongoDBConnection = tenantRequest.getMongoDBConnection(); if (mongoDBConnection != null) { tenantEntity.setMongoDBConnection(MongoDBConnectionEntity.builder() - .prefix(mongoDBConnection.getPrefix()) - .username(mongoDBConnection.getUsername()) - .password(encryptionService.encrypt(mongoDBConnection.getPassword())) - .address(mongoDBConnection.getAddress()) - .database(mongoDBConnection.getDatabase()) - .options(mongoDBConnection.getOptions()) - .build()); + .prefix(mongoDBConnection.getPrefix()) + .username(mongoDBConnection.getUsername()) + .password(encryptionService.encrypt(mongoDBConnection.getPassword())) + .address(mongoDBConnection.getAddress()) + .database(mongoDBConnection.getDatabase()) + .options(mongoDBConnection.getOptions()) + .build()); } return convert(tenantRepository.save(tenantEntity)); @@ -755,10 +745,7 @@ public class TenantManagementService implements TenantProvider { public List getTenants() { - return tenantRepository.findAll() - .stream() - .map(this::convert) - .toList(); + return tenantRepository.findAll().stream().map(mongoDbOntheFlyMigrationService::updateMongoDatabaseConnection).map(this::convert).toList(); } @@ -802,53 +789,53 @@ public class TenantManagementService implements TenantProvider { .authDetails(authDetails) .details(entity.getDetails()) .databaseConnection(DatabaseConnection.builder() - .driver(entity.getDatabaseConnection().getDriver()) - .host(entity.getDatabaseConnection().getHost()) - .port(entity.getDatabaseConnection().getPort()) - .database(entity.getDatabaseConnection().getDatabase()) - .schema(entity.getDatabaseConnection().getSchema()) - .username(entity.getDatabaseConnection().getUsername()) - .params(entity.getDatabaseConnection().getParams()) - .password(entity.getDatabaseConnection().getPassword()) - .build()) + .driver(entity.getDatabaseConnection().getDriver()) + .host(entity.getDatabaseConnection().getHost()) + .port(entity.getDatabaseConnection().getPort()) + .database(entity.getDatabaseConnection().getDatabase()) + .schema(entity.getDatabaseConnection().getSchema()) + .username(entity.getDatabaseConnection().getUsername()) + .params(entity.getDatabaseConnection().getParams()) + .password(entity.getDatabaseConnection().getPassword()) + .build()) .searchConnection(SearchConnection.builder() - .hosts(entity.getSearchConnection().getHosts()) - .port(entity.getSearchConnection().getPort()) - .scheme(entity.getSearchConnection().getScheme()) - .username(entity.getSearchConnection().getUsername()) - .numberOfShards(entity.getSearchConnection().getNumberOfShards()) - .numberOfReplicas(entity.getSearchConnection().getNumberOfReplicas()) - .password(entity.getSearchConnection().getPassword()) - .indexPrefix(entity.getSearchConnection().getIndexPrefix()) - .build()); + .hosts(entity.getSearchConnection().getHosts()) + .port(entity.getSearchConnection().getPort()) + .scheme(entity.getSearchConnection().getScheme()) + .username(entity.getSearchConnection().getUsername()) + .numberOfShards(entity.getSearchConnection().getNumberOfShards()) + .numberOfReplicas(entity.getSearchConnection().getNumberOfReplicas()) + .password(entity.getSearchConnection().getPassword()) + .indexPrefix(entity.getSearchConnection().getIndexPrefix()) + .build()); if (entity.getMongoDBConnection() != null) { tenantResponseBuilder.mongoDBConnection(MongoDBConnection.builder() - .prefix(entity.getMongoDBConnection().getPrefix()) - .username(entity.getMongoDBConnection().getUsername()) - .password(entity.getMongoDBConnection().getPassword()) - .address(entity.getMongoDBConnection().getAddress()) - .database(entity.getMongoDBConnection().getDatabase()) - .options(entity.getMongoDBConnection().getOptions()) - .build()); + .prefix(entity.getMongoDBConnection().getPrefix()) + .username(entity.getMongoDBConnection().getUsername()) + .password(entity.getMongoDBConnection().getPassword()) + .address(entity.getMongoDBConnection().getAddress()) + .database(entity.getMongoDBConnection().getDatabase()) + .options(entity.getMongoDBConnection().getOptions()) + .build()); } if (entity.getAzureStorageConnection() != null) { tenantResponseBuilder.azureStorageConnection(AzureStorageConnection.builder() - .connectionString(entity.getAzureStorageConnection().getConnectionString()) - .containerName(entity.getAzureStorageConnection().getContainerName()) - .build()); + .connectionString(entity.getAzureStorageConnection().getConnectionString()) + .containerName(entity.getAzureStorageConnection().getContainerName()) + .build()); } if (entity.getS3StorageConnection() != null) { tenantResponseBuilder.s3StorageConnection(S3StorageConnection.builder() - .key(entity.getS3StorageConnection().getKey()) - .secret(entity.getS3StorageConnection().getSecret()) - .signerType(entity.getS3StorageConnection().getSignerType()) - .bucketName(entity.getS3StorageConnection().getBucketName()) - .region(entity.getS3StorageConnection().getRegion()) - .endpoint(entity.getS3StorageConnection().getEndpoint()) - .build()); + .key(entity.getS3StorageConnection().getKey()) + .secret(entity.getS3StorageConnection().getSecret()) + .signerType(entity.getS3StorageConnection().getSignerType()) + .bucketName(entity.getS3StorageConnection().getBucketName()) + .region(entity.getS3StorageConnection().getRegion()) + .endpoint(entity.getS3StorageConnection().getEndpoint()) + .build()); } return tenantResponseBuilder.build(); @@ -869,11 +856,11 @@ public class TenantManagementService implements TenantProvider { var connection = storageConfiguration.getS3StorageService() .testConnection(s3StorageConnection.getKey(), - s3StorageConnection.getSecret(), - s3StorageConnection.getSignerType(), - s3StorageConnection.getBucketName(), - s3StorageConnection.getRegion(), - s3StorageConnection.getEndpoint()); + s3StorageConnection.getSecret(), + s3StorageConnection.getSignerType(), + s3StorageConnection.getBucketName(), + s3StorageConnection.getRegion(), + s3StorageConnection.getEndpoint()); if (!connection) { throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Could not connect to S3 storage");