From 36ea6ad12db37dd073099fcf36234b5b5f11e476 Mon Sep 17 00:00:00 2001 From: nbaars Date: Sat, 10 Jan 2015 10:24:51 +0100 Subject: [PATCH] clean i18n directory when first time loading --- .../org/owasp/webgoat/plugins/Plugin.java | 29 +++++++++++------- .../owasp/webgoat/plugins/PluginsLoader.java | 6 ++-- .../org/owasp/webgoat/session/Course.java | 2 +- .../plugin_lessons/SqlStringInjection-1.0.jar | Bin 437423 -> 442331 bytes 4 files changed, 22 insertions(+), 15 deletions(-) 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 698175bb830752e2d6b6ca654417a79e04a168c6..698eb831b512e7c4a943c365bd9e7a35704932ff 100644 GIT binary patch delta 6968 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ⅅrK#cW1|Ww=99kazzR3yoUKot0CXilzm*2iS+`{ZG>mY@at@V~)#cFP_%hQ_ z_2(EudmIuHTMvsSnN}>LBcn-ujIdtPiEws{F%cBE0a-Gzk4s3pK|h5b!y|=T-l^13 zXb8l(4RemDI)21mIXSstZ7Dd-9{MpcbF}4(JXg#qTC2A z9DjoKhDX0ml0ncC5_q!GkQQ_j`xBnK{cgsBMANH@wMD|fv|jvv?T3Vb(r}xLt?X&d zAQI5|9I&i=8AIHb64P7$1z3VVI4HIh3y7O=yPg!_-2q(L3@xBQ)s8i8t$m{v4$89z z*LQQ`Baq{hrCDwYr*zNOhZe^)ABm&D2nx<*Cvbu(=0UTmAJnkWSBhZ--4+UQrkOumF%$n6(1Qz^x`%&-wnrynzX1{O~-v45D?p$z; zGkT5kxAlDIwwGOjYkz@2W;j&Gg zw{~+S>{l)LtNdNOx`Q8S1d|tScPmW46k*V;f~UN6tuM3YG6&BNxkT1t3`#%JtM4|u z8_4F5jH^;P*VIVqZ-+|L;fa_rYdN;ZXK*P-clzG#WbPAhb9#FWmrzqeLcWKBdFOAh zAL^J6=Dl4DG(R0Ifhc@E9sCdhAQ@m`1Tf6_6H3njBYO7GoeZ!(BBYQBHu?)Fpk0|@ zssD`b!~TpcVc@3-cP|WVi~!78U~fd$yeu#$0>HDtd4HiQH)oidVf(*?DBi=1Q zSF^#o2#;hA*Z=|2|AO5|d2m1^=|0eMChGp$YD5J-sX=K8O7>n4Jsjxk_9s8Z35%2laig)$t4=dk;*bD~ECd|}2qsKOkQhhA4!+N`5UU8+r5fnA|B@-(xN&eN-o@cI~;uh~M)deQZ-M7=|g+H)e6YV9KTY?d#qe41$I zU({y`kEOUUyvt84@(rmjcaCU+R{1F-#~r28w51|Prb(6?bwovK9AI%w;rsJx+p zCodCs#W~+^9DBIO?n@o#*c%3R@($Q%_4ibknft1y zRldvd|1)wQeQMb~OTNz#{d%#=gQkqcnVPH4(Z>gao8K9Uh4F#|^g_Q&V>UsS(>RZ2 zU?<|AcstnCcQ{(3GuVJ4`{xO|=e_PHsczxsC-ZI!)YfXiu(srjwJqJP zQS5@n2Q8cPpRWwI)g9qDcJ{KdyUbBR!TBSm)#~oU10&B4_VhfC;6hjg zI(}7EZz1Tyl!+wQtYem|g|NOD1c;neZkjPEZ;wueO8-e?Rd^4(e{FK;*Z!EEt9qCD zd&(;R6%Oo64{c@BQ;aPd-yO9LXKnFuFz+=xa;32|wJ4)W`94(I(!AWi)WN@(Dx~w^)KBVnBx@MW7+XvxG!^!>{vkv3wVv)B86=UJbb8`x2 zmH-R#FtEJ@a1ddY0&_%0>wqTQUJCTkQ&Q<{{7xxALkDV>0Uin+CXm?t6hS2jMC6Ww z7*)+G2~}V}3QZ_T#5EB0*-(O`*MICp@uLT)m21H;a@dip&n^uw<_UB(JhS9+J}8+ zl+}Pq*5X!@1#2~7MD46mN-faFC5d!JEKYe^tQ9TnQ9i zpEb+4PME1h1BDq>ssmc+c(G2og>7mS$_5=`E6zq>Zk$OxbgBbx=v2q+h*SBVA_Xhh zTL+k^t%;t{#^mX6em&4Z!k6`gKtB(q^}uBH$L^YIF4zB=Q*7rRn3S0r4^-h!-ViuK pTI3?Z9=bIEjTLjZg{X-qw)