From 34f5b79249c222dd42419e6504dd5397a42ae3b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Zubcevic?= Date: Mon, 12 Sep 2022 09:02:07 +0200 Subject: [PATCH] isReadable works inside a container, isFile not (#1334) --- .../AsciiDoctorTemplateResolver.java | 21 ++++++++++++++----- .../webgoat/container/MvcConfiguration.java | 3 +++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/owasp/webgoat/container/AsciiDoctorTemplateResolver.java b/src/main/java/org/owasp/webgoat/container/AsciiDoctorTemplateResolver.java index ebcc83fbe..fddf3e053 100644 --- a/src/main/java/org/owasp/webgoat/container/AsciiDoctorTemplateResolver.java +++ b/src/main/java/org/owasp/webgoat/container/AsciiDoctorTemplateResolver.java @@ -83,7 +83,7 @@ public class AsciiDoctorTemplateResolver extends FileTemplateResolver { @Override protected ITemplateResource computeTemplateResource(IEngineConfiguration configuration, String ownerTemplate, String template, String resourceName, String characterEncoding, Map templateResolutionAttributes) { var templateName = resourceName.substring(PREFIX.length()); - + log.debug("template used: {}", templateName); try (InputStream is = getInputStream(templateName)) { JavaExtensionRegistry extensionRegistry = asciidoctor.javaExtensionRegistry(); extensionRegistry.inlineMacro("webWolfLink", WebWolfMacro.class); @@ -102,18 +102,26 @@ public class AsciiDoctorTemplateResolver extends FileTemplateResolver { } private InputStream getInputStream(String templateName) throws IOException { - if (resourceLoader.getResource("classpath:/" + computeResourceName(templateName, language.getLocale().getLanguage())).isFile()) { - return resourceLoader.getResource("classpath:/" + computeResourceName(templateName, language.getLocale().getLanguage())).getInputStream(); + log.debug("locale: {}",language.getLocale().getLanguage()); + String computedResourceName = computeResourceName(templateName, language.getLocale().getLanguage()); + if (resourceLoader.getResource("classpath:/" + computedResourceName).isReadable()/*isFile()*/) { + log.debug("localized file exists"); + return resourceLoader.getResource("classpath:/" + computedResourceName).getInputStream(); } else { + log.debug("using english template"); return resourceLoader.getResource("classpath:/" + templateName).getInputStream(); } } private String computeResourceName(String resourceName, String language) { + String computedResourceName; if (language.equals("en")) { - return resourceName; + computedResourceName = resourceName; } else { - return resourceName.replace(".adoc", "_".concat(language).concat(".adoc")); + computedResourceName = resourceName.replace(".adoc", "_".concat(language).concat(".adoc")); } + log.debug("computed local file name: {}", computedResourceName); + log.debug("file exists: {}",resourceLoader.getResource("classpath:/"+computedResourceName).isReadable()); + return computedResourceName; } private Map createAttributes() { @@ -134,12 +142,15 @@ public class AsciiDoctorTemplateResolver extends FileTemplateResolver { Locale browserLocale = (Locale) request.getSession().getAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME); if (null != browserLocale) { + log.debug("browser locale {}", browserLocale); return browserLocale.getLanguage(); } else { String langHeader = request.getHeader(Headers.ACCEPT_LANGUAGE_STRING); if (null != langHeader) { + log.debug("browser locale {}", langHeader); return langHeader.substring(0,2); } else { + log.debug("browser default english"); return "en"; } } diff --git a/src/main/java/org/owasp/webgoat/container/MvcConfiguration.java b/src/main/java/org/owasp/webgoat/container/MvcConfiguration.java index 69641a8e4..ad0851aa9 100644 --- a/src/main/java/org/owasp/webgoat/container/MvcConfiguration.java +++ b/src/main/java/org/owasp/webgoat/container/MvcConfiguration.java @@ -32,6 +32,7 @@ package org.owasp.webgoat.container; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.owasp.webgoat.container.i18n.Language; import org.owasp.webgoat.container.i18n.Messages; import org.owasp.webgoat.container.i18n.PluginMessages; @@ -71,6 +72,7 @@ import java.util.Set; */ @Configuration @RequiredArgsConstructor +@Slf4j public class MvcConfiguration implements WebMvcConfigurer { private static final String UTF8 = "UTF-8"; @@ -146,6 +148,7 @@ public class MvcConfiguration implements WebMvcConfigurer { */ @Bean public AsciiDoctorTemplateResolver asciiDoctorTemplateResolver(Language language, ResourceLoader resourceLoader) { + log.debug("template locale {}", language); AsciiDoctorTemplateResolver resolver = new AsciiDoctorTemplateResolver(language, resourceLoader); resolver.setCacheable(false); resolver.setOrder(1);