isReadable works inside a container, isFile not (#1334)

This commit is contained in:
René Zubcevic 2022-09-12 09:02:07 +02:00 committed by GitHub
parent f5e4d4717a
commit 34f5b79249
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 5 deletions

View File

@ -83,7 +83,7 @@ public class AsciiDoctorTemplateResolver extends FileTemplateResolver {
@Override
protected ITemplateResource computeTemplateResource(IEngineConfiguration configuration, String ownerTemplate, String template, String resourceName, String characterEncoding, Map<String, Object> 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<String, Object> 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";
}
}

View File

@ -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);