This is an automated email from the ASF dual-hosted git repository.

lizhimins pushed a commit to branch rocketmq-studio
in repository https://gitbox.apache.org/repos/asf/rocketmq-dashboard.git


The following commit(s) were added to refs/heads/rocketmq-studio by this push:
     new 5de4d6f4 fix(settings): normalize identifiers with root locale (#1472)
5de4d6f4 is described below

commit 5de4d6f4d05029aa4371aadeb77b4464a7ce2e11
Author: 0 <[email protected]>
AuthorDate: Mon Aug 10 21:12:11 2026 +0800

    fix(settings): normalize identifiers with root locale (#1472)
---
 .../rocketmq/studio/settings/SettingsService.java  |  5 ++--
 .../studio/settings/SettingsServiceTest.java       | 30 ++++++++++++++++++++++
 2 files changed, 33 insertions(+), 2 deletions(-)

diff --git 
a/server/src/main/java/org/apache/rocketmq/studio/settings/SettingsService.java 
b/server/src/main/java/org/apache/rocketmq/studio/settings/SettingsService.java
index 7fb02fb1..2e8023c8 100644
--- 
a/server/src/main/java/org/apache/rocketmq/studio/settings/SettingsService.java
+++ 
b/server/src/main/java/org/apache/rocketmq/studio/settings/SettingsService.java
@@ -186,7 +186,8 @@ public class SettingsService {
 
     private boolean isPrometheusCompatible(String type) {
         return StringUtils.hasText(type)
-                && 
PROMETHEUS_COMPATIBLE_TYPES.contains(type.replaceAll("\\s+", "").toLowerCase());
+                && PROMETHEUS_COMPATIBLE_TYPES.contains(
+                        type.replaceAll("\\s+", "").toLowerCase(Locale.ROOT));
     }
 
     private String normalizeDataSourceKey(String key) {
@@ -222,7 +223,7 @@ public class SettingsService {
         if (!StringUtils.hasText(auth)) {
             return AUTH_NONE;
         }
-        return auth.trim().replaceAll("\\s+", " ").toLowerCase();
+        return auth.trim().replaceAll("\\s+", " ").toLowerCase(Locale.ROOT);
     }
 
     private URI prometheusQueryUri(String baseUrl) throws URISyntaxException {
diff --git 
a/server/src/test/java/org/apache/rocketmq/studio/settings/SettingsServiceTest.java
 
b/server/src/test/java/org/apache/rocketmq/studio/settings/SettingsServiceTest.java
index 6d1c7684..f514c76d 100644
--- 
a/server/src/test/java/org/apache/rocketmq/studio/settings/SettingsServiceTest.java
+++ 
b/server/src/test/java/org/apache/rocketmq/studio/settings/SettingsServiceTest.java
@@ -36,6 +36,7 @@ import java.util.Arrays;
 import java.util.Base64;
 import java.util.Collections;
 import java.util.List;
+import java.util.Locale;
 import java.util.concurrent.atomic.AtomicReference;
 
 import static org.assertj.core.api.Assertions.assertThat;
@@ -373,6 +374,35 @@ class SettingsServiceTest {
                 + 
Base64.getEncoder().encodeToString("prom:secret".getBytes(StandardCharsets.UTF_8)));
     }
 
+    @Test
+    void 
testConnectionShouldNormalizeIdentifiersIndependentlyOfDefaultLocale() {
+        AtomicReference<String> authorization = new AtomicReference<>();
+        prometheusServer.createContext("/api/v1/query", exchange -> {
+            
authorization.set(exchange.getRequestHeaders().getFirst("Authorization"));
+            respond(exchange, 200, 
"{\"status\":\"success\",\"data\":{\"resultType\":\"vector\",\"result\":[]}}");
+        });
+        DataSourceTestDTO request = DataSourceTestDTO.builder()
+                .url(prometheusBaseUrl)
+                .type("MIMIR")
+                .auth("Basic Auth")
+                .username("prom")
+                .password("secret")
+                .build();
+        Locale originalLocale = Locale.getDefault();
+
+        DataSourceTestResultVO result;
+        try {
+            Locale.setDefault(Locale.forLanguageTag("tr-TR"));
+            result = settingsService.testDataSource(request);
+        } finally {
+            Locale.setDefault(originalLocale);
+        }
+
+        assertThat(result.isSuccess()).isTrue();
+        assertThat(authorization.get()).isEqualTo("Basic "
+                + 
Base64.getEncoder().encodeToString("prom:secret".getBytes(StandardCharsets.UTF_8)));
+    }
+
     @Test
     void testConnectionShouldApplyBearerAuthentication() {
         AtomicReference<String> authorization = new AtomicReference<>();

Reply via email to