diff --git a/webgoat-container/src/main/java/org/owasp/webgoat/AsciiDoctorTemplateResolver.java b/webgoat-container/src/main/java/org/owasp/webgoat/AsciiDoctorTemplateResolver.java index a54baf21e..0a0148b58 100644 --- a/webgoat-container/src/main/java/org/owasp/webgoat/AsciiDoctorTemplateResolver.java +++ b/webgoat-container/src/main/java/org/owasp/webgoat/AsciiDoctorTemplateResolver.java @@ -54,11 +54,9 @@ public class AsciiDoctorTemplateResolver extends TemplateResolver { private static final Asciidoctor asciidoctor = create(); private static final String PREFIX = "doc:"; - private final File pluginTargetDirectory; private final Language language; - public AsciiDoctorTemplateResolver(File pluginTargetDirectory, Language language) { - this.pluginTargetDirectory = pluginTargetDirectory; + public AsciiDoctorTemplateResolver(Language language) { this.language = language; setResourceResolver(new AdocResourceResolver()); @@ -75,7 +73,7 @@ public class AsciiDoctorTemplateResolver extends TemplateResolver { @Override public InputStream getResourceAsStream(TemplateProcessingParameters params, String resourceName) { - InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(computeResourceName(resourceName)); + InputStream is = readInputStreamOrFallbackToEnglish(resourceName, language); try { StringWriter writer = new StringWriter(); asciidoctor.convert(new InputStreamReader(is), writer, createAttributes()); @@ -90,10 +88,17 @@ public class AsciiDoctorTemplateResolver extends TemplateResolver { * The resource name is for example HttpBasics_content1.adoc. This is always located in the following directory: * plugin/HttpBasics/lessonPlans/en/HttpBasics_content1.adoc */ - private String computeResourceName(String resourceName) { - return String.format("lessonPlans/%s/%s", language.getLocale().getLanguage(), resourceName); + private String computeResourceName(String resourceName, String language) { + return String.format("lessonPlans/%s/%s", language, resourceName); } + private InputStream readInputStreamOrFallbackToEnglish(String resourceName, Language language) { + InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(computeResourceName(resourceName, language.getLocale().getLanguage())); + if (is == null) { + is = Thread.currentThread().getContextClassLoader().getResourceAsStream(computeResourceName(resourceName, "en")); + } + return is; + } private Map createAttributes() { Map attributes = Maps.newHashMap(); diff --git a/webgoat-container/src/main/java/org/owasp/webgoat/MvcConfiguration.java b/webgoat-container/src/main/java/org/owasp/webgoat/MvcConfiguration.java index b119beaab..514492360 100644 --- a/webgoat-container/src/main/java/org/owasp/webgoat/MvcConfiguration.java +++ b/webgoat-container/src/main/java/org/owasp/webgoat/MvcConfiguration.java @@ -95,7 +95,7 @@ public class MvcConfiguration extends WebMvcConfigurerAdapter { @Bean public AsciiDoctorTemplateResolver asciiDoctorTemplateResolver(Language language) { - AsciiDoctorTemplateResolver resolver = new AsciiDoctorTemplateResolver(pluginTargetDirectory, language); + AsciiDoctorTemplateResolver resolver = new AsciiDoctorTemplateResolver(language); resolver.setCacheable(false); resolver.setOrder(3); return resolver; @@ -120,7 +120,6 @@ public class MvcConfiguration extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/plugin_lessons/**").addResourceLocations("file:///" + pluginTargetDirectory.toString() + "/"); - //registry.addResourceHandler("/images/**").addResourceLocations("classpath:/plugin/VulnerableComponents/images/"); registry.addResourceHandler("/images/**").addResourceLocations("classpath:/images/"); registry.addResourceHandler("/lesson_js/**").addResourceLocations("classpath:/js/"); registry.addResourceHandler("/lesson_css/**").addResourceLocations("classpath:/css/");