From d5024b773971b7a153ca954b500a455f9d423386 Mon Sep 17 00:00:00 2001 From: lawson89 Date: Thu, 10 Jul 2014 21:23:16 -0400 Subject: [PATCH] add lesson menu item service for building left nav --- .../webgoat/service/LessonMenuService.java | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 java/org/owasp/webgoat/service/LessonMenuService.java diff --git a/java/org/owasp/webgoat/service/LessonMenuService.java b/java/org/owasp/webgoat/service/LessonMenuService.java new file mode 100644 index 000000000..79fa6c33e --- /dev/null +++ b/java/org/owasp/webgoat/service/LessonMenuService.java @@ -0,0 +1,87 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.owasp.webgoat.service; + +import java.util.ArrayList; +import java.util.List; +import javax.servlet.http.HttpSession; +import org.owasp.webgoat.lessons.AbstractLesson; +import org.owasp.webgoat.lessons.Category; +import org.owasp.webgoat.lessons.RandomLessonAdapter; +import org.owasp.webgoat.lessons.model.LessonMenuItem; +import org.owasp.webgoat.lessons.model.LessonMenuItemType; +import org.owasp.webgoat.session.Course; +import org.owasp.webgoat.session.WebSession; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +/** + * + * @author rlawson + */ +@Controller +public class LessonMenuService extends BaseService { + + /** + * Returns the lesson menu which is used to build the left nav + * + * @param session + * @return + */ + @RequestMapping(value = "/lessonmenu.do", produces = "application/json") + public @ResponseBody + List showLeftNav(HttpSession session) { + //TODO - need Links, rank, title + List menu = new ArrayList(); + WebSession ws; + Object o = session.getAttribute(WebSession.SESSION); + if (o == null || !(o instanceof WebSession)) { + return null; + } + ws = (WebSession) o; + AbstractLesson l = ws.getCurrentLesson(); + // Get the categories, these are the main menu items + Course course = ((Course) session.getAttribute("course")); + List categories = course.getCategories(); + + for (Category category : categories) { + LessonMenuItem categoryItem = new LessonMenuItem(); + categoryItem.setName(category.getName()); + categoryItem.setType(LessonMenuItemType.CATEGORY); + // check for any lessons for this category + List lessons = ws.getLessons(category); + for (AbstractLesson lesson : lessons) { + LessonMenuItem lessonItem = new LessonMenuItem(); + lessonItem.setName(lesson.getName()); + lessonItem.setType(LessonMenuItemType.LESSON); + if (lesson.isCompleted(ws)) { + lessonItem.setComplete(true); + } + categoryItem.addChild(lessonItem); + // Does the lesson have stages + if (lesson instanceof RandomLessonAdapter) { + RandomLessonAdapter rla = (RandomLessonAdapter) lesson; + String[] stages = rla.getStages(); + if (stages != null) { + for (String stage : stages) { + LessonMenuItem stageItem = new LessonMenuItem(); + stageItem.setName(stage); + stageItem.setType(LessonMenuItemType.STAGE); + if (rla.isStageComplete(ws, stage)) { + stageItem.setComplete(true); + } + lessonItem.addChild(stageItem); + } + } + } + } + menu.add(categoryItem); + } + return menu; + + } +}