Merge remote-tracking branch 'upstream/webgoat-container' into webgoat-container

Conflicts:
	src/main/java/org/owasp/webgoat/session/Course.java
This commit is contained in:
nbaars 2015-02-23 20:33:22 +01:00
commit 6e25026391
3 changed files with 606 additions and 332 deletions

View File

@ -48,7 +48,9 @@
<artifactId>maven-war-plugin</artifactId> <artifactId>maven-war-plugin</artifactId>
<configuration> <configuration>
<archiveClasses>true</archiveClasses> <!-- archiving the classes breaks the admin screen loads in course.java
the legacy lesson loader does not look in jar files for lessons -->
<archiveClasses>false</archiveClasses>
<manifest> <manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries> <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest> </manifest>

View File

@ -0,0 +1,259 @@
package org.owasp.webgoat.plugins;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import javax.servlet.ServletContext;
import org.owasp.webgoat.HammerHead;
import org.owasp.webgoat.lessons.AbstractLesson;
import org.owasp.webgoat.session.WebgoatContext;
import org.owasp.webgoat.session.WebgoatProperties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* *************************************************************************************************
* <p/>
* <p/>
* This file is part of WebGoat, an Open Web Application Security Project
* utility. For details, please see http://www.owasp.org/
* <p/>
* Copyright (c) 2002 - 20014 Bruce Mayhew
* <p/>
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at your option) any later
* version.
* <p/>
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
* <p/>
* You should have received a copy of the GNU General Public License along with
* this program; if not, write to the Free Software Foundation, Inc., 59 Temple
* Place - Suite 330, Boston, MA 02111-1307, USA.
* <p/>
* Getting Source ==============
* <p/>
* Source for this application is maintained at https://github.com/WebGoat/WebGoat, a repository
* for free software projects.
* <p/>
* For details, please see http://webgoat.github.io
*
* @author Bruce Mayhew <a href="http://code.google.com/p/webgoat">WebGoat</a>
* @created October 28, 2003
*/
public class LegacyLoader {
final Logger logger = LoggerFactory.getLogger(LegacyLoader.class);
private final List<String> files = new LinkedList<String>();
public LegacyLoader() {
}
/**
* Take an absolute file and return the filename.
* <p/>
* Ex. /etc/password becomes password
*
* @param s
* @return the file name
*/
private static String getFileName(String s) {
String fileName = new File(s).getName();
if (fileName.contains("/")) {
fileName = fileName.substring(fileName.lastIndexOf("/"), fileName.length());
}
if (fileName.contains(".")) {
fileName = fileName.substring(0, fileName.indexOf("."));
}
return fileName;
}
/**
* Take a class name and return the equivalent file name
* <p/>
* Ex. org.owasp.webgoat becomes org/owasp/webgoat.java
*
* @param className
* @return
*/
private static String getSourceFile(String className) {
StringBuilder sb = new StringBuilder();
sb.append(className.replace(".", "/"));
sb.append(".java");
return sb.toString();
}
/**
* Takes a file name and builds the class file name
*
* @param fileName Description of the Parameter
* @param path Description of the Parameter
* @return Description of the Return Value
*/
private static String getClassFile(String fileName, String path) {
String ext = ".class";
fileName = fileName.trim();
/**
* We do not handle directories. We do not handle files with different
* extensions
*/
if (fileName.endsWith("/") || !fileName.endsWith(ext)) {
return null;
}
// skip over plugins and/or extracted plugins
if ( fileName.indexOf("lessons/plugin") >= 0 || fileName.indexOf("plugin_extracted") >= 0) {
return null;
}
// if the file is in /WEB-INF/classes strip the dir info off
int index = fileName.indexOf("/WEB-INF/classes/");
if (index != -1) {
fileName = fileName.substring(index + "/WEB-INF/classes/".length(), fileName.length() - ext.length());
fileName = fileName.replace('/', '.');
fileName = fileName.replace('\\', '.');
} else {
// Strip off the leading path info
fileName = fileName.substring(path.length(), fileName.length() - ext.length());
}
return fileName;
}
/**
* Load all of the filenames into a temporary cache
*
* @param context
* @param path
*/
public void loadFiles(ServletContext context, String path) {
logger.debug("Loading files into cache, path: " + path);
Set resourcePaths = context.getResourcePaths(path);
if (resourcePaths == null) {
logger.error("Unable to load file cache for courses, this is probably a bug or configuration issue");
return;
}
Iterator itr = resourcePaths.iterator();
while (itr.hasNext()) {
String file = (String) itr.next();
if (file.length() != 1 && file.endsWith("/")) {
loadFiles(context, file);
} else {
files.add(file);
}
}
}
/**
* Instantiate all the lesson objects into a cache
*
* @param path
* @param context
*/
public List<AbstractLesson> loadLessons(WebgoatContext webgoatContext, ServletContext context, String path, WebgoatProperties properties ) {
loadFiles(context, path);
List<AbstractLesson> lessons = new LinkedList<AbstractLesson>();
for (String file : files) {
String className = getClassFile(file, path);
if (className != null && !className.endsWith("_i")) {
try {
Class c = Class.forName(className);
Object o = c.newInstance();
if (o instanceof AbstractLesson) {
AbstractLesson lesson = (AbstractLesson) o;
lesson.setWebgoatContext(webgoatContext);
lesson.update(properties);
if (lesson.getHidden() == false) {
lessons.add(lesson);
}
}
} catch (Exception e) {
// Bruce says:
// I don't think we want to log the exception here. We could
// be potentially showing a lot of exceptions that don't matter.
// We would only care if the lesson extended AbstractLesson and we
// can't tell that because it threw the exception. Catch 22
// logger.error("Error in loadLessons: ", e);
}
}
}
loadResources(lessons);
return lessons;
}
private String getLanguageFromFileName(String first, String absoluteFile) {
int p1 = absoluteFile.indexOf("/", absoluteFile.indexOf(first) + 1);
int p2 = absoluteFile.indexOf("/", p1 + 1);
String langStr = absoluteFile.substring(p1 + 1, p2);
return langStr;
}
/**
* For each lesson, set the source file and lesson file
* @param lessons
*/
public void loadResources(List<AbstractLesson> lessons ) {
for (AbstractLesson lesson : lessons) {
logger.info("Loading resources for lesson -> " + lesson.getName());
String className = lesson.getClass().getName();
String classFile = getSourceFile(className);
logger.info("Lesson classname: " + className);
logger.info("Lesson java file: " + classFile);
for (String absoluteFile : files) {
String fileName = getFileName(absoluteFile);
//logger.debug("Course: looking at file: " + absoluteFile);
if (absoluteFile.endsWith(classFile)) {
logger.info("Set source file for " + classFile);
lesson.setSourceFileName(absoluteFile);
}
if (absoluteFile.startsWith("/lesson_plans") && absoluteFile.endsWith(".html")
&& className.endsWith(fileName)) {
logger.info("setting lesson plan file " + absoluteFile + " for lesson "
+ lesson.getClass().getName());
logger.info("fileName: " + fileName + " == className: " + className);
String language = getLanguageFromFileName("/lesson_plans", absoluteFile);
lesson.setLessonPlanFileName(language, absoluteFile);
}
if (absoluteFile.startsWith("/lesson_solutions") && absoluteFile.endsWith(".html")
&& className.endsWith(fileName)) {
logger.info("setting lesson solution file " + absoluteFile + " for lesson "
+ lesson.getClass().getName());
logger.info("fileName: " + fileName + " == className: " + className);
lesson.setLessonSolutionFileName(absoluteFile);
}
}
}
}
}

View File

@ -1,331 +1,344 @@
package org.owasp.webgoat.session; package org.owasp.webgoat.session;
import org.owasp.webgoat.HammerHead; import org.owasp.webgoat.HammerHead;
import org.owasp.webgoat.lessons.AbstractLesson; import org.owasp.webgoat.lessons.AbstractLesson;
import org.owasp.webgoat.lessons.Category; import org.owasp.webgoat.lessons.Category;
import org.owasp.webgoat.plugins.GlobalProperties; import org.owasp.webgoat.plugins.GlobalProperties;
import org.owasp.webgoat.plugins.Plugin; import org.owasp.webgoat.plugins.Plugin;
import org.owasp.webgoat.plugins.PluginsLoader; import org.owasp.webgoat.plugins.PluginsLoader;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import javax.servlet.ServletContext; import javax.servlet.ServletContext;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map
import javax.servlet.ServletContext;
/**
* ************************************************************************************************* import org.owasp.webgoat.HammerHead;
* <p/> import org.owasp.webgoat.lessons.AbstractLesson;
* <p/> import org.owasp.webgoat.lessons.Category;
* This file is part of WebGoat, an Open Web Application Security Project import org.owasp.webgoat.plugins.GlobalProperties;
* utility. For details, please see http://www.owasp.org/ import org.owasp.webgoat.plugins.LegacyLoader;
* <p/> import org.owasp.webgoat.plugins.Plugin;
* Copyright (c) 2002 - 20014 Bruce Mayhew import org.owasp.webgoat.plugins.PluginsLoader;
* <p/> import org.slf4j.Logger;
* This program is free software; you can redistribute it and/or modify it under import org.slf4j.LoggerFactory;
* the terms of the GNU General Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at your option) any later /**
* version. * *************************************************************************************************
* <p/> * <p/>
* This program is distributed in the hope that it will be useful, but WITHOUT * <p/>
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * This file is part of WebGoat, an Open Web Application Security Project
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * utility. For details, please see http://www.owasp.org/
* details. * <p/>
* <p/> * Copyright (c) 2002 - 20014 Bruce Mayhew
* You should have received a copy of the GNU General Public License along with * <p/>
* this program; if not, write to the Free Software Foundation, Inc., 59 Temple * This program is free software; you can redistribute it and/or modify it under
* Place - Suite 330, Boston, MA 02111-1307, USA. * the terms of the GNU General Public License as published by the Free Software
* <p/> * Foundation; either version 2 of the License, or (at your option) any later
* Getting Source ============== * version.
* <p/> * <p/>
* Source for this application is maintained at https://github.com/WebGoat/WebGoat, a repository * This program is distributed in the hope that it will be useful, but WITHOUT
* for free software projects. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* <p/> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* For details, please see http://webgoat.github.io * details.
* * <p/>
* @author Bruce Mayhew <a href="http://code.google.com/p/webgoat">WebGoat</a> * You should have received a copy of the GNU General Public License along with
* @created October 28, 2003 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
*/ * Place - Suite 330, Boston, MA 02111-1307, USA.
public class Course { * <p/>
* Getting Source ==============
final Logger logger = LoggerFactory.getLogger(Course.class); * <p/>
* Source for this application is maintained at https://github.com/WebGoat/WebGoat, a repository
private final List<AbstractLesson> lessons = new LinkedList<AbstractLesson>(); * for free software projects.
* <p/>
private final static String PROPERTIES_FILENAME = HammerHead.propertiesPath; * For details, please see http://webgoat.github.io
*
private WebgoatProperties properties = null; * @author Bruce Mayhew <a href="http://code.google.com/p/webgoat">WebGoat</a>
* @created October 28, 2003
private final List<String> files = new LinkedList<String>(); */
public class Course {
private WebgoatContext webgoatContext;
final Logger logger = LoggerFactory.getLogger(Course.class);
public Course() {
try { private final List<AbstractLesson> lessons = new LinkedList<AbstractLesson>();
properties = new WebgoatProperties(PROPERTIES_FILENAME);
} catch (IOException e) { private final static String PROPERTIES_FILENAME = HammerHead.propertiesPath;
logger.error("Error loading webgoat properties", e);
} private WebgoatProperties properties = null;
}
private final List<String> files = new LinkedList<String>();
/**
* Take an absolute file and return the filename. private WebgoatContext webgoatContext;
* <p/>
* Ex. /etc/password becomes password public Course() {
* try {
* @param s properties = new WebgoatProperties(PROPERTIES_FILENAME);
* @return the file name } catch (IOException e) {
*/ logger.error("Error loading webgoat properties", e);
private static String getFileName(String s) { }
String fileName = new File(s).getName(); }
if (fileName.contains("/")) { /**
fileName = fileName.substring(fileName.lastIndexOf("/"), fileName.length()); * Take an absolute file and return the filename.
} * <p/>
* Ex. /etc/password becomes password
if (fileName.contains(".")) { *
fileName = fileName.substring(0, fileName.indexOf(".")); * @param s
} * @return the file name
*/
return fileName; private static String getFileName(String s) {
} String fileName = new File(s).getName();
/** if (fileName.contains("/")) {
* Take a class name and return the equivalent file name fileName = fileName.substring(fileName.lastIndexOf("/"), fileName.length());
* <p/> }
* Ex. org.owasp.webgoat becomes org/owasp/webgoat.java
* if (fileName.contains(".")) {
* @param className fileName = fileName.substring(0, fileName.indexOf("."));
* @return }
*/
private static String getSourceFile(String className) { return fileName;
StringBuilder sb = new StringBuilder(); }
sb.append(className.replace(".", "/")); /**
sb.append(".java"); * Take a class name and return the equivalent file name
* <p/>
return sb.toString(); * Ex. org.owasp.webgoat becomes org/owasp/webgoat.java
} *
* @param className
/** * @return
* Takes a file name and builds the class file name */
* private static String getSourceFile(String className) {
* @param fileName Description of the Parameter StringBuilder sb = new StringBuilder();
* @param path Description of the Parameter
* @return Description of the Return Value sb.append(className.replace(".", "/"));
*/ sb.append(".java");
private static String getClassFile(String fileName, String path) {
String ext = ".class"; return sb.toString();
fileName = fileName.trim(); }
/** /**
* We do not handle directories. We do not handle files with different * Takes a file name and builds the class file name
* extensions *
*/ * @param fileName Description of the Parameter
if (fileName.endsWith("/") || !fileName.endsWith(ext)) { * @param path Description of the Parameter
return null; * @return Description of the Return Value
} */
private static String getClassFile(String fileName, String path) {
// if the file is in /WEB-INF/classes strip the dir info off String ext = ".class";
int index = fileName.indexOf("/WEB-INF/classes/"); fileName = fileName.trim();
if (index != -1) {
fileName = fileName.substring(index + "/WEB-INF/classes/".length(), fileName.length() - ext.length()); /**
fileName = fileName.replace('/', '.'); * We do not handle directories. We do not handle files with different
fileName = fileName.replace('\\', '.'); * extensions
} else { */
// Strip off the leading path info if (fileName.endsWith("/") || !fileName.endsWith(ext)) {
fileName = fileName.substring(path.length(), fileName.length() - ext.length()); return null;
} }
return fileName; // if the file is in /WEB-INF/classes strip the dir info off
} int index = fileName.indexOf("/WEB-INF/classes/");
if (index != -1) {
/** fileName = fileName.substring(index + "/WEB-INF/classes/".length(), fileName.length() - ext.length());
* Gets the categories attribute of the Course object fileName = fileName.replace('/', '.');
* fileName = fileName.replace('\\', '.');
* @return The categories value } else {
*/ // Strip off the leading path info
public List getCategories() { fileName = fileName.substring(path.length(), fileName.length() - ext.length());
List<Category> categories = new ArrayList<Category>(); }
for (AbstractLesson lesson : lessons) {
if (!categories.contains(lesson.getCategory())) { return fileName;
categories.add(lesson.getCategory()); }
}
} /**
* Gets the categories attribute of the Course object
Collections.sort(categories); *
* @return The categories value
return categories; */
} public List getCategories() {
List<Category> categories = new ArrayList<Category>();
/** for (AbstractLesson lesson : lessons) {
* Gets the firstLesson attribute of the Course object if (!categories.contains(lesson.getCategory())) {
* categories.add(lesson.getCategory());
* @return The firstLesson value }
*/ }
public AbstractLesson getFirstLesson() {
List<String> roles = new ArrayList<String>(); Collections.sort(categories);
roles.add(AbstractLesson.USER_ROLE);
// Category 0 is the admin function. We want the first real category return categories;
// to be returned. This is normally the General category and the Http Basics lesson }
return ((AbstractLesson) getLessons((Category) getCategories().get(0), roles).get(0));
} /**
* Gets the firstLesson attribute of the Course object
/** *
* Gets the lesson attribute of the Course object * @return The firstLesson value
* */
* @param s public AbstractLesson getFirstLesson() {
* @param lessonId Description of the Parameter List<String> roles = new ArrayList<String>();
* @param roles roles.add(AbstractLesson.USER_ROLE);
* @return The lesson value // Category 0 is the admin function. We want the first real category
*/ // to be returned. This is normally the General category and the Http Basics lesson
public AbstractLesson getLesson(WebSession s, int lessonId, List<String> roles) { return ((AbstractLesson) getLessons((Category) getCategories().get(0), roles).get(0));
if (s.isHackedAdmin()) { }
roles.add(AbstractLesson.HACKED_ADMIN_ROLE);
} /**
// System.out.println("getLesson() with roles: " + roles); * Gets the lesson attribute of the Course object
Iterator<AbstractLesson> iter = lessons.iterator(); *
* @param s
while (iter.hasNext()) { * @param lessonId Description of the Parameter
AbstractLesson lesson = iter.next(); * @param roles
* @return The lesson value
// System.out.println("getLesson() at role: " + lesson.getRole()); */
if (lesson.getScreenId() == lessonId && roles.contains(lesson.getRole())) { public AbstractLesson getLesson(WebSession s, int lessonId, List<String> roles) {
return lesson; if (s.isHackedAdmin()) {
} roles.add(AbstractLesson.HACKED_ADMIN_ROLE);
} }
// System.out.println("getLesson() with roles: " + roles);
return null; Iterator<AbstractLesson> iter = lessons.iterator();
}
while (iter.hasNext()) {
public AbstractLesson getLesson(WebSession s, int lessonId, String role) { AbstractLesson lesson = iter.next();
List<String> roles = new ArrayList<String>();
roles.add(role); // System.out.println("getLesson() at role: " + lesson.getRole());
return getLesson(s, lessonId, roles); if (lesson.getScreenId() == lessonId && roles.contains(lesson.getRole())) {
} return lesson;
}
public List getLessons(WebSession s, String role) { }
List<String> roles = new ArrayList<String>();
roles.add(role); return null;
return getLessons(s, roles); }
}
public AbstractLesson getLesson(WebSession s, int lessonId, String role) {
/** List<String> roles = new ArrayList<String>();
* Gets the lessons attribute of the Course object roles.add(role);
* return getLesson(s, lessonId, roles);
* @param s }
* @param roles
* @return The lessons value public List getLessons(WebSession s, String role) {
*/ List<String> roles = new ArrayList<String>();
public List<AbstractLesson> getLessons(WebSession s, List<String> roles) { roles.add(role);
if (s.isHackedAdmin()) { return getLessons(s, roles);
roles.add(AbstractLesson.HACKED_ADMIN_ROLE); }
}
List<AbstractLesson> lessonList = new ArrayList<AbstractLesson>(); /**
Iterator categoryIter = getCategories().iterator(); * Gets the lessons attribute of the Course object
*
while (categoryIter.hasNext()) { * @param s
lessonList.addAll(getLessons(s, (Category) categoryIter.next(), roles)); * @param roles
} * @return The lessons value
return lessonList; */
} public List<AbstractLesson> getLessons(WebSession s, List<String> roles) {
if (s.isHackedAdmin()) {
/** roles.add(AbstractLesson.HACKED_ADMIN_ROLE);
* Gets the lessons attribute of the Course object }
* List<AbstractLesson> lessonList = new ArrayList<AbstractLesson>();
* @param category Description of the Parameter Iterator categoryIter = getCategories().iterator();
* @param role Description of the Parameter
* @return The lessons value while (categoryIter.hasNext()) {
*/ lessonList.addAll(getLessons(s, (Category) categoryIter.next(), roles));
private List<AbstractLesson> getLessons(Category category, List roles) { }
List<AbstractLesson> lessonList = new ArrayList<AbstractLesson>(); return lessonList;
}
for (AbstractLesson lesson : lessons) {
if (lesson.getCategory().equals(category) && roles.contains(lesson.getRole())) { /**
lessonList.add(lesson); * Gets the lessons attribute of the Course object
} *
} * @param category Description of the Parameter
* @param role Description of the Parameter
Collections.sort(lessonList); * @return The lessons value
// System.out.println(java.util.Arrays.asList(lessonList)); */
return lessonList; private List<AbstractLesson> getLessons(Category category, List roles) {
} List<AbstractLesson> lessonList = new ArrayList<AbstractLesson>();
public List getLessons(WebSession s, Category category, String role) { for (AbstractLesson lesson : lessons) {
List<String> roles = new ArrayList<String>(); if (lesson.getCategory().equals(category) && roles.contains(lesson.getRole())) {
roles.add(role); lessonList.add(lesson);
return getLessons(s, category, roles); }
} }
public List<AbstractLesson> getLessons(WebSession s, Category category, List<String> roles) { Collections.sort(lessonList);
if (s.isHackedAdmin()) { // System.out.println(java.util.Arrays.asList(lessonList));
roles.add(AbstractLesson.HACKED_ADMIN_ROLE); return lessonList;
} }
return getLessons(category, roles);
} public List getLessons(WebSession s, Category category, String role) {
List<String> roles = new ArrayList<String>();
public AbstractLesson getLesson(int lessonId) { roles.add(role);
for (AbstractLesson l : lessons) { return getLessons(s, category, roles);
if (l.getScreenId() == lessonId) { }
return l;
} public List<AbstractLesson> getLessons(WebSession s, Category category, List<String> roles) {
} if (s.isHackedAdmin()) {
return null; roles.add(AbstractLesson.HACKED_ADMIN_ROLE);
} }
return getLessons(category, roles);
private void loadLessonFromPlugin(ServletContext context) { }
logger.debug("Loading plugins into cache");
String pluginPath = context.getRealPath("plugin_lessons"); public AbstractLesson getLesson(int lessonId) {
String targetPath = context.getRealPath("plugin_extracted"); for (AbstractLesson l : lessons) {
if (pluginPath == null) { if (l.getScreenId() == lessonId) {
logger.error("Plugins directory {} not found", pluginPath); return l;
return; }
} }
new GlobalProperties(Paths.get(targetPath)).loadProperties(Paths.get(context.getRealPath("container//i18n"))); return null;
}
List<Plugin> plugins = new PluginsLoader(Paths.get(pluginPath), Paths.get(targetPath)).loadPlugins(true);
for (Plugin plugin : plugins) { private void loadLessonFromPlugin(ServletContext context) {
try { logger.debug("Loading plugins into cache");
Class<AbstractLesson> c = plugin.getLesson(); String pluginPath = context.getRealPath("plugin_lessons");
Object o = c.newInstance(); String targetPath = context.getRealPath("plugin_extracted");
if (pluginPath == null) {
AbstractLesson lesson = (AbstractLesson) o; logger.error("Plugins directory {} not found", pluginPath);
lesson.setWebgoatContext(webgoatContext); return;
}
lesson.update(properties); new GlobalProperties(Paths.get(targetPath)).loadProperties(Paths.get(context.getRealPath("container//i18n")));
if (!lesson.getHidden()) { List<Plugin> plugins = new PluginsLoader(Paths.get(pluginPath), Paths.get(targetPath)).loadPlugins(true);
lessons.add(lesson); for (Plugin plugin : plugins) {
} try {
for(Map.Entry<String, File> lessonPlan : plugin.getLessonPlans().entrySet()) { Class<AbstractLesson> c = plugin.getLesson();
lesson.setLessonPlanFileName(lessonPlan.getKey(), lessonPlan.getValue().toString()); Object o = c.newInstance();
}
lesson.setLessonSolutionFileName(plugin.getLessonSolutions().get("en").toString()); AbstractLesson lesson = (AbstractLesson) o;
lesson.setSourceFileName(plugin.getLessonSource().toString()); lesson.setWebgoatContext(webgoatContext);
} catch (Exception e) {
logger.error("Error in loadLessons: ", e); lesson.update(properties);
}
} if (!lesson.getHidden()) {
} lessons.add(lesson);
}
/** for(Map.Entry<String, File> lessonPlan : plugin.getLessonPlans().entrySet()) {
* Description of the Method lesson.setLessonPlanFileName(lessonPlan.getKey(), lessonPlan.getValue().toString());
* }
* @param webgoatContext lesson.setLessonSolutionFileName(plugin.getLessonSolutions().get("en").toString());
* @param path Description of the Parameter lesson.setSourceFileName(plugin.getLessonSource().toString());
* @param context Description of the Parameter } catch (Exception e) {
*/ logger.error("Error in loadLessons: ", e);
public void loadCourses(WebgoatContext webgoatContext, ServletContext context, String path) { }
logger.info("Loading courses: " + path); }
this.webgoatContext = webgoatContext; }
loadLessonFromPlugin(context);
} /**
* Description of the Method
} *
* @param webgoatContext
* @param path Description of the Parameter
* @param context Description of the Parameter
*/
public void loadCourses(WebgoatContext webgoatContext, ServletContext context, String path) {
logger.info("Loading courses: " + path);
this.webgoatContext = webgoatContext;
loadLessonFromPlugin(context);
LegacyLoader loader = new LegacyLoader();
lessons.addAll(loader.loadLessons(webgoatContext, context, path, properties));
}
}