diff --git a/apps/routerconsole/java/src/net/i2p/router/web/LogsHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/LogsHelper.java index 959b8b797486d9a119fcf3a963ac5710cd213dc7..f5cc0a1b886ffd2399579a8fc6f319c00acf88dd 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/LogsHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/LogsHelper.java @@ -12,7 +12,16 @@ public class LogsHelper extends HelperBase { /** @since 0.8.11 */ public String getJettyVersion() { - return Version.getImplVersion(); + return jettyVersion(); + } + + /** @since 0.8.13 */ + static String jettyVersion() { + try { + return Version.getImplVersion(); + } catch (Throwable t) { + return "unknown"; + } } public String getLogs() { diff --git a/apps/routerconsole/java/src/net/i2p/router/web/PluginStarter.java b/apps/routerconsole/java/src/net/i2p/router/web/PluginStarter.java index d1835a32065f46168517b8eec9ec6cd46e0efc4b..6be4b1cd7ee034d23a7e953f0e7eb7431e630a98 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/PluginStarter.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/PluginStarter.java @@ -17,6 +17,7 @@ import java.util.Properties; import java.util.StringTokenizer; import java.util.concurrent.ConcurrentHashMap; +import net.i2p.CoreVersion; import net.i2p.I2PAppContext; import net.i2p.data.DataHelper; import net.i2p.router.Job; @@ -27,6 +28,7 @@ import net.i2p.util.ConcurrentHashSet; import net.i2p.util.FileUtil; import net.i2p.util.Log; import net.i2p.util.Translate; +import net.i2p.util.VersionComparator; import org.mortbay.jetty.Server; @@ -95,6 +97,41 @@ public class PluginStarter implements Runnable { log.error("Cannot start nonexistent plugin: " + appName); return false; } + + Properties props = pluginProperties(ctx, appName); + String minVersion = ConfigClientsHelper.stripHTML(props, "min-i2p-version"); + if (minVersion != null && + (new VersionComparator()).compare(CoreVersion.VERSION, minVersion) < 0) { + String foo = "Plugin " + appName + " requires I2P version " + minVersion + " or higher"; + log.error(foo); + throw new Exception(foo); + } + + minVersion = ConfigClientsHelper.stripHTML(props, "min-java-version"); + if (minVersion != null && + (new VersionComparator()).compare(System.getProperty("java.version"), minVersion) < 0) { + String foo = "Plugin " + appName + " requires Java version " + minVersion + " or higher"; + log.error(foo); + throw new Exception(foo); + } + + String jVersion = LogsHelper.jettyVersion(); + minVersion = ConfigClientsHelper.stripHTML(props, "min-jetty-version"); + if (minVersion != null && + (new VersionComparator()).compare(minVersion, jVersion) > 0) { + String foo = "Plugin " + appName + " requires Jetty version " + minVersion + " or higher"; + log.error(foo); + throw new Exception(foo); + } + + String maxVersion = ConfigClientsHelper.stripHTML(props, "max-jetty-version"); + if (maxVersion != null && + (new VersionComparator()).compare(maxVersion, jVersion) < 0) { + String foo = "Plugin " + appName + " requires Jetty version " + maxVersion + " or lower"; + log.error(foo); + throw new Exception(foo); + } + if (log.shouldLog(Log.INFO)) log.info("Starting plugin: " + appName); @@ -113,8 +150,8 @@ public class PluginStarter implements Runnable { // load and start things in clients.config File clientConfig = new File(pluginDir, "clients.config"); if (clientConfig.exists()) { - Properties props = new Properties(); - DataHelper.loadProps(props, clientConfig); + Properties cprops = new Properties(); + DataHelper.loadProps(cprops, clientConfig); List<ClientAppConfig> clients = ClientAppConfig.getClientApps(clientConfig); runClientApps(ctx, pluginDir, clients, "start"); } @@ -123,7 +160,7 @@ public class PluginStarter implements Runnable { Server server = WebAppStarter.getConsoleServer(); if (server != null) { File consoleDir = new File(pluginDir, "console"); - Properties props = RouterConsoleRunner.webAppProperties(consoleDir.getAbsolutePath()); + Properties wprops = RouterConsoleRunner.webAppProperties(consoleDir.getAbsolutePath()); File webappDir = new File(consoleDir, "webapps"); String fileNames[] = webappDir.list(RouterConsoleRunner.WarFilenameFilter.instance()); if (fileNames != null) { @@ -138,7 +175,7 @@ public class PluginStarter implements Runnable { log.error("Skipping duplicate webapp " + warName + " in plugin " + appName); continue; } - String enabled = props.getProperty(RouterConsoleRunner.PREFIX + warName + ENABLED); + String enabled = wprops.getProperty(RouterConsoleRunner.PREFIX + warName + ENABLED); if (! "false".equals(enabled)) { if (log.shouldLog(Log.INFO)) log.info("Starting webapp: " + warName); @@ -181,7 +218,6 @@ public class PluginStarter implements Runnable { } // add summary bar link - Properties props = pluginProperties(ctx, appName); String name = ConfigClientsHelper.stripHTML(props, "consoleLinkName_" + Messages.getLanguage(ctx)); if (name == null) name = ConfigClientsHelper.stripHTML(props, "consoleLinkName"); diff --git a/apps/routerconsole/java/src/net/i2p/router/web/PluginUpdateHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/PluginUpdateHandler.java index 884a20bb5fcbf1dbd92871b41a59747310f77a3f..511bfb0cd075de25f00352148c67a4a16c89a9d2 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/PluginUpdateHandler.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/PluginUpdateHandler.java @@ -334,6 +334,21 @@ public class PluginUpdateHandler extends UpdateHandler { statusDone("<b>" + _("Plugin update requires installed plugin version {0} or lower", maxVersion) + "</b>"); return; } + oldVersion = LogsHelper.jettyVersion(); + minVersion = ConfigClientsHelper.stripHTML(props, "min-jetty-version"); + if (minVersion != null && + (new VersionComparator()).compare(minVersion, oldVersion) > 0) { + to.delete(); + statusDone("<b>" + _("Plugin requires Jetty version {0} or higher", minVersion) + "</b>"); + return; + } + maxVersion = ConfigClientsHelper.stripHTML(props, "max-jetty-version"); + if (maxVersion != null && + (new VersionComparator()).compare(maxVersion, oldVersion) < 0) { + to.delete(); + statusDone("<b>" + _("Plugin requires Jetty version {0} or lower", maxVersion) + "</b>"); + return; + } // check if it is running first? try {