RED-9658: Added mongoDb on the fly migration
This commit is contained in:
parent
a1db318adc
commit
fc3e44b66e
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -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<TenantResponse> 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");
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user