diff --git a/pom.xml b/pom.xml index bc4ba3b32..7a2ef1489 100644 --- a/pom.xml +++ b/pom.xml @@ -62,7 +62,7 @@ - 2.5.13 + 3.0.0 5.3.3 3.3.0 diff --git a/src/main/java/org/owasp/webgoat/container/AsciiDoctorTemplateResolver.java b/src/main/java/org/owasp/webgoat/container/AsciiDoctorTemplateResolver.java index 9f5ad6d4a..3f81798c1 100644 --- a/src/main/java/org/owasp/webgoat/container/AsciiDoctorTemplateResolver.java +++ b/src/main/java/org/owasp/webgoat/container/AsciiDoctorTemplateResolver.java @@ -37,12 +37,13 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.StringWriter; -import java.util.HashMap; import java.util.Locale; import java.util.Map; import java.util.Set; import lombok.extern.slf4j.Slf4j; import org.asciidoctor.Asciidoctor; +import org.asciidoctor.Attributes; +import org.asciidoctor.Options; import org.asciidoctor.extension.JavaExtensionRegistry; import org.owasp.webgoat.container.asciidoc.*; import org.owasp.webgoat.container.i18n.Language; @@ -135,17 +136,17 @@ public class AsciiDoctorTemplateResolver extends FileTemplateResolver { return computedResourceName; } - private Map createAttributes() { - Map attributes = new HashMap<>(); - attributes.put("source-highlighter", "coderay"); - attributes.put("backend", "xhtml"); - attributes.put("lang", determineLanguage()); - attributes.put("icons", org.asciidoctor.Attributes.FONT_ICONS); + private Options createAttributes() { - Map options = new HashMap<>(); - options.put("attributes", attributes); - - return options; + return Options.builder() + .attributes( + Attributes.builder() + .attribute("source-highlighter", "coderay") + .attribute("backend", "xhtml") + .attribute("lang", determineLanguage()) + .attribute("icons", org.asciidoctor.Attributes.FONT_ICONS) + .build()) + .build(); } private String determineLanguage() { diff --git a/src/main/java/org/owasp/webgoat/container/asciidoc/OperatingSystemMacro.java b/src/main/java/org/owasp/webgoat/container/asciidoc/OperatingSystemMacro.java index 87a60a879..383f1797c 100644 --- a/src/main/java/org/owasp/webgoat/container/asciidoc/OperatingSystemMacro.java +++ b/src/main/java/org/owasp/webgoat/container/asciidoc/OperatingSystemMacro.java @@ -1,7 +1,8 @@ package org.owasp.webgoat.container.asciidoc; import java.util.Map; -import org.asciidoctor.ast.ContentNode; +import org.asciidoctor.ast.PhraseNode; +import org.asciidoctor.ast.StructuralNode; import org.asciidoctor.extension.InlineMacroProcessor; public class OperatingSystemMacro extends InlineMacroProcessor { @@ -15,7 +16,8 @@ public class OperatingSystemMacro extends InlineMacroProcessor { } @Override - public Object process(ContentNode contentNode, String target, Map attributes) { + public PhraseNode process( + StructuralNode contentNode, String target, Map attributes) { var osName = System.getProperty("os.name"); // see diff --git a/src/main/java/org/owasp/webgoat/container/asciidoc/UsernameMacro.java b/src/main/java/org/owasp/webgoat/container/asciidoc/UsernameMacro.java index 7275ba9b1..fc4d2b9ec 100644 --- a/src/main/java/org/owasp/webgoat/container/asciidoc/UsernameMacro.java +++ b/src/main/java/org/owasp/webgoat/container/asciidoc/UsernameMacro.java @@ -1,7 +1,8 @@ package org.owasp.webgoat.container.asciidoc; import java.util.Map; -import org.asciidoctor.ast.ContentNode; +import org.asciidoctor.ast.PhraseNode; +import org.asciidoctor.ast.StructuralNode; import org.asciidoctor.extension.InlineMacroProcessor; import org.owasp.webgoat.container.users.WebGoatUser; import org.springframework.security.core.context.SecurityContextHolder; @@ -17,7 +18,8 @@ public class UsernameMacro extends InlineMacroProcessor { } @Override - public Object process(ContentNode contentNode, String target, Map attributes) { + public PhraseNode process( + StructuralNode contentNode, String target, Map attributes) { var auth = SecurityContextHolder.getContext().getAuthentication(); var username = "unknown"; if (auth.getPrincipal() instanceof WebGoatUser webGoatUser) { diff --git a/src/main/java/org/owasp/webgoat/container/asciidoc/WebGoatTmpDirMacro.java b/src/main/java/org/owasp/webgoat/container/asciidoc/WebGoatTmpDirMacro.java index 12c283f9a..5e65e0a13 100644 --- a/src/main/java/org/owasp/webgoat/container/asciidoc/WebGoatTmpDirMacro.java +++ b/src/main/java/org/owasp/webgoat/container/asciidoc/WebGoatTmpDirMacro.java @@ -1,7 +1,8 @@ package org.owasp.webgoat.container.asciidoc; import java.util.Map; -import org.asciidoctor.ast.ContentNode; +import org.asciidoctor.ast.PhraseNode; +import org.asciidoctor.ast.StructuralNode; import org.asciidoctor.extension.InlineMacroProcessor; public class WebGoatTmpDirMacro extends InlineMacroProcessor { @@ -15,11 +16,12 @@ public class WebGoatTmpDirMacro extends InlineMacroProcessor { } @Override - public Object process(ContentNode contentNode, String target, Map attributes) { + public PhraseNode process( + StructuralNode structuralNode, String target, Map attributes) { var env = EnvironmentExposure.getEnv().getProperty("webgoat.server.directory"); // see // https://discuss.asciidoctor.org/How-to-create-inline-macro-producing-HTML-In-AsciidoctorJ-td8313.html for why quoted is used - return createPhraseNode(contentNode, "quoted", env); + return createPhraseNode(structuralNode, "quoted", env); } } diff --git a/src/main/java/org/owasp/webgoat/container/asciidoc/WebGoatVersionMacro.java b/src/main/java/org/owasp/webgoat/container/asciidoc/WebGoatVersionMacro.java index 09658e8b2..539a0fffa 100644 --- a/src/main/java/org/owasp/webgoat/container/asciidoc/WebGoatVersionMacro.java +++ b/src/main/java/org/owasp/webgoat/container/asciidoc/WebGoatVersionMacro.java @@ -1,7 +1,8 @@ package org.owasp.webgoat.container.asciidoc; import java.util.Map; -import org.asciidoctor.ast.ContentNode; +import org.asciidoctor.ast.PhraseNode; +import org.asciidoctor.ast.StructuralNode; import org.asciidoctor.extension.InlineMacroProcessor; public class WebGoatVersionMacro extends InlineMacroProcessor { @@ -15,7 +16,8 @@ public class WebGoatVersionMacro extends InlineMacroProcessor { } @Override - public Object process(ContentNode contentNode, String target, Map attributes) { + public PhraseNode process( + StructuralNode contentNode, String target, Map attributes) { var webgoatVersion = EnvironmentExposure.getEnv().getProperty("webgoat.build.version"); // see diff --git a/src/main/java/org/owasp/webgoat/container/asciidoc/WebWolfMacro.java b/src/main/java/org/owasp/webgoat/container/asciidoc/WebWolfMacro.java index 119fd9269..2baa76a55 100644 --- a/src/main/java/org/owasp/webgoat/container/asciidoc/WebWolfMacro.java +++ b/src/main/java/org/owasp/webgoat/container/asciidoc/WebWolfMacro.java @@ -2,7 +2,8 @@ package org.owasp.webgoat.container.asciidoc; import java.util.HashMap; import java.util.Map; -import org.asciidoctor.ast.ContentNode; +import org.asciidoctor.ast.PhraseNode; +import org.asciidoctor.ast.StructuralNode; import org.asciidoctor.extension.InlineMacroProcessor; /** @@ -21,7 +22,8 @@ public class WebWolfMacro extends InlineMacroProcessor { } @Override - public Object process(ContentNode contentNode, String linkText, Map attributes) { + public PhraseNode process( + StructuralNode contentNode, String linkText, Map attributes) { var env = EnvironmentExposure.getEnv(); var hostname = env.getProperty("webwolf.url"); var target = (String) attributes.getOrDefault("target", "home"); @@ -36,7 +38,7 @@ public class WebWolfMacro extends InlineMacroProcessor { options.put("type", ":link"); options.put("target", href); attributes.put("window", "_blank"); - return createPhraseNode(contentNode, "anchor", linkText, attributes, options).convert(); + return createPhraseNode(contentNode, "anchor", linkText, attributes, options); } private boolean displayCompleteLinkNoFormatting(Map attributes) { diff --git a/src/test/java/org/owasp/webgoat/container/service/HintServiceTest.java b/src/test/java/org/owasp/webgoat/container/service/HintServiceTest.java index e7f0d1c7b..a803e8427 100644 --- a/src/test/java/org/owasp/webgoat/container/service/HintServiceTest.java +++ b/src/test/java/org/owasp/webgoat/container/service/HintServiceTest.java @@ -5,7 +5,6 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import static org.springframework.test.web.servlet.setup.MockMvcBuilders.standaloneSetup; -import com.beust.jcommander.internal.Lists; import java.util.List; import org.hamcrest.CoreMatchers; import org.junit.jupiter.api.BeforeEach; @@ -28,7 +27,7 @@ public class HintServiceTest { void setup() { Lesson lesson = new HttpBasics(); lesson.addAssignment( - new Assignment("test", "/HttpBasics/attack1", Lists.newArrayList("hint 1", "hint 2"))); + new Assignment("test", "/HttpBasics/attack1", List.of("hint 1", "hint 2"))); Course course = new Course(List.of(lesson)); this.mockMvc = standaloneSetup(new HintService(course)).build(); } diff --git a/src/test/java/org/owasp/webgoat/container/service/LessonMenuServiceTest.java b/src/test/java/org/owasp/webgoat/container/service/LessonMenuServiceTest.java index 9c77f6d58..c0f63d78c 100644 --- a/src/test/java/org/owasp/webgoat/container/service/LessonMenuServiceTest.java +++ b/src/test/java/org/owasp/webgoat/container/service/LessonMenuServiceTest.java @@ -29,8 +29,8 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import static org.springframework.test.web.servlet.setup.MockMvcBuilders.standaloneSetup; -import com.beust.jcommander.internal.Lists; import java.util.Arrays; +import java.util.List; import org.hamcrest.CoreMatchers; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -74,8 +74,8 @@ public class LessonMenuServiceTest { when(l1.getTitle()).thenReturn("ZA"); when(l2.getTitle()).thenReturn("AA"); when(lessonTracker.isLessonSolved()).thenReturn(false); - when(course.getLessons(any())).thenReturn(Lists.newArrayList(l1, l2)); - when(course.getCategories()).thenReturn(Lists.newArrayList(Category.A1)); + when(course.getLessons(any())).thenReturn(List.of(l1, l2)); + when(course.getCategories()).thenReturn(List.of(Category.A1)); when(userTracker.getLessonProgress(any(Lesson.class))).thenReturn(lessonTracker); when(userTrackerRepository.findByUser(any())).thenReturn(userTracker); @@ -91,8 +91,8 @@ public class LessonMenuServiceTest { Lesson l1 = Mockito.mock(Lesson.class); when(l1.getTitle()).thenReturn("ZA"); when(lessonTracker.isLessonSolved()).thenReturn(true); - when(course.getLessons(any())).thenReturn(Lists.newArrayList(l1)); - when(course.getCategories()).thenReturn(Lists.newArrayList(Category.A1)); + when(course.getLessons(any())).thenReturn(List.of(l1)); + when(course.getCategories()).thenReturn(List.of(Category.A1)); when(userTracker.getLessonProgress(any(Lesson.class))).thenReturn(lessonTracker); when(userTrackerRepository.findByUser(any())).thenReturn(userTracker);