Skip to content

Commit ca63ff5

Browse files
committed
Call writeMemberFilterSensitiveLog from Union
1 parent d83f565 commit ca63ff5

File tree

3 files changed

+102
-114
lines changed

3 files changed

+102
-114
lines changed

smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/StructuredMemberWriter.java

Lines changed: 66 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import software.amazon.smithy.model.shapes.MapShape;
2626
import software.amazon.smithy.model.shapes.MemberShape;
2727
import software.amazon.smithy.model.shapes.Shape;
28+
import software.amazon.smithy.model.shapes.SimpleShape;
2829
import software.amazon.smithy.model.shapes.StructureShape;
2930
import software.amazon.smithy.model.traits.IdempotencyTokenTrait;
3031
import software.amazon.smithy.model.traits.SensitiveTrait;
@@ -89,6 +90,8 @@ void writeMemberFilterSensitiveLog(TypeScriptWriter writer, MemberShape member,
8990
if (member.getMemberTrait(model, SensitiveTrait.class).isPresent()) {
9091
// member is Sensitive, hide the value.
9192
writer.write("SENSITIVE_STRING");
93+
} else if (memberTarget instanceof SimpleShape) {
94+
writer.write(memberParam);
9295
} else if (memberTarget.isStructureShape() || memberTarget.isUnionShape()) {
9396
writeStructureFilterSensitiveLog(writer, memberTarget, memberParam);
9497
} else if (memberTarget instanceof CollectionShape) {
@@ -103,7 +106,7 @@ void writeMemberFilterSensitiveLog(TypeScriptWriter writer, MemberShape member,
103106
/**
104107
* Recursively writes filterSensitiveLog for StructureShape.
105108
*/
106-
void writeStructureFilterSensitiveLog(
109+
private void writeStructureFilterSensitiveLog(
107110
TypeScriptWriter writer,
108111
Shape structureTarget,
109112
String structureParam
@@ -123,84 +126,85 @@ void writeStructureFilterSensitiveLog(
123126
/**
124127
* Recursively writes filterSensitiveLog for CollectionShape.
125128
*/
126-
void writeCollectionFilterSensitiveLog(
129+
private void writeCollectionFilterSensitiveLog(
127130
TypeScriptWriter writer,
128131
MemberShape collectionMember,
129132
String collectionParam
130133
) {
131134
if (collectionMember.getMemberTrait(model, SensitiveTrait.class).isPresent()) {
132135
// member is Sensitive, hide the value.
133136
writer.write("SENSITIVE_STRING");
134-
return;
137+
} else if (model.expectShape(collectionMember.getTarget()) instanceof SimpleShape) {
138+
writer.write(collectionParam);
139+
} else {
140+
writer.openBlock("$L.map(", ")", collectionParam, () -> {
141+
String itemParam = "item";
142+
Shape collectionMemberTarget = model.expectShape(collectionMember.getTarget());
143+
writer.write("$L => ", itemParam);
144+
if (collectionMemberTarget.isStructureShape() || collectionMemberTarget.isUnionShape()) {
145+
writeStructureFilterSensitiveLog(writer, collectionMemberTarget, itemParam);
146+
} else if (collectionMemberTarget instanceof CollectionShape) {
147+
MemberShape nestedCollectionMember = ((CollectionShape) collectionMemberTarget).getMember();
148+
writeCollectionFilterSensitiveLog(writer, nestedCollectionMember, itemParam);
149+
} else if (collectionMemberTarget instanceof MapShape) {
150+
MemberShape mapMember = ((MapShape) collectionMemberTarget).getValue();
151+
writeMapFilterSensitiveLog(writer, mapMember, itemParam);
152+
} else {
153+
// This path should not reach because of recursive isMemberOverwriteRequired.
154+
throw new CodegenException(String.format(
155+
"CollectionFilterSensitiveLog attempted for %s while it was not required",
156+
collectionMemberTarget.getType()
157+
));
158+
// For quick-fix in case of high severity issue:
159+
// comment out the exception above and uncomment the line below.
160+
// writer.write("$L", itemParam);
161+
}
162+
});
135163
}
136-
137-
writer.openBlock("$L.map(", ")", collectionParam, () -> {
138-
String itemParam = "item";
139-
Shape collectionMemberTarget = model.expectShape(collectionMember.getTarget());
140-
writer.write("$L => ", itemParam);
141-
if (collectionMemberTarget.isStructureShape() || collectionMemberTarget.isUnionShape()) {
142-
writeStructureFilterSensitiveLog(writer, collectionMemberTarget, itemParam);
143-
} else if (collectionMemberTarget instanceof CollectionShape) {
144-
MemberShape nestedCollectionMember = ((CollectionShape) collectionMemberTarget).getMember();
145-
writeCollectionFilterSensitiveLog(writer, nestedCollectionMember, itemParam);
146-
} else if (collectionMemberTarget instanceof MapShape) {
147-
MemberShape mapMember = ((MapShape) collectionMemberTarget).getValue();
148-
writeMapFilterSensitiveLog(writer, mapMember, itemParam);
149-
} else {
150-
// This path should not reach because of recursive isMemberOverwriteRequired.
151-
throw new CodegenException(String.format(
152-
"CollectionFilterSensitiveLog attempted for %s while it was not required",
153-
collectionMemberTarget.getType()
154-
));
155-
// For quick-fix in case of high severity issue:
156-
// comment out the exception above and uncomment the line below.
157-
// writer.write("$L", itemParam);
158-
}
159-
});
160164
}
161165

162166
/**
163167
* Recursively writes filterSensitiveLog for MapShape.
164168
*/
165-
void writeMapFilterSensitiveLog(TypeScriptWriter writer, MemberShape mapMember, String mapParam) {
169+
private void writeMapFilterSensitiveLog(TypeScriptWriter writer, MemberShape mapMember, String mapParam) {
166170
if (mapMember.getMemberTrait(model, SensitiveTrait.class).isPresent()) {
167171
// member is Sensitive, hide the value.
168172
writer.write("SENSITIVE_STRING");
169-
return;
170-
}
171-
172-
String accParam = "acc"; // accumulator for the reducer
173-
String keyParam = "key"; // key of the Object.entries() key-value pair
174-
String valueParam = "value"; // value of the Object.entries() key-value pair
175-
176-
// Reducer is common to all shapes.
177-
writer.openBlock("Object.entries($L).reduce(($L: any, [$L, $L]: [string, $T]) => ({", "}), {})",
178-
mapParam, accParam, keyParam, valueParam, symbolProvider.toSymbol(mapMember), () -> {
179-
writer.write("...$L,", accParam);
180-
Shape mapMemberTarget = model.expectShape(mapMember.getTarget());
181-
writer.openBlock("[$L]: ", ",", keyParam, () -> {
182-
if (mapMemberTarget.isStructureShape() || mapMemberTarget.isUnionShape()) {
183-
writeStructureFilterSensitiveLog(writer, mapMemberTarget, valueParam);
184-
} else if (mapMemberTarget instanceof CollectionShape) {
185-
MemberShape collectionMember = ((CollectionShape) mapMemberTarget).getMember();
186-
writeCollectionFilterSensitiveLog(writer, collectionMember, valueParam);
187-
} else if (mapMemberTarget instanceof MapShape) {
188-
MemberShape nestedMapMember = ((MapShape) mapMemberTarget).getValue();
189-
writeMapFilterSensitiveLog(writer, nestedMapMember, valueParam);
190-
} else {
191-
// This path should not reach because of recursive isMemberOverwriteRequired.
192-
throw new CodegenException(String.format(
193-
"MapFilterSensitiveLog attempted for %s while it was not required",
194-
mapMemberTarget.getType()
195-
));
196-
// For quick-fix in case of high severity issue:
197-
// comment out the exception above and uncomment the line below.
198-
// writer.write("$L", valueParam);
199-
}
173+
} else if (model.expectShape(mapMember.getTarget()) instanceof SimpleShape) {
174+
writer.write(mapParam);
175+
} else {
176+
String accParam = "acc"; // accumulator for the reducer
177+
String keyParam = "key"; // key of the Object.entries() key-value pair
178+
String valueParam = "value"; // value of the Object.entries() key-value pair
200179

201-
});
202-
}
203-
);
180+
// Reducer is common to all shapes.
181+
writer.openBlock("Object.entries($L).reduce(($L: any, [$L, $L]: [string, $T]) => ({", "}), {})",
182+
mapParam, accParam, keyParam, valueParam, symbolProvider.toSymbol(mapMember), () -> {
183+
writer.write("...$L,", accParam);
184+
Shape mapMemberTarget = model.expectShape(mapMember.getTarget());
185+
writer.openBlock("[$L]: ", ",", keyParam, () -> {
186+
if (mapMemberTarget.isStructureShape() || mapMemberTarget.isUnionShape()) {
187+
writeStructureFilterSensitiveLog(writer, mapMemberTarget, valueParam);
188+
} else if (mapMemberTarget instanceof CollectionShape) {
189+
MemberShape collectionMember = ((CollectionShape) mapMemberTarget).getMember();
190+
writeCollectionFilterSensitiveLog(writer, collectionMember, valueParam);
191+
} else if (mapMemberTarget instanceof MapShape) {
192+
MemberShape nestedMapMember = ((MapShape) mapMemberTarget).getValue();
193+
writeMapFilterSensitiveLog(writer, nestedMapMember, valueParam);
194+
} else {
195+
// This path should not reach because of recursive isMemberOverwriteRequired.
196+
throw new CodegenException(String.format(
197+
"MapFilterSensitiveLog attempted for %s while it was not required",
198+
mapMemberTarget.getType()
199+
));
200+
// For quick-fix in case of high severity issue:
201+
// comment out the exception above and uncomment the line below.
202+
// writer.write("$L", valueParam);
203+
}
204+
});
205+
}
206+
);
207+
}
204208
}
205209

206210
/**

smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/UnionGenerator.java

Lines changed: 6 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,8 @@
2020
import software.amazon.smithy.codegen.core.Symbol;
2121
import software.amazon.smithy.codegen.core.SymbolProvider;
2222
import software.amazon.smithy.model.Model;
23-
import software.amazon.smithy.model.shapes.CollectionShape;
24-
import software.amazon.smithy.model.shapes.MapShape;
2523
import software.amazon.smithy.model.shapes.MemberShape;
26-
import software.amazon.smithy.model.shapes.Shape;
27-
import software.amazon.smithy.model.shapes.SimpleShape;
2824
import software.amazon.smithy.model.shapes.UnionShape;
29-
import software.amazon.smithy.model.traits.SensitiveTrait;
3025
import software.amazon.smithy.utils.StringUtils;
3126

3227
/**
@@ -232,42 +227,15 @@ private void writeFilterSensitiveLog() {
232227
objectParam, symbol.getName(),
233228
() -> {
234229
for (MemberShape member : shape.getAllMembers().values()) {
235-
Shape memberTarget = model.expectShape(member.getTarget());
236230
String memberName = symbolProvider.toMemberName(member);
237-
238-
if (member.getMemberTrait(model, SensitiveTrait.class).isPresent()) {
239-
// member is Sensitive, hide the value.
240-
writer.write("if (${1L}.${2L} !== undefined) return {[${2L}]: SENSITIVE_STRING};",
241-
objectParam, memberName);
242-
} else if (memberTarget instanceof SimpleShape) {
243-
writer.write("if (${1L}.${2L} !== undefined) return {${2L}: ${1L}.${2L}};",
244-
objectParam, memberName);
245-
} else {
246-
StructuredMemberWriter structuredMemberWriter = new StructuredMemberWriter(
231+
StructuredMemberWriter structuredMemberWriter = new StructuredMemberWriter(
247232
model, symbolProvider, shape.getAllMembers().values());
248-
String memberParam = String.format("%s.%s", objectParam, memberName);
249-
250-
writer.write("if (${1L}.${2L} !== undefined) return {${2L}: ", objectParam, memberName);
251-
if (memberTarget.isStructureShape() || memberTarget.isUnionShape()) {
252-
structuredMemberWriter.writeStructureFilterSensitiveLog(writer, memberTarget, memberParam);
253-
} else if (memberTarget instanceof CollectionShape) {
254-
MemberShape collectionMember = ((CollectionShape) memberTarget).getMember();
255-
if (model.expectShape(collectionMember.getTarget()) instanceof SimpleShape) {
256-
writer.write(memberParam);
257-
} else {
258-
structuredMemberWriter.writeCollectionFilterSensitiveLog(
259-
writer, collectionMember, memberParam);
260-
}
261-
} else if (memberTarget instanceof MapShape) {
262-
MemberShape mapMember = ((MapShape) memberTarget).getValue();
263-
if (model.expectShape(mapMember.getTarget()) instanceof SimpleShape) {
264-
writer.write(memberParam);
265-
} else {
266-
structuredMemberWriter.writeMapFilterSensitiveLog(writer, mapMember, memberParam);
267-
}
233+
writer.openBlock("if (${1L}.${2L} !== undefined) return {${2L}: ", "};",
234+
objectParam, memberName, () -> {
235+
String memberParam = String.format("%s.%s", objectParam, memberName);
236+
structuredMemberWriter.writeMemberFilterSensitiveLog(writer, member, memberParam);
268237
}
269-
writer.write("};");
270-
}
238+
);
271239
}
272240
writer.write("if (${1L}.$$unknown !== undefined) return {[${1L}.$$unknown[0]]: 'UNKNOWN'};",
273241
objectParam);

0 commit comments

Comments
 (0)