diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ControllerAdvice.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ControllerAdvice.java index 36adba632..84aff9367 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ControllerAdvice.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ControllerAdvice.java @@ -90,6 +90,8 @@ public class ControllerAdvice { if (e.getMessage().contains("violates unique constraint")) { return new ResponseEntity<>(new ErrorMessage(OffsetDateTime.now(), "Unique constraint violation"), HttpStatus.CONFLICT); + } else if (e.getMessage().contains("No suitable driver found")){ + return new ResponseEntity<>(new ErrorMessage(OffsetDateTime.now(), "JDBC URL is incorrect"), HttpStatus.BAD_REQUEST); } else { log.error("PLSQL Exception occurred: {}", e.getMessage(), e); return new ResponseEntity<>(new ErrorMessage(OffsetDateTime.now(), "SQL Exception"), HttpStatus.INTERNAL_SERVER_ERROR); diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/TenantManagementService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/TenantManagementService.java index a6eaaf628..d15eb2575 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/TenantManagementService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/TenantManagementService.java @@ -1,6 +1,7 @@ package com.iqser.red.service.peristence.v1.server.service; import java.net.URI; +import java.net.URISyntaxException; import java.sql.Connection; import java.sql.DriverManager; import java.util.List; @@ -36,6 +37,7 @@ import lombok.extern.slf4j.Slf4j; @EnableConfigurationProperties(LiquibaseProperties.class) public class TenantManagementService { + private static final Set SUPPORTED_DATABASES = Set.of("postgresql"); private static final Set SQL_CONNECTION_ERROR_CODES = Set.of( // connection_exception "08000", @@ -131,8 +133,18 @@ public class TenantManagementService { @SneakyThrows private void validateJdbcUrl(String jdbcUrl) { - // just create a URI object to check if the string is a valid URI - new URI(jdbcUrl); + + try { + // just create a URI object to check if the string is a valid URI + var uri = new URI(jdbcUrl); + var subUri = new URI(uri.getSchemeSpecificPart()); + + if (uri.getScheme() == null || subUri.getScheme() == null || !uri.getScheme().equals("jdbc") || !SUPPORTED_DATABASES.contains(subUri.getScheme())) { + throw new IllegalArgumentException("Your jdbcUrl is not valid."); + } + } catch (URISyntaxException e) { + throw new IllegalArgumentException("Your jdbcUrl is not valid.", e); + } }