[FLINK-9100][core] Hide configured value for "password"/"secret"

This closes #9100.


Project: http://git-wip-us.apache.org/repos/asf/flink/repo
Commit: http://git-wip-us.apache.org/repos/asf/flink/commit/1a9675d5
Tree: http://git-wip-us.apache.org/repos/asf/flink/tree/1a9675d5
Diff: http://git-wip-us.apache.org/repos/asf/flink/diff/1a9675d5

Branch: refs/heads/master
Commit: 1a9675d54fda7c6d7c519935dde05f47eb449401
Parents: aa4bdc0
Author: sihuazhou <summerle...@163.com>
Authored: Tue Apr 24 13:39:11 2018 +0200
Committer: zentol <ches...@apache.org>
Committed: Tue Apr 24 13:41:43 2018 +0200

----------------------------------------------------------------------
 .../configuration/GlobalConfiguration.java      | 24 +++++++++++++++++++-
 .../configuration/GlobalConfigurationTest.java  | 10 ++++++++
 2 files changed, 33 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flink/blob/1a9675d5/flink-core/src/main/java/org/apache/flink/configuration/GlobalConfiguration.java
----------------------------------------------------------------------
diff --git 
a/flink-core/src/main/java/org/apache/flink/configuration/GlobalConfiguration.java
 
b/flink-core/src/main/java/org/apache/flink/configuration/GlobalConfiguration.java
index 2f2a9cf..fd7d441 100644
--- 
a/flink-core/src/main/java/org/apache/flink/configuration/GlobalConfiguration.java
+++ 
b/flink-core/src/main/java/org/apache/flink/configuration/GlobalConfiguration.java
@@ -19,6 +19,7 @@
 package org.apache.flink.configuration;
 
 import org.apache.flink.annotation.Internal;
+import org.apache.flink.util.Preconditions;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -42,6 +43,11 @@ public final class GlobalConfiguration {
 
        public static final String FLINK_CONF_FILENAME = "flink-conf.yaml";
 
+       // the keys whose values should be hidden
+       private static final String[] SENSITIVE_KEYS = new String[] 
{"password", "secret"};
+
+       // the hidden content to be displayed
+       public static final String HIDDEN_CONTENT = "******";
 
        // 
--------------------------------------------------------------------------------------------
 
@@ -183,7 +189,7 @@ public final class GlobalConfiguration {
                                                continue;
                                        }
 
-                                       LOG.info("Loading configuration 
property: {}, {}", key, value);
+                                       LOG.info("Loading configuration 
property: {}, {}", key, isSensitive(key) ? HIDDEN_CONTENT : value);
                                        config.setString(key, value);
                                }
                        }
@@ -194,4 +200,20 @@ public final class GlobalConfiguration {
                return config;
        }
 
+       /**
+        * Check whether the key is a hidden key.
+        *
+        * @param key the config key
+        */
+       public static boolean isSensitive(String key) {
+               Preconditions.checkNotNull(key, "key is null");
+               final String keyInLower = key.toLowerCase();
+               for (String hideKey : SENSITIVE_KEYS) {
+                       if (keyInLower.length() >= hideKey.length()
+                               && keyInLower.contains(hideKey)) {
+                               return true;
+                       }
+               }
+               return false;
+       }
 }

http://git-wip-us.apache.org/repos/asf/flink/blob/1a9675d5/flink-core/src/test/java/org/apache/flink/configuration/GlobalConfigurationTest.java
----------------------------------------------------------------------
diff --git 
a/flink-core/src/test/java/org/apache/flink/configuration/GlobalConfigurationTest.java
 
b/flink-core/src/test/java/org/apache/flink/configuration/GlobalConfigurationTest.java
index c5d2e62..a42564d 100644
--- 
a/flink-core/src/test/java/org/apache/flink/configuration/GlobalConfigurationTest.java
+++ 
b/flink-core/src/test/java/org/apache/flink/configuration/GlobalConfigurationTest.java
@@ -31,7 +31,9 @@ import java.io.PrintWriter;
 import java.util.UUID;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
 
 /**
  * This class contains tests for the global configuration (parsing 
configuration directory information).
@@ -120,4 +122,12 @@ public class GlobalConfigurationTest extends TestLogger {
                
assertNotNull(GlobalConfiguration.loadConfiguration(tempFolder.getRoot().getAbsolutePath()));
        }
 
+       @Test
+       public void testHiddenKey() {
+               assertTrue(GlobalConfiguration.isSensitive("password123"));
+               assertTrue(GlobalConfiguration.isSensitive("123pasSword"));
+               assertTrue(GlobalConfiguration.isSensitive("PasSword"));
+               assertTrue(GlobalConfiguration.isSensitive("Secret"));
+               assertFalse(GlobalConfiguration.isSensitive("Hello"));
+       }
 }

Reply via email to