diff --git a/src/main/java/org/owasp/webgoat/plugins/Plugin.java b/src/main/java/org/owasp/webgoat/plugins/Plugin.java index 3cecb1981..e56c67e50 100644 --- a/src/main/java/org/owasp/webgoat/plugins/Plugin.java +++ b/src/main/java/org/owasp/webgoat/plugins/Plugin.java @@ -71,7 +71,7 @@ public class Plugin { } } - public void loadFiles(List files) { + public void loadFiles(List files, boolean reload) { for (Path file : files) { if (fileEndsWith(file, ".html") && hasParentDirectoryWithName(file, NAME_LESSON_SOLUTION_DIRECTORY)) { solutionLanguageFiles.put(file.getParent().getFileName().toString(), file.toFile()); @@ -83,20 +83,27 @@ public class Plugin { lessonSourceFile = file.toFile(); } if (fileEndsWith(file, ".properties") && hasParentDirectoryWithName(file, NAME_LESSON_I18N_DIRECTORY)) { - try { - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - Files.copy(file, bos); - Path propertiesPath = createPropertiesDirectory(); - ResourceBundleClassLoader.setPropertiesPath(propertiesPath); - Files.write(propertiesPath.resolve(file.getFileName()), bos.toByteArray(), - StandardOpenOption.CREATE, StandardOpenOption.APPEND); - } catch (IOException io) { - throw new PluginLoadingFailure("Property file detected, but unable to copy the properties", io); - } + copyProperties(reload, file); } } } + private void copyProperties(boolean reload, Path file) { + try { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + Files.copy(file, bos); + Path propertiesPath = createPropertiesDirectory(); + ResourceBundleClassLoader.setPropertiesPath(propertiesPath); + if ( reload ) { + Files.write(propertiesPath.resolve(file.getFileName()), bos.toByteArray(), StandardOpenOption.CREATE, StandardOpenOption.APPEND); + } else { + Files.write(propertiesPath.resolve(file.getFileName()), bos.toByteArray(), StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING); + } + } catch (IOException io) { + throw new PluginLoadingFailure("Property file detected, but unable to copy the properties", io); + } + } + private Path createPropertiesDirectory() throws IOException { if (Files.exists(pluginDirectory.resolve(NAME_LESSON_I18N_DIRECTORY))) { return pluginDirectory.resolve(NAME_LESSON_I18N_DIRECTORY); diff --git a/src/main/java/org/owasp/webgoat/plugins/PluginsLoader.java b/src/main/java/org/owasp/webgoat/plugins/PluginsLoader.java index ac4fa5566..422548547 100644 --- a/src/main/java/org/owasp/webgoat/plugins/PluginsLoader.java +++ b/src/main/java/org/owasp/webgoat/plugins/PluginsLoader.java @@ -21,7 +21,7 @@ public class PluginsLoader implements Runnable { this.path = path; } - public List loadPlugins() { + public List loadPlugins(final boolean reload) { final List plugins = new ArrayList(); try { Files.walkFileTree(path, new SimpleFileVisitor() { @@ -33,7 +33,7 @@ public class PluginsLoader implements Runnable { extractor.extract(); Plugin plugin = new Plugin(extractor.getBaseDirectory()); plugin.loadClasses(extractor.getClasses()); - plugin.loadFiles(extractor.getFiles()); + plugin.loadFiles(extractor.getFiles(), reload); plugins.add(plugin); } catch (Plugin.PluginLoadingFailure e) { logger.error("Unable to load plugin, continue reading others..."); @@ -51,6 +51,6 @@ public class PluginsLoader implements Runnable { @Override public void run() { - loadPlugins(); + loadPlugins(true); } } diff --git a/src/main/java/org/owasp/webgoat/session/Course.java b/src/main/java/org/owasp/webgoat/session/Course.java index 02bf24f72..54c59ded5 100644 --- a/src/main/java/org/owasp/webgoat/session/Course.java +++ b/src/main/java/org/owasp/webgoat/session/Course.java @@ -316,7 +316,7 @@ public class Course { } Path pluginDirectory = Paths.get(path); webgoatContext.setPluginDirectory(pluginDirectory); - List plugins = new PluginsLoader(pluginDirectory).loadPlugins(); + List plugins = new PluginsLoader(pluginDirectory).loadPlugins(false); for (Plugin plugin : plugins) { try { Class c = plugin.getLesson(); diff --git a/src/main/webapp/plugin_lessons/SqlStringInjection-1.0.jar b/src/main/webapp/plugin_lessons/SqlStringInjection-1.0.jar index 698175bb8..698eb831b 100644 Binary files a/src/main/webapp/plugin_lessons/SqlStringInjection-1.0.jar and b/src/main/webapp/plugin_lessons/SqlStringInjection-1.0.jar differ