Fixed schema and grant escapes

This commit is contained in:
Timo Bejan 2023-07-21 10:45:23 +03:00
parent 757e726339
commit e7fef6be34
4 changed files with 22 additions and 5 deletions

View File

@ -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<ErrorMessage> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
return new ResponseEntity<>(new ErrorMessage(e.getMessage()), HttpStatus.BAD_REQUEST);
}
@ExceptionHandler(ResponseStatusException.class)
public ResponseEntity<ErrorMessage> handleResponseStatusException(ResponseStatusException e) {

View File

@ -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;

View File

@ -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<Boolean>) stmt -> stmt.execute("CREATE SCHEMA `" + tenantRequest.getDatabaseConnection().getSchema()+"`"));
jdbcTemplate.execute((StatementCallback<Boolean>) 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);

View File

@ -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;