This is an automated email from the ASF dual-hosted git repository. github-merge-queue[bot] pushed a commit to branch gh-readonly-queue/dev/pr-12040-82413637863aed8d245443bf3698f692373eff7a in repository https://gitbox.apache.org/repos/asf/seatunnel.git
commit 136b12d32bc257776804c9adf1ad6ce8a7c4b31f Author: Arvin <[email protected]> AuthorDate: Sun Oct 11 09:43:11 2026 +0000 [Feature][Connector-V2] Fix HTTP credential handling - add scheme check and exclude token from toString (#12040) Co-authored-by: zhang-arvin <[email protected]> --- .../seatunnel/airtable/sink/AirtableSink.java | 1 + .../source/config/AirtableSourceParameter.java | 1 + .../seatunnel/http/config/HttpParameter.java | 88 +++++++++++++++++++++- .../connectors/seatunnel/http/sink/HttpSink.java | 1 + .../config/HttpParameterCredentialSchemeTest.java | 86 +++++++++++++++++++++ .../github/config/GithubSourceParameter.java | 1 + .../source/config/GitlabSourceParameter.java | 1 + .../jira/source/config/JiraSourceParameter.java | 1 + .../source/config/KlaviyoSourceParameter.java | 1 + .../source/config/LemlistSourceParameter.java | 1 + .../source/config/MyHoursSourceParameter.java | 1 + .../source/config/NotionSourceParameter.java | 1 + .../source/config/OneSignalSourceParameter.java | 1 + .../source/config/PersistiqSourceParameter.java | 1 + .../source/config/PostHogSourceParameter.java | 1 + .../source/config/StripeSourceParameter.java | 1 + .../source/config/ZendeskSourceParameter.java | 1 + 17 files changed, 188 insertions(+), 1 deletion(-) diff --git a/seatunnel-connectors-v2/connector-http/connector-http-airtable/src/main/java/org/apache/seatunnel/connectors/seatunnel/airtable/sink/AirtableSink.java b/seatunnel-connectors-v2/connector-http/connector-http-airtable/src/main/java/org/apache/seatunnel/connectors/seatunnel/airtable/sink/AirtableSink.java index ae3bf36aa3..c73c1097df 100644 --- a/seatunnel-connectors-v2/connector-http/connector-http-airtable/src/main/java/org/apache/seatunnel/connectors/seatunnel/airtable/sink/AirtableSink.java +++ b/seatunnel-connectors-v2/connector-http/connector-http-airtable/src/main/java/org/apache/seatunnel/connectors/seatunnel/airtable/sink/AirtableSink.java @@ -58,6 +58,7 @@ public class AirtableSink extends AbstractSimpleSink<SeaTunnelRow, Void> this.httpParameter = new HttpParameter(); this.httpParameter.setUrl(AirtableConfig.buildBaseUrl(apiBaseUrl, baseId, table)); this.httpParameter.setHeaders(AirtableConfig.buildAuthHeaders(token, null)); + this.httpParameter.validateCredentialScheme(); this.batchSize = pluginConfig.get(AirtableSinkOptions.BATCH_SIZE); this.typecast = pluginConfig.get(AirtableSinkOptions.TYPECAST); diff --git a/seatunnel-connectors-v2/connector-http/connector-http-airtable/src/main/java/org/apache/seatunnel/connectors/seatunnel/airtable/source/config/AirtableSourceParameter.java b/seatunnel-connectors-v2/connector-http/connector-http-airtable/src/main/java/org/apache/seatunnel/connectors/seatunnel/airtable/source/config/AirtableSourceParameter.java index 811550dfca..55d9f633f2 100644 --- a/seatunnel-connectors-v2/connector-http/connector-http-airtable/src/main/java/org/apache/seatunnel/connectors/seatunnel/airtable/source/config/AirtableSourceParameter.java +++ b/seatunnel-connectors-v2/connector-http/connector-http-airtable/src/main/java/org/apache/seatunnel/connectors/seatunnel/airtable/source/config/AirtableSourceParameter.java @@ -50,6 +50,7 @@ public class AirtableSourceParameter extends HttpParameter { String token = pluginConfig.get(AirtableSourceOptions.TOKEN); this.setHeaders(AirtableConfig.buildAuthHeaders(token, getHeaders())); + validateCredentialScheme(); this.setBody(buildRequestBody(pluginConfig, this.getBody())); } diff --git a/seatunnel-connectors-v2/connector-http/connector-http-base/src/main/java/org/apache/seatunnel/connectors/seatunnel/http/config/HttpParameter.java b/seatunnel-connectors-v2/connector-http/connector-http-base/src/main/java/org/apache/seatunnel/connectors/seatunnel/http/config/HttpParameter.java index 94493a6c60..29418a48aa 100644 --- a/seatunnel-connectors-v2/connector-http/connector-http-base/src/main/java/org/apache/seatunnel/connectors/seatunnel/http/config/HttpParameter.java +++ b/seatunnel-connectors-v2/connector-http/connector-http-base/src/main/java/org/apache/seatunnel/connectors/seatunnel/http/config/HttpParameter.java @@ -17,19 +17,42 @@ package org.apache.seatunnel.connectors.seatunnel.http.config; +import org.apache.seatunnel.shade.org.apache.commons.lang3.StringUtils; + import org.apache.seatunnel.api.configuration.ReadonlyConfig; import lombok.Data; +import lombok.ToString; +import lombok.extern.slf4j.Slf4j; import java.io.Serializable; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; import java.util.Map; +import java.util.Set; @Data +@Slf4j @SuppressWarnings("MagicNumber") public class HttpParameter implements Serializable { + + /** Header names (lower-case) that are treated as carrying credentials for scheme validation. */ + private static final Set<String> KNOWN_CREDENTIAL_HEADERS = + new HashSet<>( + Arrays.asList( + "authorization", + "proxy-authorization", + "private-token", + "x-api-key", + "api-key", + "x-auth-token", + "x-token", + "x-access-token")); + protected String url; protected HttpRequestMethod method; - protected Map<String, String> headers; + @ToString.Exclude protected Map<String, String> headers; protected Map<String, String> params; protected Map<String, Object> pageParams; protected boolean keepParamsAsForm = false; @@ -63,6 +86,8 @@ public class HttpParameter implements Serializable { if (pluginConfig.getOptional(HttpCommonOptions.HEADERS).isPresent()) { this.setHeaders(pluginConfig.get(HttpCommonOptions.HEADERS)); } + // validate credential scheme after url and headers are set + validateCredentialScheme(); // set params if (pluginConfig.getOptional(HttpCommonOptions.PARAMS).isPresent()) { this.setParams(pluginConfig.get(HttpCommonOptions.PARAMS)); @@ -87,4 +112,65 @@ public class HttpParameter implements Serializable { this.setJsonFiledMissedReturnNull( pluginConfig.get(HttpSourceOptions.JSON_FILED_MISSED_RETURN_NULL)); } + + /** + * Validates that the URL scheme is HTTPS when credential headers are present. Logs a warning if + * the URL uses plain HTTP while authorization headers are configured, as this would send + * credentials in clear text over the network. + * + * <p>Detection matches against a small allow-list of well-known credential header names (for + * example {@code Authorization}, {@code PRIVATE-TOKEN}, {@code x-api-key}) in addition to any + * keys passed explicitly by the caller, so connectors whose credential header is not literally + * named {@code Authorization} (GitLab, PersistIQ, ...) are still covered. + */ + public void validateCredentialScheme(String... credentialHeaderKeys) { + if (StringUtils.isBlank(this.url)) { + return; + } + String lowerUrl = this.url.toLowerCase(); + if (lowerUrl.startsWith("https://")) { + return; + } + if (this.headers == null || this.headers.isEmpty()) { + return; + } + Set<String> credentialKeys = new HashSet<>(KNOWN_CREDENTIAL_HEADERS); + if (credentialHeaderKeys != null) { + for (String key : credentialHeaderKeys) { + if (key != null) { + credentialKeys.add(key.toLowerCase()); + } + } + } + if (hasCredentialHeader(credentialKeys)) { + log.warn( + "The HTTP connector URL '{}' uses a non-HTTPS scheme while credential headers are configured. " + + "Credentials will be transmitted in clear text over the network. " + + "Consider using HTTPS for production environments.", + this.url); + } + } + + /** + * Package-private detection helper: returns whether any configured header key is in {@code + * credentialKeys}. Exposed separately from {@link #validateCredentialScheme(String...)} so the + * detection can be unit-tested without capturing log output. + */ + boolean hasCredentialHeader(Set<String> credentialKeys) { + if (this.headers == null || this.headers.isEmpty()) { + return false; + } + return this.headers.keySet().stream() + .anyMatch(key -> key != null && credentialKeys.contains(key.toLowerCase())); + } + + /** Returns whether the configured credential detection would flag this parameter. */ + boolean hasCredentialHeader() { + return hasCredentialHeader(new HashSet<>(KNOWN_CREDENTIAL_HEADERS)); + } + + /** @return the built-in set of header names treated as credentials. */ + static Set<String> knownCredentialHeaders() { + return Collections.unmodifiableSet(KNOWN_CREDENTIAL_HEADERS); + } } diff --git a/seatunnel-connectors-v2/connector-http/connector-http-base/src/main/java/org/apache/seatunnel/connectors/seatunnel/http/sink/HttpSink.java b/seatunnel-connectors-v2/connector-http/connector-http-base/src/main/java/org/apache/seatunnel/connectors/seatunnel/http/sink/HttpSink.java index d6ab48aa87..d9b68e3580 100644 --- a/seatunnel-connectors-v2/connector-http/connector-http-base/src/main/java/org/apache/seatunnel/connectors/seatunnel/http/sink/HttpSink.java +++ b/seatunnel-connectors-v2/connector-http/connector-http-base/src/main/java/org/apache/seatunnel/connectors/seatunnel/http/sink/HttpSink.java @@ -57,6 +57,7 @@ public class HttpSink extends AbstractSimpleSink<SeaTunnelRow, Void> httpParameter.setRequestIntervalMs( pluginConfig.get(HttpSinkOptions.REQUEST_INTERVAL_MS)); } + httpParameter.validateCredentialScheme(); this.catalogTable = catalogTable; this.seaTunnelRowType = catalogTable.getSeaTunnelRowType(); } diff --git a/seatunnel-connectors-v2/connector-http/connector-http-base/src/test/java/org/apache/seatunnel/connectors/seatunnel/http/config/HttpParameterCredentialSchemeTest.java b/seatunnel-connectors-v2/connector-http/connector-http-base/src/test/java/org/apache/seatunnel/connectors/seatunnel/http/config/HttpParameterCredentialSchemeTest.java new file mode 100644 index 0000000000..211fb6d67f --- /dev/null +++ b/seatunnel-connectors-v2/connector-http/connector-http-base/src/test/java/org/apache/seatunnel/connectors/seatunnel/http/config/HttpParameterCredentialSchemeTest.java @@ -0,0 +1,86 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.seatunnel.connectors.seatunnel.http.config; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +class HttpParameterCredentialSchemeTest { + + private static HttpParameter parameter(String url, String... headerKeys) { + HttpParameter p = new HttpParameter(); + p.setUrl(url); + Map<String, String> headers = new HashMap<>(); + for (String key : headerKeys) { + headers.put(key, "secret-value"); + } + p.setHeaders(headers); + return p; + } + + @Test + void testAuthorizationHeaderIsDetected() { + Assertions.assertTrue( + parameter("http://example.com", "Authorization").hasCredentialHeader()); + Assertions.assertTrue( + parameter("http://example.com", "authorization").hasCredentialHeader()); + } + + @Test + void testNonAuthorizationCredentialHeadersAreDetected() { + // Regression for the substring-only check: these header names never contained + // "authorization" and were previously silently uncovered. + Assertions.assertTrue( + parameter("http://example.com", "PRIVATE-TOKEN").hasCredentialHeader()); + Assertions.assertTrue(parameter("http://example.com", "x-api-key").hasCredentialHeader()); + Assertions.assertTrue(parameter("http://example.com", "api-key").hasCredentialHeader()); + } + + @Test + void testNonCredentialHeaderIsNotDetected() { + Assertions.assertFalse(parameter("http://example.com", "Accept").hasCredentialHeader()); + Assertions.assertFalse( + parameter("http://example.com", "Content-Type").hasCredentialHeader()); + Assertions.assertFalse(parameter("http://example.com").hasCredentialHeader()); + } + + @Test + void testExplicitCredentialKeyIsDetected() { + HttpParameter p = parameter("http://example.com", "X-Custom-Token"); + Assertions.assertTrue( + p.hasCredentialHeader( + new java.util.HashSet<>(Collections.singletonList("x-custom-token")))); + } + + @Test + void testValidateCredentialSchemeDoesNotThrow() { + // The validator only logs; it must not throw for any scheme/header combination. + Assertions.assertDoesNotThrow( + () -> parameter("http://example.com", "PRIVATE-TOKEN").validateCredentialScheme()); + Assertions.assertDoesNotThrow( + () -> parameter("https://example.com", "Authorization").validateCredentialScheme()); + Assertions.assertDoesNotThrow( + () -> parameter("http://example.com").validateCredentialScheme()); + Assertions.assertDoesNotThrow( + () -> parameter(null, "Authorization").validateCredentialScheme()); + } +} diff --git a/seatunnel-connectors-v2/connector-http/connector-http-github/src/main/java/org/apache/seatunnel/connectors/seatunnel/github/config/GithubSourceParameter.java b/seatunnel-connectors-v2/connector-http/connector-http-github/src/main/java/org/apache/seatunnel/connectors/seatunnel/github/config/GithubSourceParameter.java index e75a9a6245..dcffd51f8c 100644 --- a/seatunnel-connectors-v2/connector-http/connector-http-github/src/main/java/org/apache/seatunnel/connectors/seatunnel/github/config/GithubSourceParameter.java +++ b/seatunnel-connectors-v2/connector-http/connector-http-github/src/main/java/org/apache/seatunnel/connectors/seatunnel/github/config/GithubSourceParameter.java @@ -38,6 +38,7 @@ public class GithubSourceParameter extends HttpParameter { headers.put(GithubSourceOptions.AUTHORIZATION_KEY, oauthToken); } setHeaders(headers); + validateCredentialScheme(); } // Format the access token into oauth2 format. diff --git a/seatunnel-connectors-v2/connector-http/connector-http-gitlab/src/main/java/org/apache/seatunnel/connectors/seatunnel/gitlab/source/config/GitlabSourceParameter.java b/seatunnel-connectors-v2/connector-http/connector-http-gitlab/src/main/java/org/apache/seatunnel/connectors/seatunnel/gitlab/source/config/GitlabSourceParameter.java index fd36503b6c..6eadaea2de 100644 --- a/seatunnel-connectors-v2/connector-http/connector-http-gitlab/src/main/java/org/apache/seatunnel/connectors/seatunnel/gitlab/source/config/GitlabSourceParameter.java +++ b/seatunnel-connectors-v2/connector-http/connector-http-gitlab/src/main/java/org/apache/seatunnel/connectors/seatunnel/gitlab/source/config/GitlabSourceParameter.java @@ -32,5 +32,6 @@ public class GitlabSourceParameter extends HttpParameter { GitlabSourceOptions.PRIVATE_TOKEN, pluginConfig.get(GitlabSourceOptions.ACCESS_TOKEN)); this.setHeaders(this.headers); + validateCredentialScheme(); } } diff --git a/seatunnel-connectors-v2/connector-http/connector-http-jira/src/main/java/org/apache/seatunnel/connectors/seatunnel/jira/source/config/JiraSourceParameter.java b/seatunnel-connectors-v2/connector-http/connector-http-jira/src/main/java/org/apache/seatunnel/connectors/seatunnel/jira/source/config/JiraSourceParameter.java index a2919ec507..9f3bc2a054 100644 --- a/seatunnel-connectors-v2/connector-http/connector-http-jira/src/main/java/org/apache/seatunnel/connectors/seatunnel/jira/source/config/JiraSourceParameter.java +++ b/seatunnel-connectors-v2/connector-http/connector-http-jira/src/main/java/org/apache/seatunnel/connectors/seatunnel/jira/source/config/JiraSourceParameter.java @@ -29,5 +29,6 @@ public class JiraSourceParameter extends HttpParameter { this.headers = this.getHeaders() == null ? new HashMap<>() : this.getHeaders(); this.headers.put(JiraSourceOptions.AUTHORIZATION, accessToken); this.setHeaders(this.headers); + validateCredentialScheme(); } } diff --git a/seatunnel-connectors-v2/connector-http/connector-http-klaviyo/src/main/java/org/apache/seatunnel/connectors/seatunnel/klaviyo/source/config/KlaviyoSourceParameter.java b/seatunnel-connectors-v2/connector-http/connector-http-klaviyo/src/main/java/org/apache/seatunnel/connectors/seatunnel/klaviyo/source/config/KlaviyoSourceParameter.java index ac6641d475..bdd856de8f 100644 --- a/seatunnel-connectors-v2/connector-http/connector-http-klaviyo/src/main/java/org/apache/seatunnel/connectors/seatunnel/klaviyo/source/config/KlaviyoSourceParameter.java +++ b/seatunnel-connectors-v2/connector-http/connector-http-klaviyo/src/main/java/org/apache/seatunnel/connectors/seatunnel/klaviyo/source/config/KlaviyoSourceParameter.java @@ -37,5 +37,6 @@ public class KlaviyoSourceParameter extends HttpParameter { + pluginConfig.get(KlaviyoSourceOptions.PRIVATE_KEY)); this.headers.put("revision", pluginConfig.get(KlaviyoSourceOptions.REVISION)); this.setHeaders(this.headers); + validateCredentialScheme(); } } diff --git a/seatunnel-connectors-v2/connector-http/connector-http-lemlist/src/main/java/org/apache/seatunnel/connectors/seatunnel/lemlist/source/config/LemlistSourceParameter.java b/seatunnel-connectors-v2/connector-http/connector-http-lemlist/src/main/java/org/apache/seatunnel/connectors/seatunnel/lemlist/source/config/LemlistSourceParameter.java index 4b386ab539..8c7798d8ee 100644 --- a/seatunnel-connectors-v2/connector-http/connector-http-lemlist/src/main/java/org/apache/seatunnel/connectors/seatunnel/lemlist/source/config/LemlistSourceParameter.java +++ b/seatunnel-connectors-v2/connector-http/connector-http-lemlist/src/main/java/org/apache/seatunnel/connectors/seatunnel/lemlist/source/config/LemlistSourceParameter.java @@ -29,5 +29,6 @@ public class LemlistSourceParameter extends HttpParameter { this.headers = this.getHeaders() == null ? new HashMap<>() : this.getHeaders(); this.headers.put(LemlistSourceOptions.AUTHORIZATION, accessToken); this.setHeaders(this.headers); + validateCredentialScheme(); } } diff --git a/seatunnel-connectors-v2/connector-http/connector-http-myhours/src/main/java/org/apache/seatunnel/connectors/seatunnel/myhours/source/config/MyHoursSourceParameter.java b/seatunnel-connectors-v2/connector-http/connector-http-myhours/src/main/java/org/apache/seatunnel/connectors/seatunnel/myhours/source/config/MyHoursSourceParameter.java index cc11bc3044..d37fb4c3f8 100644 --- a/seatunnel-connectors-v2/connector-http/connector-http-myhours/src/main/java/org/apache/seatunnel/connectors/seatunnel/myhours/source/config/MyHoursSourceParameter.java +++ b/seatunnel-connectors-v2/connector-http/connector-http-myhours/src/main/java/org/apache/seatunnel/connectors/seatunnel/myhours/source/config/MyHoursSourceParameter.java @@ -35,6 +35,7 @@ public class MyHoursSourceParameter extends HttpParameter { MyHoursSourceOptions.AUTHORIZATION, MyHoursSourceOptions.ACCESS_TOKEN_PREFIX + " " + accessToken); this.setHeaders(this.headers); + validateCredentialScheme(); } public void buildWithLoginConfig(ReadonlyConfig pluginConfig) { diff --git a/seatunnel-connectors-v2/connector-http/connector-http-notion/src/main/java/org/apache/seatunnel/connectors/seatunnel/notion/source/config/NotionSourceParameter.java b/seatunnel-connectors-v2/connector-http/connector-http-notion/src/main/java/org/apache/seatunnel/connectors/seatunnel/notion/source/config/NotionSourceParameter.java index df05a49261..bb247dacf8 100644 --- a/seatunnel-connectors-v2/connector-http/connector-http-notion/src/main/java/org/apache/seatunnel/connectors/seatunnel/notion/source/config/NotionSourceParameter.java +++ b/seatunnel-connectors-v2/connector-http/connector-http-notion/src/main/java/org/apache/seatunnel/connectors/seatunnel/notion/source/config/NotionSourceParameter.java @@ -33,5 +33,6 @@ public class NotionSourceParameter extends HttpParameter { this.headers.put( NotionSourceOptions.NOTION_VERSION, pluginConfig.get(NotionSourceOptions.VERSION)); this.setHeaders(this.headers); + validateCredentialScheme(); } } diff --git a/seatunnel-connectors-v2/connector-http/connector-http-onesignal/src/main/java/org/apache/seatunnel/connectors/seatunnel/onesignal/source/config/OneSignalSourceParameter.java b/seatunnel-connectors-v2/connector-http/connector-http-onesignal/src/main/java/org/apache/seatunnel/connectors/seatunnel/onesignal/source/config/OneSignalSourceParameter.java index 31c0d70911..c99d43aff8 100644 --- a/seatunnel-connectors-v2/connector-http/connector-http-onesignal/src/main/java/org/apache/seatunnel/connectors/seatunnel/onesignal/source/config/OneSignalSourceParameter.java +++ b/seatunnel-connectors-v2/connector-http/connector-http-onesignal/src/main/java/org/apache/seatunnel/connectors/seatunnel/onesignal/source/config/OneSignalSourceParameter.java @@ -35,5 +35,6 @@ public class OneSignalSourceParameter extends HttpParameter { + " " + pluginConfig.get(OneSignalSourceOptions.PASSWORD)); this.setHeaders(this.headers); + validateCredentialScheme(); } } diff --git a/seatunnel-connectors-v2/connector-http/connector-http-persistiq/src/main/java/org/apache/seatunnel/connectors/seatunnel/persistiq/source/config/PersistiqSourceParameter.java b/seatunnel-connectors-v2/connector-http/connector-http-persistiq/src/main/java/org/apache/seatunnel/connectors/seatunnel/persistiq/source/config/PersistiqSourceParameter.java index aa703b46c1..2e3a2b5288 100644 --- a/seatunnel-connectors-v2/connector-http/connector-http-persistiq/src/main/java/org/apache/seatunnel/connectors/seatunnel/persistiq/source/config/PersistiqSourceParameter.java +++ b/seatunnel-connectors-v2/connector-http/connector-http-persistiq/src/main/java/org/apache/seatunnel/connectors/seatunnel/persistiq/source/config/PersistiqSourceParameter.java @@ -32,5 +32,6 @@ public class PersistiqSourceParameter extends HttpParameter { this.headers = this.getHeaders() == null ? new HashMap<>() : this.getHeaders(); this.headers.put(X_API_KEY, pluginConfig.get(PersistiqSourceOptions.PASSWORD)); this.setHeaders(this.headers); + validateCredentialScheme(); } } diff --git a/seatunnel-connectors-v2/connector-http/connector-http-posthog/src/main/java/org/apache/seatunnel/connectors/seatunnel/posthog/source/config/PostHogSourceParameter.java b/seatunnel-connectors-v2/connector-http/connector-http-posthog/src/main/java/org/apache/seatunnel/connectors/seatunnel/posthog/source/config/PostHogSourceParameter.java index 393a2f5235..7a066eb9c3 100644 --- a/seatunnel-connectors-v2/connector-http/connector-http-posthog/src/main/java/org/apache/seatunnel/connectors/seatunnel/posthog/source/config/PostHogSourceParameter.java +++ b/seatunnel-connectors-v2/connector-http/connector-http-posthog/src/main/java/org/apache/seatunnel/connectors/seatunnel/posthog/source/config/PostHogSourceParameter.java @@ -59,6 +59,7 @@ public class PostHogSourceParameter extends HttpParameter { setHeader(headers, ACCEPT, APPLICATION_JSON); setHeader(headers, CONTENT_TYPE, APPLICATION_JSON); setHeaders(headers); + validateCredentialScheme(); Map<String, Object> queryRequest = new LinkedHashMap<>(); queryRequest.put("kind", "HogQLQuery"); diff --git a/seatunnel-connectors-v2/connector-http/connector-http-stripe/src/main/java/org/apache/seatunnel/connectors/seatunnel/stripe/source/config/StripeSourceParameter.java b/seatunnel-connectors-v2/connector-http/connector-http-stripe/src/main/java/org/apache/seatunnel/connectors/seatunnel/stripe/source/config/StripeSourceParameter.java index 400b89451b..4c2080554c 100644 --- a/seatunnel-connectors-v2/connector-http/connector-http-stripe/src/main/java/org/apache/seatunnel/connectors/seatunnel/stripe/source/config/StripeSourceParameter.java +++ b/seatunnel-connectors-v2/connector-http/connector-http-stripe/src/main/java/org/apache/seatunnel/connectors/seatunnel/stripe/source/config/StripeSourceParameter.java @@ -91,6 +91,7 @@ public class StripeSourceParameter extends HttpParameter { .filter(version -> !version.trim().isEmpty()) .ifPresent(version -> requestHeaders.put(STRIPE_VERSION, version.trim())); setHeaders(requestHeaders); + validateCredentialScheme(); Map<String, String> requestParams = new LinkedHashMap<>(); requestParams.put("limit", Integer.toString(pageSize)); diff --git a/seatunnel-connectors-v2/connector-http/connector-http-zendesk/src/main/java/org/apache/seatunnel/connectors/seatunnel/zendesk/source/config/ZendeskSourceParameter.java b/seatunnel-connectors-v2/connector-http/connector-http-zendesk/src/main/java/org/apache/seatunnel/connectors/seatunnel/zendesk/source/config/ZendeskSourceParameter.java index 2bc6505c0f..ecaed31357 100644 --- a/seatunnel-connectors-v2/connector-http/connector-http-zendesk/src/main/java/org/apache/seatunnel/connectors/seatunnel/zendesk/source/config/ZendeskSourceParameter.java +++ b/seatunnel-connectors-v2/connector-http/connector-http-zendesk/src/main/java/org/apache/seatunnel/connectors/seatunnel/zendesk/source/config/ZendeskSourceParameter.java @@ -41,5 +41,6 @@ public class ZendeskSourceParameter extends HttpParameter { Base64.getEncoder().encodeToString(credentials.getBytes(StandardCharsets.UTF_8)); this.headers.put(ZendeskSourceOptions.AUTHORIZATION, ZendeskSourceOptions.BASIC + encoded); this.setHeaders(this.headers); + validateCredentialScheme(); } }
