diff --git a/src/main/java/com/knecon/fforesight/tenantusermanagement/controller/ControllerAdvice.java b/src/main/java/com/knecon/fforesight/tenantusermanagement/controller/ControllerAdvice.java index 0c95406..92ad6a8 100644 --- a/src/main/java/com/knecon/fforesight/tenantusermanagement/controller/ControllerAdvice.java +++ b/src/main/java/com/knecon/fforesight/tenantusermanagement/controller/ControllerAdvice.java @@ -1,8 +1,12 @@ package com.knecon.fforesight.tenantusermanagement.controller; -import javax.ws.rs.core.Response; +import java.util.Arrays; +import java.util.Objects; +import java.util.stream.Collectors; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.server.ResponseStatusException; @@ -12,6 +16,13 @@ import com.knecon.fforesight.tenantusermanagement.model.ErrorMessage; @RestControllerAdvice public class ControllerAdvice { + @ExceptionHandler(MethodArgumentNotValidException.class) + public ResponseEntity handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { + + return new ResponseEntity<>(new ErrorMessage(e.getMessage()), HttpStatus.BAD_REQUEST); + } + + @ExceptionHandler(ResponseStatusException.class) public ResponseEntity handleResponseStatusException(ResponseStatusException e) { diff --git a/src/main/java/com/knecon/fforesight/tenantusermanagement/model/TenantRequest.java b/src/main/java/com/knecon/fforesight/tenantusermanagement/model/TenantRequest.java index e517944..5f26a04 100644 --- a/src/main/java/com/knecon/fforesight/tenantusermanagement/model/TenantRequest.java +++ b/src/main/java/com/knecon/fforesight/tenantusermanagement/model/TenantRequest.java @@ -9,6 +9,8 @@ import com.knecon.fforesight.tenantcommons.model.S3StorageConnection; import com.knecon.fforesight.tenantcommons.model.SearchConnection; import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.Pattern; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -21,6 +23,7 @@ import lombok.NoArgsConstructor; public class TenantRequest { @NotBlank + @Pattern(regexp = "[A-Za-z0-9_-]*", message = "Tenant Id must match [A-Za-z0-9_-]") private String tenantId; @NotBlank private String displayName; 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 b7cae5d..8d6256c 100644 --- a/src/main/java/com/knecon/fforesight/tenantusermanagement/service/TenantManagementService.java +++ b/src/main/java/com/knecon/fforesight/tenantusermanagement/service/TenantManagementService.java @@ -4,6 +4,7 @@ import java.net.URI; import java.net.URISyntaxException; import java.sql.Connection; import java.sql.DriverManager; +import java.sql.PreparedStatement; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -225,9 +226,11 @@ public class TenantManagementService implements TenantProvider { tenantRequest.getDatabaseConnection().getPassword())) { DataSource tenantDataSource = new SingleConnectionDataSource(connection, false); JdbcTemplate jdbcTemplate = new JdbcTemplate(tenantDataSource); - jdbcTemplate.execute((StatementCallback) stmt -> stmt.execute("CREATE SCHEMA `" + tenantRequest.getDatabaseConnection().getSchema()+"`")); - jdbcTemplate.execute((StatementCallback) stmt -> stmt.execute("GRANT USAGE ON SCHEMA `" + tenantRequest.getDatabaseConnection() - .getSchema() + "` TO `" + tenantRequest.getDatabaseConnection().getUsername() +"`")); + String createStatement = "CREATE SCHEMA \"" + tenantRequest.getDatabaseConnection().getSchema() + "\""; + String grantStatement = "GRANT USAGE ON SCHEMA \"" + tenantRequest.getDatabaseConnection().getSchema() + "\" TO \"" + tenantRequest.getDatabaseConnection() + .getUsername() + "\""; + jdbcTemplate.execute(createStatement); + jdbcTemplate.execute(grantStatement); } catch (Exception e) { log.warn("Could not create schema:", e); throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Tenant creation failed: " + e.getMessage(), e); diff --git a/src/test/java/com/knecon/fforesight/AbstractTenantUserManagementIntegrationTest.java b/src/test/java/com/knecon/fforesight/AbstractTenantUserManagementIntegrationTest.java index 95aa79e..8034a39 100644 --- a/src/test/java/com/knecon/fforesight/AbstractTenantUserManagementIntegrationTest.java +++ b/src/test/java/com/knecon/fforesight/AbstractTenantUserManagementIntegrationTest.java @@ -43,7 +43,7 @@ public class AbstractTenantUserManagementIntegrationTest { @Autowired protected TestTenantService testTenantService; - public final static String TEST_TENANT_ID = "test_tenant_fforesight"; + public final static String TEST_TENANT_ID = "test-tenant-fforesight"; private static GenericContainer minioServer;