From d5c70676b088262ce9b32867cc220c8c042f5063 Mon Sep 17 00:00:00 2001 From: zzz Date: Mon, 5 Nov 2012 17:17:31 +0000 Subject: [PATCH] * Console: - Fix NPE after restart (ticket #763) - Move more nonces out of system properties --- .../src/net/i2p/router/web/CSSHelper.java | 14 +++++++++++-- .../net/i2p/router/web/ConfigRestartBean.java | 21 +++++++++---------- .../src/net/i2p/router/web/FormHandler.java | 4 ++-- .../src/net/i2p/router/web/NewsHelper.java | 2 +- .../i2p/router/web/SummaryBarRenderer.java | 2 +- .../src/net/i2p/router/web/SummaryHelper.java | 8 ++++++- apps/routerconsole/jsp/configui.jsp | 10 +-------- apps/routerconsole/jsp/console.jsp | 6 +----- apps/routerconsole/jsp/css.jsi | 2 +- apps/routerconsole/jsp/home.jsp | 6 +----- 10 files changed, 37 insertions(+), 38 deletions(-) diff --git a/apps/routerconsole/java/src/net/i2p/router/web/CSSHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/CSSHelper.java index 785af69a3..3d92f6d2a 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/CSSHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/CSSHelper.java @@ -3,6 +3,8 @@ package net.i2p.router.web; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import net.i2p.util.RandomSource; + /** * Copied and modded from I2PTunnel IndexBean (GPL) * @author zzz @@ -11,8 +13,6 @@ public class CSSHelper extends HelperBase { private static final Map _UACache = new ConcurrentHashMap(); - public CSSHelper() {} - public static final String PROP_UNIVERSAL_THEMING = "routerconsole.universal.theme"; public static final String PROP_THEME_NAME = "routerconsole.theme"; public static final String DEFAULT_THEME = "light"; @@ -24,6 +24,16 @@ public class CSSHelper extends HelperBase { public static final String PROP_DISABLE_REFRESH = "routerconsole.summaryDisableRefresh"; private static final String PROP_XFRAME = "routerconsole.disableXFrame"; + private static final String _consoleNonce = Long.toString(RandomSource.getInstance().nextLong()); + + /** + * formerly stored in System.getProperty("router.consoleNonce") + * @since 0.9.4 + */ + public static String getNonce() { + return _consoleNonce; + } + public String getTheme(String userAgent) { String url = BASE_THEME_PATH; if (userAgent != null && userAgent.contains("MSIE")) { diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigRestartBean.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigRestartBean.java index 204bda9f8..836d07ea3 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigRestartBean.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigRestartBean.java @@ -3,6 +3,7 @@ package net.i2p.router.web; import net.i2p.data.DataHelper; import net.i2p.router.Router; import net.i2p.router.RouterContext; +import net.i2p.util.RandomSource; /** * simple helper to control restarts/shutdowns in the left hand nav @@ -12,20 +13,18 @@ public class ConfigRestartBean { /** all these are tagged below so no need to _x them here. * order is: form value, form class, display text. */ - static final String[] SET1 = {"shutdownImmediate", "stop", "Shutdown immediately", "cancelShutdown", "cancel", "Cancel shutdown"}; - static final String[] SET2 = {"restartImmediate", "reload", "Restart immediately", "cancelShutdown", "cancel", "Cancel restart"}; - static final String[] SET3 = {"restart", "reload", "Restart", "shutdown", "stop", "Shutdown"}; - static final String[] SET4 = {"shutdown", "stop", "Shutdown"}; + private static final String[] SET1 = {"shutdownImmediate", "stop", "Shutdown immediately", "cancelShutdown", "cancel", "Cancel shutdown"}; + private static final String[] SET2 = {"restartImmediate", "reload", "Restart immediately", "cancelShutdown", "cancel", "Cancel restart"}; + private static final String[] SET3 = {"restart", "reload", "Restart", "shutdown", "stop", "Shutdown"}; + private static final String[] SET4 = {"shutdown", "stop", "Shutdown"}; + private static final String _systemNonce = Long.toString(RandomSource.getInstance().nextLong()); + + /** formerly System.getProperty("console.nonce") */ public static String getNonce() { - RouterContext ctx = ContextHelper.getContext(null); - String nonce = System.getProperty("console.nonce"); - if (nonce == null) { - nonce = ""+ctx.random().nextLong(); - System.setProperty("console.nonce", nonce); - } - return nonce; + return _systemNonce; } + public static String renderStatus(String urlBase, String action, String nonce) { RouterContext ctx = ContextHelper.getContext(null); String systemNonce = getNonce(); diff --git a/apps/routerconsole/java/src/net/i2p/router/web/FormHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/FormHandler.java index ba5856632..ebd1adc07 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/FormHandler.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/FormHandler.java @@ -194,8 +194,8 @@ public class FormHandler { return; } - String sharedNonce = System.getProperty("router.consoleNonce"); - if ( (sharedNonce != null) && (sharedNonce.equals(_nonce) ) ) { + String sharedNonce = CSSHelper.getNonce(); + if (sharedNonce.equals(_nonce)) { return; } diff --git a/apps/routerconsole/java/src/net/i2p/router/web/NewsHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/NewsHelper.java index 5e5fcecfe..162290e94 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/NewsHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/NewsHelper.java @@ -212,7 +212,7 @@ public class NewsHelper extends ContentHelper { ctx)); } buf.append(""); - String consoleNonce = System.getProperty("router.consoleNonce"); + String consoleNonce = CSSHelper.getNonce(); if (lastUpdated > 0 && consoleNonce != null) { if (shouldShowNews(ctx)) { buf.append(" ") diff --git a/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java index 61bed4548..496c41cab 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java @@ -606,7 +606,7 @@ public class SummaryBarRenderer { NewsHelper newshelper = _helper.getNewsHelper(); if (newshelper == null || newshelper.shouldShowNews()) return ""; StringBuilder buf = new StringBuilder(512); - String consoleNonce = System.getProperty("router.consoleNonce"); + String consoleNonce = CSSHelper.getNonce(); if (consoleNonce != null) { // Set up title and pre-headings stuff. buf.append("

") diff --git a/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java index 2bd763606..3015f23e9 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java @@ -809,7 +809,13 @@ public class SummaryHelper extends HelperBase { private String _requestURI; public void setRequestURI(String s) { _requestURI = s; } - public String getRequestURI() { return _requestURI; } + + /** + * @return non-null; "/home" if (strangely) not set by jsp + */ + public String getRequestURI() { + return _requestURI != null ? _requestURI : "/home"; + } public String getConfigTable() { String[] allSections = SummaryBarRenderer.ALL_SECTIONS; diff --git a/apps/routerconsole/jsp/configui.jsp b/apps/routerconsole/jsp/configui.jsp index f1555a892..b19c0103c 100644 --- a/apps/routerconsole/jsp/configui.jsp +++ b/apps/routerconsole/jsp/configui.jsp @@ -31,15 +31,7 @@ input.default { <%@include file="formhandler.jsi" %>

<%=uihelper._("Router Console Theme")%>

-<% - /** lang setting is done in css.jsi, not in ConfigUIHandler */ - String consoleNonce = System.getProperty("router.consoleNonce"); - if (consoleNonce == null) { - consoleNonce = Long.toString(new java.util.Random().nextLong()); - System.setProperty("router.consoleNonce", consoleNonce); - } -%> - + <% diff --git a/apps/routerconsole/jsp/console.jsp b/apps/routerconsole/jsp/console.jsp index b70c4170e..883c83c56 100644 --- a/apps/routerconsole/jsp/console.jsp +++ b/apps/routerconsole/jsp/console.jsp @@ -10,11 +10,7 @@ <%@include file="summaryajax.jsi" %> <% - String consoleNonce = System.getProperty("router.consoleNonce"); - if (consoleNonce == null) { - consoleNonce = Long.toString(new java.util.Random().nextLong()); - System.setProperty("router.consoleNonce", consoleNonce); - } + String consoleNonce = intl.getNonce(); %> <%@include file="summary.jsi" %> diff --git a/apps/routerconsole/jsp/css.jsi b/apps/routerconsole/jsp/css.jsi index 437bf015e..21dc7eecc 100644 --- a/apps/routerconsole/jsp/css.jsi +++ b/apps/routerconsole/jsp/css.jsi @@ -34,7 +34,7 @@ response.setHeader("X-Frame-Options", "SAMEORIGIN"); String conNonceParam = request.getParameter("consoleNonce"); - if (conNonceParam != null && conNonceParam.equals(System.getProperty("router.consoleNonce"))) { + if (intl.getNonce().equals(conNonceParam)) { intl.setLang(request.getParameter("lang")); intl.setNews(request.getParameter("news")); } diff --git a/apps/routerconsole/jsp/home.jsp b/apps/routerconsole/jsp/home.jsp index 0971ac868..4423bed83 100644 --- a/apps/routerconsole/jsp/home.jsp +++ b/apps/routerconsole/jsp/home.jsp @@ -8,11 +8,7 @@ <%@include file="summaryajax.jsi" %> <% - String consoleNonce = System.getProperty("router.consoleNonce"); - if (consoleNonce == null) { - consoleNonce = Long.toString(new java.util.Random().nextLong()); - System.setProperty("router.consoleNonce", consoleNonce); - } + String consoleNonce = intl.getNonce(); %> " />