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

pjfanning pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/pekko-connectors.git


The following commit(s) were added to refs/heads/main by this push:
     new a7b948f9b mask sensitive values in toString (#1809)
a7b948f9b is described below

commit a7b948f9b45bec9a96bcc0d28f6ce717816602f3
Author: PJ Fanning <[email protected]>
AuthorDate: Wed Aug 5 09:56:57 2026 +0100

    mask sensitive values in toString (#1809)
---
 .../stream/connectors/amqp/AmqpConnectionProvider.scala     |  6 ++++--
 .../pekko/stream/connectors/google/auth/AccessToken.scala   | 11 ++++++++++-
 .../connectors/google/auth/AccessTokenCredentials.scala     |  5 +++++
 .../connectors/google/auth/ServiceAccountCredentials.scala  |  8 +++++++-
 .../connectors/google/auth/UserAccessCredentials.scala      |  9 ++++++++-
 .../stream/connectors/huawei/pushkit/HmsSettings.scala      | 13 +++++++++++++
 .../stream/connectors/huawei/pushkit/impl/HmsTokenApi.scala | 13 +++++++++++--
 .../pekko/stream/connectors/ironmq/IronMqSettings.scala     |  2 +-
 .../pekko/stream/connectors/jakartams/Credentials.scala     |  2 +-
 .../apache/pekko/stream/connectors/jms/Credentials.scala    |  2 +-
 .../scala/org/apache/pekko/stream/connectors/s3/model.scala |  2 +-
 11 files changed, 62 insertions(+), 11 deletions(-)

diff --git 
a/amqp/src/main/scala/org/apache/pekko/stream/connectors/amqp/AmqpConnectionProvider.scala
 
b/amqp/src/main/scala/org/apache/pekko/stream/connectors/amqp/AmqpConnectionProvider.scala
index 6d265e8dd..8509b3bd9 100644
--- 
a/amqp/src/main/scala/org/apache/pekko/stream/connectors/amqp/AmqpConnectionProvider.scala
+++ 
b/amqp/src/main/scala/org/apache/pekko/stream/connectors/amqp/AmqpConnectionProvider.scala
@@ -53,10 +53,12 @@ final class AmqpUriConnectionProvider private (val uri: 
String) extends AmqpConn
     factory.newConnection
   }
 
-  override def toString: String =
+  override def toString: String = {
+    val maskedUri = uri.replaceAll("://([^@]*)@", "://*****@")
     "AmqpUriConnectionProvider(" +
-    s"uri=$uri" +
+    s"uri=$maskedUri" +
     ")"
+  }
 }
 
 object AmqpUriConnectionProvider {
diff --git 
a/google-common/src/main/scala/org/apache/pekko/stream/connectors/google/auth/AccessToken.scala
 
b/google-common/src/main/scala/org/apache/pekko/stream/connectors/google/auth/AccessToken.scala
index 3f6b538db..c82d7d009 100644
--- 
a/google-common/src/main/scala/org/apache/pekko/stream/connectors/google/auth/AccessToken.scala
+++ 
b/google-common/src/main/scala/org/apache/pekko/stream/connectors/google/auth/AccessToken.scala
@@ -26,6 +26,10 @@ import scala.concurrent.duration._
 private[auth] final case class AccessToken(token: String, expiresAt: Long) {
   def expiresSoon(in: FiniteDuration = 1.minute)(implicit clock: Clock): 
Boolean =
     expiresAt < JwtTime.nowSeconds + in.toSeconds
+
+  override def toString: String =
+    "AccessToken(token=*****," +
+    s"expiresAt=$expiresAt)"
 }
 
 @InternalApi
@@ -39,7 +43,12 @@ private[auth] object AccessToken {
 }
 
 @InternalApi
-private[auth] final case class AccessTokenResponse(access_token: String, 
token_type: String, expires_in: Int)
+private[auth] final case class AccessTokenResponse(access_token: String, 
token_type: String, expires_in: Int) {
+  override def toString: String =
+    "AccessTokenResponse(access_token=*****," +
+    s"token_type=$token_type," +
+    s"expires_in=$expires_in)"
+}
 
 @InternalApi
 private[auth] object AccessTokenResponse {
diff --git 
a/google-common/src/main/scala/org/apache/pekko/stream/connectors/google/auth/AccessTokenCredentials.scala
 
b/google-common/src/main/scala/org/apache/pekko/stream/connectors/google/auth/AccessTokenCredentials.scala
index 9f121cac1..33fec7fcd 100644
--- 
a/google-common/src/main/scala/org/apache/pekko/stream/connectors/google/auth/AccessTokenCredentials.scala
+++ 
b/google-common/src/main/scala/org/apache/pekko/stream/connectors/google/auth/AccessTokenCredentials.scala
@@ -33,6 +33,11 @@ private[auth] object AccessTokenCredentials {
 private[auth] final case class AccessTokenCredentials(projectId: String, 
accessToken: String) extends Credentials
     with RetrievableCredentials {
 
+  override def toString: String =
+    "AccessTokenCredentials(" +
+    s"projectId=$projectId," +
+    s"accessToken=*****)"
+
   private val futureToken = Future.successful(OAuth2BearerToken(accessToken))
 
   override def get()(implicit ec: ExecutionContext, settings: 
RequestSettings): Future[OAuth2BearerToken] =
diff --git 
a/google-common/src/main/scala/org/apache/pekko/stream/connectors/google/auth/ServiceAccountCredentials.scala
 
b/google-common/src/main/scala/org/apache/pekko/stream/connectors/google/auth/ServiceAccountCredentials.scala
index 7e69fb4e6..b96c8bced 100644
--- 
a/google-common/src/main/scala/org/apache/pekko/stream/connectors/google/auth/ServiceAccountCredentials.scala
+++ 
b/google-common/src/main/scala/org/apache/pekko/stream/connectors/google/auth/ServiceAccountCredentials.scala
@@ -53,7 +53,13 @@ private[connectors] object ServiceAccountCredentials {
     apply(projectId, clientEmail, privateKey, scopes)
   }
 
-  final case class ServiceAccountCredentialsFile(project_id: String, 
client_email: String, private_key: String)
+  final case class ServiceAccountCredentialsFile(project_id: String, 
client_email: String, private_key: String) {
+    override def toString: String =
+      "ServiceAccountCredentialsFile(" +
+      s"project_id=$project_id," +
+      s"client_email=$client_email," +
+      s"private_key=*****)"
+  }
   implicit val serviceAccountCredentialsFormat: 
RootJsonFormat[ServiceAccountCredentialsFile] = jsonFormat3(
     ServiceAccountCredentialsFile.apply)
 }
diff --git 
a/google-common/src/main/scala/org/apache/pekko/stream/connectors/google/auth/UserAccessCredentials.scala
 
b/google-common/src/main/scala/org/apache/pekko/stream/connectors/google/auth/UserAccessCredentials.scala
index be1f71ea9..102690cc7 100644
--- 
a/google-common/src/main/scala/org/apache/pekko/stream/connectors/google/auth/UserAccessCredentials.scala
+++ 
b/google-common/src/main/scala/org/apache/pekko/stream/connectors/google/auth/UserAccessCredentials.scala
@@ -59,7 +59,14 @@ private[connectors] object UserAccessCredentials {
   final case class UserAccessCredentialsFile(client_id: String,
       client_secret: String,
       refresh_token: String,
-      quota_project_id: String)
+      quota_project_id: String) {
+    override def toString: String =
+      "UserAccessCredentialsFile(" +
+      s"client_id=$client_id," +
+      s"client_secret=*****," +
+      s"refresh_token=*****," +
+      s"quota_project_id=$quota_project_id)"
+  }
   implicit val userAccessCredentialsFormat: 
RootJsonFormat[UserAccessCredentialsFile] = jsonFormat4(
     UserAccessCredentialsFile.apply)
 }
diff --git 
a/huawei-push-kit/src/main/scala/org/apache/pekko/stream/connectors/huawei/pushkit/HmsSettings.scala
 
b/huawei-push-kit/src/main/scala/org/apache/pekko/stream/connectors/huawei/pushkit/HmsSettings.scala
index d818b19f6..2354ae22e 100644
--- 
a/huawei-push-kit/src/main/scala/org/apache/pekko/stream/connectors/huawei/pushkit/HmsSettings.scala
+++ 
b/huawei-push-kit/src/main/scala/org/apache/pekko/stream/connectors/huawei/pushkit/HmsSettings.scala
@@ -143,6 +143,14 @@ final case class HmsSettings @InternalApi private (
     maxConcurrentConnections: Int,
     forwardProxy: Option[ForwardProxy]) {
 
+  override def toString: String =
+    "HmsSettings(" +
+    s"appId=$appId," +
+    s"appSecret=*****," +
+    s"test=$test," +
+    s"maxConcurrentConnections=$maxConcurrentConnections," +
+    s"forwardProxy=$forwardProxy)"
+
   def getAppId = appId
   def getAppSecret = appSecret
   def isTest = test
@@ -254,6 +262,11 @@ object ForwardProxyCredentials {
 
 final case class ForwardProxyCredentials @InternalApi private (username: 
String, password: String) {
 
+  override def toString: String =
+    "ForwardProxyCredentials(" +
+    s"username=$username," +
+    s"password=*****)"
+
   def getUsername: String = username
   def getPassword: String = password
 
diff --git 
a/huawei-push-kit/src/main/scala/org/apache/pekko/stream/connectors/huawei/pushkit/impl/HmsTokenApi.scala
 
b/huawei-push-kit/src/main/scala/org/apache/pekko/stream/connectors/huawei/pushkit/impl/HmsTokenApi.scala
index d9e7e7bc7..509843a7d 100644
--- 
a/huawei-push-kit/src/main/scala/org/apache/pekko/stream/connectors/huawei/pushkit/impl/HmsTokenApi.scala
+++ 
b/huawei-push-kit/src/main/scala/org/apache/pekko/stream/connectors/huawei/pushkit/impl/HmsTokenApi.scala
@@ -72,6 +72,15 @@ private[pushkit] class HmsTokenApi(http: => HttpExt, system: 
ActorSystem, forwar
  */
 @InternalApi
 private[pushkit] object HmsTokenApi {
-  case class AccessTokenExpiry(accessToken: String, expiresAt: Long)
-  case class OAuthResponse(access_token: String, token_type: String, 
expires_in: Int)
+  case class AccessTokenExpiry(accessToken: String, expiresAt: Long) {
+    override def toString: String =
+      "AccessTokenExpiry(accessToken=*****," +
+      s"expiresAt=$expiresAt)"
+  }
+  case class OAuthResponse(access_token: String, token_type: String, 
expires_in: Int) {
+    override def toString: String =
+      "OAuthResponse(access_token=*****," +
+      s"token_type=$token_type," +
+      s"expires_in=$expires_in)"
+  }
 }
diff --git 
a/ironmq/src/main/scala/org/apache/pekko/stream/connectors/ironmq/IronMqSettings.scala
 
b/ironmq/src/main/scala/org/apache/pekko/stream/connectors/ironmq/IronMqSettings.scala
index 744d53be2..1bc88828b 100644
--- 
a/ironmq/src/main/scala/org/apache/pekko/stream/connectors/ironmq/IronMqSettings.scala
+++ 
b/ironmq/src/main/scala/org/apache/pekko/stream/connectors/ironmq/IronMqSettings.scala
@@ -57,7 +57,7 @@ final class IronMqSettings private (
     "IronMqSettings(" +
     s"endpoint=$endpoint," +
     s"projectId=$projectId," +
-    s"token=$token," +
+    s"token=*****," +
     s"consumerSettings=$consumerSettings" +
     ")"
 }
diff --git 
a/jakartams/src/main/scala/org/apache/pekko/stream/connectors/jakartams/Credentials.scala
 
b/jakartams/src/main/scala/org/apache/pekko/stream/connectors/jakartams/Credentials.scala
index 82e9e379a..0275467f8 100644
--- 
a/jakartams/src/main/scala/org/apache/pekko/stream/connectors/jakartams/Credentials.scala
+++ 
b/jakartams/src/main/scala/org/apache/pekko/stream/connectors/jakartams/Credentials.scala
@@ -31,7 +31,7 @@ final class Credentials private (
   override def toString =
     "Credentials(" +
     s"username=$username," +
-    s"password=${"*" * password.length}" +
+    s"password=*****" +
     ")"
 
   override def equals(other: Any): Boolean = other match {
diff --git 
a/jms/src/main/scala/org/apache/pekko/stream/connectors/jms/Credentials.scala 
b/jms/src/main/scala/org/apache/pekko/stream/connectors/jms/Credentials.scala
index 41957a485..dbe71fae4 100644
--- 
a/jms/src/main/scala/org/apache/pekko/stream/connectors/jms/Credentials.scala
+++ 
b/jms/src/main/scala/org/apache/pekko/stream/connectors/jms/Credentials.scala
@@ -31,7 +31,7 @@ final class Credentials private (
   override def toString =
     "Credentials(" +
     s"username=$username," +
-    s"password=${"*" * password.length}" +
+    s"password=*****" +
     ")"
 
   override def equals(other: Any): Boolean = other match {
diff --git 
a/s3/src/main/scala/org/apache/pekko/stream/connectors/s3/model.scala 
b/s3/src/main/scala/org/apache/pekko/stream/connectors/s3/model.scala
index 752abf6aa..240cbb866 100644
--- a/s3/src/main/scala/org/apache/pekko/stream/connectors/s3/model.scala
+++ b/s3/src/main/scala/org/apache/pekko/stream/connectors/s3/model.scala
@@ -46,7 +46,7 @@ final class MFA private (val serialNumber: String, val 
tokenCode: String) {
   override def toString: String =
     "MFA(" +
     s"serialNumber=$serialNumber," +
-    s"tokenCode=$tokenCode" +
+    s"tokenCode=*****" +
     ")"
 
   override def equals(other: Any): Boolean = other match {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to