mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-09-04 14:43:11 +00:00
Minor: Enable Azure DatabaseTokenProvider if there is azure=true in DB_QUERYPARAMS (#18451)
This commit is contained in:
parent
e197c3f3d0
commit
96c3364de7
@ -134,13 +134,15 @@ public final class CsvUtil {
|
|||||||
preprocessedField = preprocessedField.replace("\n", "\\n").replace("\"", "\\\"");
|
preprocessedField = preprocessedField.replace("\n", "\\n").replace("\"", "\\\"");
|
||||||
|
|
||||||
CSVFormat format =
|
CSVFormat format =
|
||||||
CSVFormat.DEFAULT.builder()
|
CSVFormat.DEFAULT
|
||||||
|
.builder()
|
||||||
.setDelimiter(';')
|
.setDelimiter(';')
|
||||||
.setQuote('"')
|
.setQuote('"')
|
||||||
.setRecordSeparator(null)
|
.setRecordSeparator(null)
|
||||||
.setIgnoreSurroundingSpaces(true)
|
.setIgnoreSurroundingSpaces(true)
|
||||||
.setIgnoreEmptyLines(true)
|
.setIgnoreEmptyLines(true)
|
||||||
.setEscape('\\').build(); // Use backslash for escaping special characters
|
.setEscape('\\')
|
||||||
|
.build(); // Use backslash for escaping special characters
|
||||||
|
|
||||||
try (CSVParser parser = CSVParser.parse(new StringReader(preprocessedField), format)) {
|
try (CSVParser parser = CSVParser.parse(new StringReader(preprocessedField), format)) {
|
||||||
return parser.getRecords().stream()
|
return parser.getRecords().stream()
|
||||||
@ -180,7 +182,7 @@ public final class CsvUtil {
|
|||||||
preprocessedField = preprocessedField.replace("\n", "\\n").replace("\"", "\\\"");
|
preprocessedField = preprocessedField.replace("\n", "\\n").replace("\"", "\\\"");
|
||||||
|
|
||||||
CSVFormat format =
|
CSVFormat format =
|
||||||
CSVFormat.DEFAULT.builder().setDelimiter(',').setQuote('"').setEscape('\\').build();
|
CSVFormat.DEFAULT.builder().setDelimiter(',').setQuote('"').setEscape('\\').build();
|
||||||
|
|
||||||
List<String> columns;
|
List<String> columns;
|
||||||
try (CSVParser parser = CSVParser.parse(new StringReader(preprocessedField), format)) {
|
try (CSVParser parser = CSVParser.parse(new StringReader(preprocessedField), format)) {
|
||||||
|
@ -1,5 +1,9 @@
|
|||||||
package org.openmetadata.service.util.jdbi;
|
package org.openmetadata.service.util.jdbi;
|
||||||
|
|
||||||
|
import java.net.URI;
|
||||||
|
import java.net.URLDecoder;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
/** Factory class for {@link DatabaseAuthenticationProvider}. */
|
/** Factory class for {@link DatabaseAuthenticationProvider}. */
|
||||||
@ -14,15 +18,35 @@ public class DatabaseAuthenticationProviderFactory {
|
|||||||
* @return instance of {@link DatabaseAuthenticationProvider}.
|
* @return instance of {@link DatabaseAuthenticationProvider}.
|
||||||
*/
|
*/
|
||||||
public static Optional<DatabaseAuthenticationProvider> get(String jdbcURL) {
|
public static Optional<DatabaseAuthenticationProvider> get(String jdbcURL) {
|
||||||
// Check
|
Map<String, String> queryParams = parseQueryParams(jdbcURL);
|
||||||
if (jdbcURL.contains(AwsRdsDatabaseAuthenticationProvider.AWS_REGION)
|
|
||||||
|
if ("true".equals(queryParams.get("azure"))) {
|
||||||
|
return Optional.of(new AzureDatabaseAuthenticationProvider());
|
||||||
|
} else if (jdbcURL.contains(AwsRdsDatabaseAuthenticationProvider.AWS_REGION)
|
||||||
&& jdbcURL.contains(AwsRdsDatabaseAuthenticationProvider.ALLOW_PUBLIC_KEY_RETRIEVAL)) {
|
&& jdbcURL.contains(AwsRdsDatabaseAuthenticationProvider.ALLOW_PUBLIC_KEY_RETRIEVAL)) {
|
||||||
return Optional.of(new AwsRdsDatabaseAuthenticationProvider());
|
return Optional.of(new AwsRdsDatabaseAuthenticationProvider());
|
||||||
} else if (jdbcURL.contains(AzureDatabaseAuthenticationProvider.AZURE)) {
|
|
||||||
return Optional.of(new AzureDatabaseAuthenticationProvider());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return empty
|
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Map<String, String> parseQueryParams(String jdbcURL) {
|
||||||
|
try {
|
||||||
|
URI uri = new URI(jdbcURL.substring(jdbcURL.indexOf(":") + 1));
|
||||||
|
Map<String, String> queryPairs = new LinkedHashMap<>();
|
||||||
|
String query = uri.getQuery();
|
||||||
|
if (query != null) {
|
||||||
|
String[] pairs = query.split("&");
|
||||||
|
for (String pair : pairs) {
|
||||||
|
int idx = pair.indexOf("=");
|
||||||
|
queryPairs.put(
|
||||||
|
URLDecoder.decode(pair.substring(0, idx), "UTF-8"),
|
||||||
|
URLDecoder.decode(pair.substring(idx + 1), "UTF-8"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return queryPairs;
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new IllegalArgumentException("Failed to parse query parameters from JDBC URL", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,52 @@
|
|||||||
|
package org.openmetadata.service.util.jdbi;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
class DatabaseAuthenticationProviderFactoryTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testGet_withAzureTrueInJdbcUrl_returnsAzureDatabaseAuthenticationProvider() {
|
||||||
|
String jdbcURL =
|
||||||
|
"jdbc:postgresql://your-database.postgres.database.azure.com:5432/testdb?azure=true&sslmode=require";
|
||||||
|
|
||||||
|
Optional<DatabaseAuthenticationProvider> provider =
|
||||||
|
DatabaseAuthenticationProviderFactory.get(jdbcURL);
|
||||||
|
assertTrue(provider.isPresent(), "Expected AzureDatabaseAuthenticationProvider to be present");
|
||||||
|
assertTrue(
|
||||||
|
provider.get() instanceof AzureDatabaseAuthenticationProvider,
|
||||||
|
"Expected instance of AzureDatabaseAuthenticationProvider");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testGet_withoutAzureTrueInJdbcUrl_returnsEmptyOptional() {
|
||||||
|
String jdbcURL =
|
||||||
|
"jdbc:postgresql://your-database.postgres.database.azure.com:5432/testdb?sslmode=require";
|
||||||
|
Optional<DatabaseAuthenticationProvider> provider =
|
||||||
|
DatabaseAuthenticationProviderFactory.get(jdbcURL);
|
||||||
|
assertFalse(provider.isPresent(), "Expected no provider to be present");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testGet_withAwsRdsParamsInJdbcUrl_returnsAwsRdsDatabaseAuthenticationProvider() {
|
||||||
|
String jdbcURL =
|
||||||
|
"jdbc:mysql://your-aws-db.rds.amazonaws.com:3306/testdb?awsRegion=us-west-2&allowPublicKeyRetrieval=true";
|
||||||
|
Optional<DatabaseAuthenticationProvider> provider =
|
||||||
|
DatabaseAuthenticationProviderFactory.get(jdbcURL);
|
||||||
|
assertTrue(provider.isPresent(), "Expected AwsRdsDatabaseAuthenticationProvider to be present");
|
||||||
|
assertTrue(
|
||||||
|
provider.get() instanceof AwsRdsDatabaseAuthenticationProvider,
|
||||||
|
"Expected instance of AwsRdsDatabaseAuthenticationProvider");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testGet_withInvalidUrl_returnsEmptyOptional() {
|
||||||
|
String jdbcURL = "jdbc:invalidurl://your-db.test?someParam=true";
|
||||||
|
Optional<DatabaseAuthenticationProvider> provider =
|
||||||
|
DatabaseAuthenticationProviderFactory.get(jdbcURL);
|
||||||
|
assertFalse(provider.isPresent(), "Expected no provider to be present for invalid URL");
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user