diff --git a/src/main/java/org/owasp/wrongsecrets/definitions/ChallengeConfig.java b/src/main/java/org/owasp/wrongsecrets/definitions/ChallengeConfig.java index abfba3592..7bea23905 100644 --- a/src/main/java/org/owasp/wrongsecrets/definitions/ChallengeConfig.java +++ b/src/main/java/org/owasp/wrongsecrets/definitions/ChallengeConfig.java @@ -2,6 +2,8 @@ import java.io.IOException; import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import java.util.function.Supplier; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FilenameUtils; @@ -40,12 +42,18 @@ public StringToChallengeNameConverter nameConverter() { return new StringToChallengeNameConverter(); } - private record TextWithFileLocationConverter(TemplateGenerator templateGenerator) + private static final class TextWithFileLocationConverter implements Converter { + private final TemplateGenerator templateGenerator; + private final Map> cache = new ConcurrentHashMap<>(); + + public TextWithFileLocationConverter(TemplateGenerator templateGenerator) { + this.templateGenerator = templateGenerator; + } @Override public TextWithFileLocation convert(String source) { - return new TextWithFileLocation(source, read(source)); + return new TextWithFileLocation(source, cache.computeIfAbsent(source, this::read)); } private Supplier read(String name) { @@ -78,7 +86,7 @@ public Challenges challenges( .filter(challenge -> challenge instanceof Challenge8) .findFirst() .get() - .spoiler(); // need early init to log the secret for debugging ;-). + .spoiler(); return new Challenges(challengeDefinitions, challenges); } }