Moved loading to separate object. Added a unit test for loading the properties
This commit is contained in:
parent
1d7ecb0627
commit
861f3e9d37
@ -0,0 +1,24 @@
|
||||
package org.owasp.webgoat.plugins;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Path;
|
||||
import java.util.List;
|
||||
|
||||
public final class GlobalProperties {
|
||||
|
||||
private final Plugin plugin;
|
||||
|
||||
public GlobalProperties(Path pluginDirectory) {
|
||||
this.plugin = new Plugin(pluginDirectory);
|
||||
}
|
||||
|
||||
public void loadProperties(Path globalPropertiesPath) {
|
||||
try {
|
||||
List<Path> filesInDirectory = PluginFileUtils.getFilesInDirectory(globalPropertiesPath);
|
||||
this.plugin.loadFiles(filesInDirectory, true);
|
||||
} catch (IOException e) {
|
||||
throw new IllegalStateException("Unable to load global properties, check your installation for the directory i18n: " + globalPropertiesPath.toString(), e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -15,7 +15,7 @@ public class PluginFileUtils {
|
||||
}
|
||||
|
||||
public static boolean hasParentDirectoryWithName(Path p, String s) {
|
||||
if (p == null || p.getParent() == null || p.getRoot().equals(p.getParent())) {
|
||||
if (p == null || p.getParent() == null || p.getParent().equals(p.getRoot())) {
|
||||
return false;
|
||||
}
|
||||
if (p.getParent().getFileName().toString().equals(s)) {
|
||||
@ -31,8 +31,7 @@ public class PluginFileUtils {
|
||||
return p;
|
||||
}
|
||||
|
||||
public static List<Path> getFilesInDirectory( Path directory) throws IOException
|
||||
{
|
||||
public static List<Path> getFilesInDirectory( Path directory) throws IOException {
|
||||
List<Path> files = new ArrayList<>();
|
||||
DirectoryStream<Path> dirStream;
|
||||
dirStream = Files.newDirectoryStream(directory);
|
||||
|
@ -3,6 +3,7 @@ package org.owasp.webgoat.session;
|
||||
import org.owasp.webgoat.HammerHead;
|
||||
import org.owasp.webgoat.lessons.AbstractLesson;
|
||||
import org.owasp.webgoat.lessons.Category;
|
||||
import org.owasp.webgoat.plugins.GlobalProperties;
|
||||
import org.owasp.webgoat.plugins.Plugin;
|
||||
import org.owasp.webgoat.plugins.PluginFileUtils;
|
||||
import org.owasp.webgoat.plugins.PluginsLoader;
|
||||
@ -284,7 +285,6 @@ public class Course {
|
||||
}
|
||||
|
||||
private void loadLessonFromPlugin(ServletContext context) {
|
||||
context.getContextPath();
|
||||
logger.debug("Loading plugins into cache");
|
||||
String pluginPath = context.getRealPath("plugin_lessons");
|
||||
String targetPath = context.getRealPath("plugin_extracted");
|
||||
@ -292,17 +292,8 @@ public class Course {
|
||||
logger.error("Plugins directory {} not found", pluginPath);
|
||||
return;
|
||||
}
|
||||
new GlobalProperties(Paths.get(targetPath)).loadProperties(Paths.get(context.getRealPath("container//i18n")));
|
||||
|
||||
// Do a one time load of the container properties
|
||||
String containerPath = context.getRealPath("container//i18n");
|
||||
Plugin theContainer = new Plugin(Paths.get(targetPath));
|
||||
try {
|
||||
theContainer.loadFiles(PluginFileUtils.getFilesInDirectory(Paths.get(containerPath)), false);
|
||||
} catch (IOException io) {
|
||||
logger.error("Error loading container properties: ", io);
|
||||
}
|
||||
|
||||
Path pluginDirectory = Paths.get(pluginPath);
|
||||
List<Plugin> plugins = new PluginsLoader(Paths.get(pluginPath), Paths.get(targetPath)).loadPlugins(true);
|
||||
for (Plugin plugin : plugins) {
|
||||
try {
|
||||
@ -314,7 +305,7 @@ public class Course {
|
||||
|
||||
lesson.update(properties);
|
||||
|
||||
if (lesson.getHidden() == false) {
|
||||
if (!lesson.getHidden()) {
|
||||
lessons.add(lesson);
|
||||
}
|
||||
for(Map.Entry<String, File> lessonPlan : plugin.getLessonPlans().entrySet()) {
|
||||
|
@ -0,0 +1,47 @@
|
||||
package org.owasp.webgoat.plugins;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.Arrays;
|
||||
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
||||
public class GlobalPropertiesTest {
|
||||
|
||||
private Path tempDirectory;
|
||||
|
||||
@Before
|
||||
public void createTmpDir() throws IOException {
|
||||
tempDirectory = Files.createTempDirectory(GlobalPropertiesTest.class.getSimpleName());
|
||||
tempDirectory.toFile().deleteOnExit();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void propertyFilesShouldBeLoaded() throws IOException {
|
||||
Path pluginDirectory = Files.createDirectory(Paths.get(tempDirectory.toString(), "plugins"));
|
||||
Path directory = Files.createDirectory(Paths.get(tempDirectory.toString(), "i18n"));
|
||||
Path globalProperties = Files.createFile(Paths.get(directory.toString(), "global.properties"));
|
||||
Files.write(globalProperties, Arrays.asList("test=label for test"), StandardCharsets.UTF_8);
|
||||
new GlobalProperties(pluginDirectory).loadProperties(directory);
|
||||
|
||||
ClassLoader propertyFilesClassLoader =
|
||||
ResourceBundleClassLoader.createPropertyFilesClassLoader(this.getClass().getClassLoader());
|
||||
assertNotNull(propertyFilesClassLoader.getResourceAsStream("global.properties"));
|
||||
}
|
||||
|
||||
@Test(expected = IllegalStateException.class)
|
||||
public void propertyFilesDirectoryNotFoundShouldRaiseError() throws IOException {
|
||||
Path pluginDirectory = Files.createDirectory(Paths.get(tempDirectory.toString(), "plugins"));
|
||||
Path directory = Files.createDirectory(Paths.get(tempDirectory.toString(), "i18n"));
|
||||
Files.delete(directory);
|
||||
|
||||
new GlobalProperties(pluginDirectory).loadProperties(directory);
|
||||
}
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user