28
28
import com .walmartlabs .concord .runtime .v2 .model .Location ;
29
29
import com .walmartlabs .concord .runtime .v2 .model .Step ;
30
30
import com .walmartlabs .concord .runtime .v2 .runner .EventReportingService ;
31
+ import com .walmartlabs .concord .runtime .v2 .runner .SensitiveDataHolder ;
31
32
import com .walmartlabs .concord .runtime .v2 .runner .tasks .TaskCallEvent ;
32
33
import com .walmartlabs .concord .runtime .v2 .runner .tasks .TaskCallListener ;
33
34
import com .walmartlabs .concord .runtime .v2 .sdk .*;
@@ -64,7 +65,9 @@ public void onEvent(TaskCallEvent event) {
64
65
65
66
List <Object > inVars = event .input ();
66
67
if (inVars != null && eventConfiguration .recordTaskInVars ()) {
67
- Map <String , Object > vars = maskVars (convertInput (hideSensitiveData (inVars , event .inputAnnotations ())), eventConfiguration .inVarsBlacklist ());
68
+ Map <String , Object > input = convertInput (processSensitiveDataAnnotations (inVars , event .inputAnnotations ()));
69
+ input = processSensitiveData (input );
70
+ Map <String , Object > vars = maskVars (input , eventConfiguration .inVarsBlacklist ());
68
71
if (eventConfiguration .truncateInVars ()) {
69
72
vars = ObjectTruncater .truncateMap (vars , eventConfiguration .truncateMaxStringLength (), eventConfiguration .truncateMaxArrayLength (), eventConfiguration .truncateMaxDepth ());
70
73
}
@@ -75,7 +78,9 @@ public void onEvent(TaskCallEvent event) {
75
78
76
79
Object outVars = event .result ();
77
80
if (outVars != null && eventConfiguration .recordTaskOutVars ()) {
78
- Map <String , Object > vars = maskVars (asMapOrNull (outVars ), eventConfiguration .outVarsBlacklist ());
81
+ Map <String , Object > output = asMapOrNull (outVars );
82
+ output = processSensitiveData (output );
83
+ Map <String , Object > vars = maskVars (output , eventConfiguration .outVarsBlacklist ());
79
84
if (eventConfiguration .truncateOutVars ()) {
80
85
vars = ObjectTruncater .truncateMap (vars , eventConfiguration .truncateMaxStringLength (), eventConfiguration .truncateMaxArrayLength (), eventConfiguration .truncateMaxDepth ());
81
86
}
@@ -86,7 +91,9 @@ public void onEvent(TaskCallEvent event) {
86
91
87
92
Object metaVars = event .meta ();
88
93
if (metaVars != null && eventConfiguration .recordTaskMeta ()) {
89
- Map <String , Object > meta = maskVars (asMapOrNull (metaVars ), eventConfiguration .metaBlacklist ());
94
+ Map <String , Object > rawMeta = asMapOrNull (metaVars );
95
+ Map <String , Object > meta = processSensitiveData (rawMeta );
96
+ meta = maskVars (meta , eventConfiguration .metaBlacklist ());
90
97
if (eventConfiguration .truncateMeta ()) {
91
98
meta = ObjectTruncater .truncateMap (meta , eventConfiguration .truncateMaxStringLength (), eventConfiguration .truncateMaxArrayLength (), eventConfiguration .truncateMaxDepth ());
92
99
}
@@ -170,6 +177,34 @@ static Map<String, Object> maskVars(Map<String, Object> vars, Collection<String>
170
177
return result ;
171
178
}
172
179
180
+ @ SuppressWarnings ({"unchecked" , "rawtypes" })
181
+ static <T > T processSensitiveData (T v ) {
182
+ Set <String > sensitiveStrings = SensitiveDataHolder .getInstance ().get ();
183
+ if (sensitiveStrings .isEmpty ()) {
184
+ return v ;
185
+ }
186
+
187
+ if (v instanceof String s ) {
188
+ for (String sensitiveString : sensitiveStrings ) {
189
+ s = s .replace (sensitiveString , MASK );
190
+ }
191
+ return (T ) s ;
192
+ } else if (v instanceof List <?> l ) {
193
+ List <Object > result = new ArrayList <>(l .size ());
194
+ for (Object vv : l ) {
195
+ vv = processSensitiveData (vv );
196
+ result .add (vv );
197
+ }
198
+ return (T ) result ;
199
+ } else if (v instanceof Map m ) {
200
+ Map <String , Object > result = new HashMap <>(m );
201
+ result .replaceAll ((k , vv ) -> processSensitiveData (vv ));
202
+ return (T ) result ;
203
+ }
204
+
205
+ return v ;
206
+ }
207
+
173
208
@ SuppressWarnings ("unchecked" )
174
209
private static Map <String , Object > ensureModifiable (Map <String , Object > m , int depth , String [] path ) {
175
210
if (depth == 0 ) {
@@ -217,7 +252,7 @@ private static Map<String, Object> convertInput(List<Object> input) {
217
252
return result ;
218
253
}
219
254
220
- private static List <Object > hideSensitiveData (List <Object > input , List <List <Annotation >> annotations ) {
255
+ private static List <Object > processSensitiveDataAnnotations (List <Object > input , List <List <Annotation >> annotations ) {
221
256
if (annotations .isEmpty ()) {
222
257
return input ;
223
258
}
0 commit comments