From 56963986be55152a70607e1c413289e085fa3c94 Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Thu, 10 Nov 2022 12:19:42 +0100 Subject: [PATCH 01/11] RED-5293: fixed jdbcUrl-check by adding URL check --- .../peristence/v1/server/service/TenantManagementService.java | 3 +++ 1 file changed, 3 insertions(+) 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..7075a2fce 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.URL; import java.sql.Connection; import java.sql.DriverManager; import java.util.List; @@ -133,6 +134,8 @@ public class TenantManagementService { private void validateJdbcUrl(String jdbcUrl) { // just create a URI object to check if the string is a valid URI new URI(jdbcUrl); + // same as above but with a URL object + new URL(jdbcUrl); } From 6b79c657ab482e9b7f50964cb9a1c1b00da970fd Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Thu, 10 Nov 2022 12:30:26 +0100 Subject: [PATCH 02/11] RED-5293: fixed jdbcUrl-check by adding URL check --- .../peristence/v1/server/service/TenantManagementService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 7075a2fce..712b88759 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 @@ -132,9 +132,9 @@ public class TenantManagementService { @SneakyThrows private void validateJdbcUrl(String jdbcUrl) { - // just create a URI object to check if the string is a valid URI + // just create a URL object to check if the string is a valid URL new URI(jdbcUrl); - // same as above but with a URL object + // same as above but with a URI object new URL(jdbcUrl); } From 907d88f658223d5081e19b62ab539a123abbb7e4 Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Thu, 10 Nov 2022 12:51:35 +0100 Subject: [PATCH 03/11] RED-5293: fixed jdbcUrl-check by adding URL check --- .../peristence/v1/server/service/TenantManagementService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 712b88759..cde0c3d48 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 @@ -133,9 +133,9 @@ public class TenantManagementService { @SneakyThrows private void validateJdbcUrl(String jdbcUrl) { // just create a URL object to check if the string is a valid URL - new URI(jdbcUrl); - // same as above but with a URI object new URL(jdbcUrl); + // same as above but with a URI object + new URI(jdbcUrl); } From 39a0eb4f8d0b0cc8f3834112de7c7eca7a804b8e Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Thu, 10 Nov 2022 12:55:36 +0100 Subject: [PATCH 04/11] RED-5293: fixed jdbcUrl-check by adding URL check --- .../v1/server/service/TenantManagementService.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) 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 cde0c3d48..4f306664b 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,5 +1,6 @@ package com.iqser.red.service.peristence.v1.server.service; +import java.net.MalformedURLException; import java.net.URI; import java.net.URL; import java.sql.Connection; @@ -132,10 +133,14 @@ public class TenantManagementService { @SneakyThrows private void validateJdbcUrl(String jdbcUrl) { - // just create a URL object to check if the string is a valid URL - new URL(jdbcUrl); - // same as above but with a URI object + // just create a URI object to check if the string is a valid URI new URI(jdbcUrl); + // same as above but with a URL object + try { + new URL(jdbcUrl); + } catch (MalformedURLException e) { + throw new IllegalArgumentException("Your jdbcUrl is not URL conform.", e); + } } From 197162b61ba9386582a265b8dcd3e1bb81d8f4d7 Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Thu, 10 Nov 2022 14:23:31 +0100 Subject: [PATCH 05/11] RED-5293: fixed jdbcUrl-check by adding more checks --- .../v1/server/service/TenantManagementService.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) 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 4f306664b..24b063e65 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 @@ -135,9 +135,16 @@ public class TenantManagementService { private void validateJdbcUrl(String jdbcUrl) { // just create a URI object to check if the string is a valid URI new URI(jdbcUrl); - // same as above but with a URL object +// // same as above but with a URL object try { - new URL(jdbcUrl); + String startExpr = "jdbc:postgresql://"; + if (!jdbcUrl.startsWith("")) { + throw new IllegalArgumentException("Your jdbcUrl is not URL conform."); + } + + String afterStartExpr = jdbcUrl.substring(jdbcUrl.indexOf("//")).substring(2); + new URL(jdbcUrl.substring(jdbcUrl.indexOf(afterStartExpr))); + } catch (MalformedURLException e) { throw new IllegalArgumentException("Your jdbcUrl is not URL conform.", e); } From 27dcd61e3e370b2efef4ec543178f04de1b39b70 Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Thu, 10 Nov 2022 14:25:23 +0100 Subject: [PATCH 06/11] RED-5293: fixed jdbcUrl-check by adding more checks --- .../peristence/v1/server/service/TenantManagementService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 24b063e65..552aa1dfa 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 @@ -138,7 +138,7 @@ public class TenantManagementService { // // same as above but with a URL object try { String startExpr = "jdbc:postgresql://"; - if (!jdbcUrl.startsWith("")) { + if (!jdbcUrl.startsWith(startExpr)) { throw new IllegalArgumentException("Your jdbcUrl is not URL conform."); } From 6b634681484f5d329ef190dcc9816c05c188fa83 Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Thu, 10 Nov 2022 15:10:49 +0100 Subject: [PATCH 07/11] RED-5293: fixed jdbcUrl-check by adding more checks; removed URL-check because it does not work --- .../service/TenantManagementService.java | 20 +++++-------------- 1 file changed, 5 insertions(+), 15 deletions(-) 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 552aa1dfa..70caaa3ff 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,8 +1,6 @@ package com.iqser.red.service.peristence.v1.server.service; -import java.net.MalformedURLException; import java.net.URI; -import java.net.URL; import java.sql.Connection; import java.sql.DriverManager; import java.util.List; @@ -133,22 +131,14 @@ 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); -// // same as above but with a URL object - try { - String startExpr = "jdbc:postgresql://"; - if (!jdbcUrl.startsWith(startExpr)) { - throw new IllegalArgumentException("Your jdbcUrl is not URL conform."); - } - String afterStartExpr = jdbcUrl.substring(jdbcUrl.indexOf("//")).substring(2); - new URL(jdbcUrl.substring(jdbcUrl.indexOf(afterStartExpr))); - - } catch (MalformedURLException e) { - throw new IllegalArgumentException("Your jdbcUrl is not URL conform.", e); + String startExpr = "jdbc:postgresql://"; + if (!jdbcUrl.startsWith(startExpr)) { + throw new IllegalArgumentException("Your jdbcUrl is not URL conform."); } + // just create a URI object to check if the string is a valid URI + new URI(jdbcUrl); } From f09c7e4318fc23164bd862987dae8e90780aed3e Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Thu, 10 Nov 2022 16:19:27 +0100 Subject: [PATCH 08/11] RED-5293: jdbcUrl is checked for protocol and sql --- .../v1/server/service/TenantManagementService.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) 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 70caaa3ff..cd5972748 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 @@ -36,6 +36,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", @@ -132,13 +133,14 @@ public class TenantManagementService { @SneakyThrows private void validateJdbcUrl(String jdbcUrl) { - String startExpr = "jdbc:postgresql://"; - if (!jdbcUrl.startsWith(startExpr)) { - throw new IllegalArgumentException("Your jdbcUrl is not URL conform."); + // 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().startsWith("jdbc") || !SUPPORTED_DATABASES.contains(subUri.getScheme())) { + throw new IllegalArgumentException("Your jdbcUrl is not valid."); } - // just create a URI object to check if the string is a valid URI - new URI(jdbcUrl); } From e51581c6d2ff77232c1963293afa884f76047330 Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Thu, 10 Nov 2022 16:37:27 +0100 Subject: [PATCH 09/11] RED-5293: jdbcUrl is checked for protocol and sql --- .../peristence/v1/server/service/TenantManagementService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 cd5972748..a2537a974 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 @@ -137,7 +137,7 @@ public class TenantManagementService { var uri = new URI(jdbcUrl); var subUri = new URI(uri.getSchemeSpecificPart()); - if (!uri.getScheme().startsWith("jdbc") || !SUPPORTED_DATABASES.contains(subUri.getScheme())) { + if (uri.getScheme() == null || subUri.getScheme() == null || !uri.getScheme().equals("jdbc") || !SUPPORTED_DATABASES.contains(subUri.getScheme())) { throw new IllegalArgumentException("Your jdbcUrl is not valid."); } From f8b6d033accc2e8968fe71f4690f8fbae40459d7 Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Thu, 10 Nov 2022 16:47:54 +0100 Subject: [PATCH 10/11] RED-5293: added catch block for URISyntaxExceptions --- .../server/service/TenantManagementService.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) 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 a2537a974..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; @@ -133,12 +134,16 @@ public class TenantManagementService { @SneakyThrows private void validateJdbcUrl(String jdbcUrl) { - // 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()); + 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."); + 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); } } From 5a47fb5c214d23d4fad98270ee7abe7e9ac34b4b Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Thu, 10 Nov 2022 17:36:00 +0100 Subject: [PATCH 11/11] RED-5293: adjusted ControllerAdvice for some SQLExceptions --- .../peristence/v1/server/controller/ControllerAdvice.java | 2 ++ 1 file changed, 2 insertions(+) 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);