Skip to content

Commit f057140

Browse files
authored
Merge branch 'master' into bb/form-access-get-api-key-ldap-groups
2 parents 181adea + 2d3e45c commit f057140

File tree

4 files changed

+45
-9
lines changed

4 files changed

+45
-9
lines changed

runtime/v2/runner-test/src/test/java/com/walmartlabs/concord/runtime/v2/runner/MainTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1355,6 +1355,7 @@ public void testSensitiveData() throws Exception {
13551355
assertLog(log, ".*" + Pattern.quote("map: {nonSecretButMasked=******, secret=******}") + ".*");
13561356
assertLog(log, ".*" + Pattern.quote("map: {nonSecret=non secret value, secret=******}") + ".*");
13571357
assertLog(log, ".*" + Pattern.quote("map.nested: {nonSecret=non secret value, secret={top-secret=******}}") + ".*");
1358+
assertLog(log, ".*" + Pattern.quote("map.path: {nonSecret=non secret value, key={top-secret=******, inner=non secret value}}") + ".*");
13581359

13591360
assertLog(log, ".*" + Pattern.quote("plain: plain") + ".*");
13601361

runtime/v2/runner-test/src/test/java/com/walmartlabs/concord/runtime/v2/runner/tasks/Tasks.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,18 @@ public Map<String, String> getSensitiveMapStrict(String str) {
305305
return result;
306306
}
307307

308+
@SensitiveData(keys = {"key.top-secret"})
309+
public Map<String, Object> getSensitiveMapWithPath(String str) {
310+
Map<String, Object> inner = new LinkedHashMap<>();
311+
inner.put("top-secret", str);
312+
inner.put("inner", "non secret value");
313+
314+
Map<String, Object> result = new LinkedHashMap<>();
315+
result.put("nonSecret", "non secret value");
316+
result.put("key", inner);
317+
return result;
318+
}
319+
308320
@SensitiveData(keys = {"secret"}, includeNestedValues = true)
309321
public Map<String, Object> getSensitiveMapWithNested(String str) {
310322
Map<String, Object> result = new LinkedHashMap<>();

runtime/v2/runner-test/src/test/resources/com/walmartlabs/concord/runtime/v2/runner/sensitiveData/concord.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ flows:
1212
- log: "map: ${sensitiveTask.getSensitiveMap('XXX-MAP')}"
1313
- log: "map: ${sensitiveTask.getSensitiveMapStrict('XXX-MAP')}"
1414
- log: "map.nested: ${sensitiveTask.getSensitiveMapWithNested('top-secret-nested-value')}"
15+
- log: "map.path: ${sensitiveTask.getSensitiveMapWithPath('mask-this-value')}"
1516

1617
- log: "plain: ${sensitiveTask.getPlain('plain')}"
1718

runtime/v2/runner/src/main/java/com/walmartlabs/concord/runtime/v2/runner/el/resolvers/SensitiveDataProcessor.java

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
*/
2222

2323
import com.google.inject.Inject;
24+
import com.walmartlabs.concord.common.ConfigurationUtils;
2425
import com.walmartlabs.concord.runtime.v2.sdk.SensitiveData;
2526
import com.walmartlabs.concord.runtime.v2.sdk.SensitiveDataHolder;
2627

@@ -39,6 +40,7 @@ public SensitiveDataProcessor(SensitiveDataHolder sensitiveDataHolder) {
3940
this.sensitiveDataHolder = sensitiveDataHolder;
4041
}
4142

43+
@SuppressWarnings("unchecked")
4244
public void process(Object value, Method method) {
4345
if (value == null || method == null) {
4446
return;
@@ -51,17 +53,37 @@ public void process(Object value, Method method) {
5153

5254
if (value instanceof String) {
5355
sensitiveDataHolder.add((String) value);
54-
} else if (value instanceof Map<?, ?> m) {
55-
var keys = a.keys() != null && a.keys().length > 0 ? new HashSet<Object>(Arrays.asList(a.keys())) : m.keySet();
56-
57-
for (var key : keys) {
58-
var v = m.get(key);
59-
if (v instanceof String) {
60-
sensitiveDataHolder.add((String) v);
61-
} else if (a.includeNestedValues() && v instanceof Map<?,?> nested) {
62-
processNestedValues(nested, 0);
56+
}
57+
58+
if (value instanceof Map<?, ?> m) {
59+
collectFromMap((Map<String, Object>) m, a);
60+
}
61+
}
62+
63+
private void collectFromMap(Map<String, Object> m, SensitiveData a) {
64+
if (a.keys() != null && a.keys().length > 0) {
65+
for (var k : a.keys()) {
66+
var path = k.split("\\.");
67+
if (ConfigurationUtils.has(m, path)) {
68+
var v = ConfigurationUtils.get(m, path);
69+
collectValue(v, a);
6370
}
6471
}
72+
} else {
73+
for (var key : m.keySet()) {
74+
collectValue(m.get(key), a);
75+
}
76+
}
77+
}
78+
79+
private void collectValue(Object v, SensitiveData a) {
80+
if (v instanceof String s) {
81+
sensitiveDataHolder.add(s);
82+
return;
83+
}
84+
85+
if (a.includeNestedValues() && v instanceof Map<?, ?> nested) {
86+
processNestedValues(nested, 0);
6587
}
6688
}
6789

0 commit comments

Comments
 (0)