diff --git a/dd-trace-api/src/main/java/datadog/trace/api/Config.java b/dd-trace-api/src/main/java/datadog/trace/api/Config.java index e9b6e9c816a..430b01adf02 100644 --- a/dd-trace-api/src/main/java/datadog/trace/api/Config.java +++ b/dd-trace-api/src/main/java/datadog/trace/api/Config.java @@ -202,6 +202,18 @@ public enum PropagationStyle { /** A tag intended for internal use only, hence not added to the public api DDTags class. */ private static final String INTERNAL_HOST_NAME = "_dd.hostname"; + /** Used for masking sensitive information when doing toString */ + @ToString.Include(name = "profilingApiKey") + private String profilingApiKeyMasker() { + return profilingApiKey != null ? "****" : null; + } + + /** Used for masking sensitive information when doing toString */ + @ToString.Include(name = "profilingProxyPassword") + private String profilingProxyPasswordMasker() { + return profilingProxyPassword != null ? "****" : null; + } + /** * this is a random UUID that gets generated on JVM start up and is attached to every root span * and every JMX metric that is sent out. diff --git a/dd-trace-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy b/dd-trace-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy index db37f07a6a1..4eb3ef7ad34 100644 --- a/dd-trace-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy +++ b/dd-trace-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy @@ -93,6 +93,7 @@ class ConfigTest extends DDSpecification { private static final DD_PROFILING_API_KEY_ENV = "DD_PROFILING_API_KEY" private static final DD_PROFILING_API_KEY_OLD_ENV = "DD_PROFILING_APIKEY" private static final DD_PROFILING_TAGS_ENV = "DD_PROFILING_TAGS" + private static final DD_PROFILING_PROXY_PASSWORD_ENV = "DD_PROFILING_PROXY_PASSWORD" def "verify defaults"() { when: @@ -406,6 +407,23 @@ class ConfigTest extends DDSpecification { config.profilingApiKey == "test-api-key" } + def "sensitive information removed for toString/debug log"() { + setup: + environmentVariables.set(DD_PROFILING_API_KEY_ENV, "test-secret-api-key") + environmentVariables.set(DD_PROFILING_PROXY_PASSWORD_ENV, "test-secret-proxy-password") + + when: + def config = new Config() + + then: + config.toString().contains("profilingApiKey=****"); + !config.toString().contains("test-secret-api-key") + config.toString().contains("profilingProxyPassword=****"); + !config.toString().contains("test-secret-proxy-password") + config.getProfilingApiKey() == "test-secret-api-key" + config.getProfilingProxyPassword() == "test-secret-proxy-password" + } + def "sys props override env vars"() { setup: environmentVariables.set(DD_SERVICE_NAME_ENV, "still something else")