/*
 * 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.flink.runtime.rest.messages;

import org.apache.flink.configuration.Configuration;
import org.apache.flink.configuration.GlobalConfiguration;
import org.apache.flink.runtime.rest.handler.cluster.ClusterConfigHandler;

import java.util.ArrayList;

/**
 * Response of the {@link ClusterConfigHandler}, represented as a list
 * of key-value pairs of the cluster {@link Configuration}.
 */
public class ClusterConfigurationInfo extends ArrayList<ClusterConfigurationInfoEntry> implements ResponseBody {

	private static final long serialVersionUID = -1170348873871206964L;

	// a default constructor is required for collection type marshalling
	public ClusterConfigurationInfo() {}

	public ClusterConfigurationInfo(int initialEntries) {
		super(initialEntries);
	}

	public static ClusterConfigurationInfo from(Configuration config) {
		ClusterConfigurationInfo clusterConfig = new ClusterConfigurationInfo(config.keySet().size());

		for (String key : config.keySet()) {
			String value = config.getString(key, null);

			// Mask key values which contain sensitive information
			if (value != null && GlobalConfiguration.isSensitive(key)) {
				value = GlobalConfiguration.HIDDEN_CONTENT;
			}

			clusterConfig.add(new ClusterConfigurationInfoEntry(key, value));
		}

		return clusterConfig;
	}

}

@@ -940,22 +940,16 @@
 uration.
-Global
 Configur
@@ -945,32 +945,37 @@
 on.Configuration
+Utils
 ;%0Aimport org.apa
@@ -1063,16 +1063,38 @@
 rayList;
+%0Aimport java.util.Map;
 %0A%0A/**%0A *
@@ -1674,16 +1674,22 @@
 ig) %7B%0A%09%09
+final 
 ClusterC
@@ -1779,271 +1779,234 @@
 ));%0A
-%0A
 %09%09f
-or (String key : config.keySet()) %7B%0A%09%09%09String v
+inal Map%3CString, String%3E configurationWithHiddenSensitiveV
 alue
+s
  = 
-c
+C
 onfig
-.getString(key, null);%0A%0A%09%09%09// Mask key values which contain sensitive information%0A%09%09%09if (value != null && GlobalConfiguration.isSensitive(key)) %7B%0A%09%09%09%09value = GlobalConfiguration.HIDDEN_CONTENT;%0A%09%09%09%7D%0A
+urationUtils.hideSensitiveValues(config.toMap());%0A%0A%09%09for (Map.Entry%3CString, String%3E keyValuePair : configurationWithHiddenSensitiveValues.entrySet()) %7B
 %0A%09%09%09
@@ -2064,15 +2064,51 @@
 (key
-, value
+ValuePair.getKey(), keyValuePair.getValue()
 ));%0A

Use ConfigurationUtils.hideSensitiveValues in ClusterConfigurationInfo