* Console:

- Fix NPE after restart (ticket #763)
   - Move more nonces out of system properties
This commit is contained in:
zzz
2012-11-05 17:17:31 +00:00
parent 202c92a42d
commit d5c70676b0
10 changed files with 37 additions and 38 deletions

View File

@ -3,6 +3,8 @@ package net.i2p.router.web;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import net.i2p.util.RandomSource;
/** /**
* Copied and modded from I2PTunnel IndexBean (GPL) * Copied and modded from I2PTunnel IndexBean (GPL)
* @author zzz * @author zzz
@ -11,8 +13,6 @@ public class CSSHelper extends HelperBase {
private static final Map<String, Boolean> _UACache = new ConcurrentHashMap(); private static final Map<String, Boolean> _UACache = new ConcurrentHashMap();
public CSSHelper() {}
public static final String PROP_UNIVERSAL_THEMING = "routerconsole.universal.theme"; public static final String PROP_UNIVERSAL_THEMING = "routerconsole.universal.theme";
public static final String PROP_THEME_NAME = "routerconsole.theme"; public static final String PROP_THEME_NAME = "routerconsole.theme";
public static final String DEFAULT_THEME = "light"; 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"; public static final String PROP_DISABLE_REFRESH = "routerconsole.summaryDisableRefresh";
private static final String PROP_XFRAME = "routerconsole.disableXFrame"; 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) { public String getTheme(String userAgent) {
String url = BASE_THEME_PATH; String url = BASE_THEME_PATH;
if (userAgent != null && userAgent.contains("MSIE")) { if (userAgent != null && userAgent.contains("MSIE")) {

View File

@ -3,6 +3,7 @@ package net.i2p.router.web;
import net.i2p.data.DataHelper; import net.i2p.data.DataHelper;
import net.i2p.router.Router; import net.i2p.router.Router;
import net.i2p.router.RouterContext; import net.i2p.router.RouterContext;
import net.i2p.util.RandomSource;
/** /**
* simple helper to control restarts/shutdowns in the left hand nav * 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. /** all these are tagged below so no need to _x them here.
* order is: form value, form class, display text. * order is: form value, form class, display text.
*/ */
static final String[] SET1 = {"shutdownImmediate", "stop", "Shutdown immediately", "cancelShutdown", "cancel", "Cancel shutdown"}; private static final String[] SET1 = {"shutdownImmediate", "stop", "Shutdown immediately", "cancelShutdown", "cancel", "Cancel shutdown"};
static final String[] SET2 = {"restartImmediate", "reload", "Restart immediately", "cancelShutdown", "cancel", "Cancel restart"}; private static final String[] SET2 = {"restartImmediate", "reload", "Restart immediately", "cancelShutdown", "cancel", "Cancel restart"};
static final String[] SET3 = {"restart", "reload", "Restart", "shutdown", "stop", "Shutdown"}; private static final String[] SET3 = {"restart", "reload", "Restart", "shutdown", "stop", "Shutdown"};
static final String[] SET4 = {"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() { public static String getNonce() {
RouterContext ctx = ContextHelper.getContext(null); return _systemNonce;
String nonce = System.getProperty("console.nonce");
if (nonce == null) {
nonce = ""+ctx.random().nextLong();
System.setProperty("console.nonce", nonce);
}
return nonce;
} }
public static String renderStatus(String urlBase, String action, String nonce) { public static String renderStatus(String urlBase, String action, String nonce) {
RouterContext ctx = ContextHelper.getContext(null); RouterContext ctx = ContextHelper.getContext(null);
String systemNonce = getNonce(); String systemNonce = getNonce();

View File

@ -194,8 +194,8 @@ public class FormHandler {
return; return;
} }
String sharedNonce = System.getProperty("router.consoleNonce"); String sharedNonce = CSSHelper.getNonce();
if ( (sharedNonce != null) && (sharedNonce.equals(_nonce) ) ) { if (sharedNonce.equals(_nonce)) {
return; return;
} }

View File

@ -212,7 +212,7 @@ public class NewsHelper extends ContentHelper {
ctx)); ctx));
} }
buf.append("</i>"); buf.append("</i>");
String consoleNonce = System.getProperty("router.consoleNonce"); String consoleNonce = CSSHelper.getNonce();
if (lastUpdated > 0 && consoleNonce != null) { if (lastUpdated > 0 && consoleNonce != null) {
if (shouldShowNews(ctx)) { if (shouldShowNews(ctx)) {
buf.append(" <a href=\"/?news=0&amp;consoleNonce=").append(consoleNonce).append("\">") buf.append(" <a href=\"/?news=0&amp;consoleNonce=").append(consoleNonce).append("\">")

View File

@ -606,7 +606,7 @@ public class SummaryBarRenderer {
NewsHelper newshelper = _helper.getNewsHelper(); NewsHelper newshelper = _helper.getNewsHelper();
if (newshelper == null || newshelper.shouldShowNews()) return ""; if (newshelper == null || newshelper.shouldShowNews()) return "";
StringBuilder buf = new StringBuilder(512); StringBuilder buf = new StringBuilder(512);
String consoleNonce = System.getProperty("router.consoleNonce"); String consoleNonce = CSSHelper.getNonce();
if (consoleNonce != null) { if (consoleNonce != null) {
// Set up title and pre-headings stuff. // Set up title and pre-headings stuff.
buf.append("<h3><a href=\"/configupdate\">") buf.append("<h3><a href=\"/configupdate\">")

View File

@ -809,7 +809,13 @@ public class SummaryHelper extends HelperBase {
private String _requestURI; private String _requestURI;
public void setRequestURI(String s) { _requestURI = s; } 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() { public String getConfigTable() {
String[] allSections = SummaryBarRenderer.ALL_SECTIONS; String[] allSections = SummaryBarRenderer.ALL_SECTIONS;

View File

@ -31,15 +31,7 @@ input.default {
<%@include file="formhandler.jsi" %> <%@include file="formhandler.jsi" %>
<div class="configure"><div class="topshimten"><h3><%=uihelper._("Router Console Theme")%></h3></div> <div class="configure"><div class="topshimten"><h3><%=uihelper._("Router Console Theme")%></h3></div>
<form action="" method="POST"> <form action="" method="POST">
<% <input type="hidden" name="consoleNonce" value="<%=intl.getNonce()%>" >
/** 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);
}
%>
<input type="hidden" name="consoleNonce" value="<%=consoleNonce%>" >
<input type="hidden" name="nonce" value="<%=pageNonce%>" > <input type="hidden" name="nonce" value="<%=pageNonce%>" >
<input type="hidden" name="action" value="blah" > <input type="hidden" name="action" value="blah" >
<% <%

View File

@ -10,11 +10,7 @@
<%@include file="summaryajax.jsi" %> <%@include file="summaryajax.jsi" %>
</head><body onload="initAjax()"> </head><body onload="initAjax()">
<% <%
String consoleNonce = System.getProperty("router.consoleNonce"); String consoleNonce = intl.getNonce();
if (consoleNonce == null) {
consoleNonce = Long.toString(new java.util.Random().nextLong());
System.setProperty("router.consoleNonce", consoleNonce);
}
%> %>
<%@include file="summary.jsi" %> <%@include file="summary.jsi" %>

View File

@ -34,7 +34,7 @@
response.setHeader("X-Frame-Options", "SAMEORIGIN"); response.setHeader("X-Frame-Options", "SAMEORIGIN");
String conNonceParam = request.getParameter("consoleNonce"); 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.setLang(request.getParameter("lang"));
intl.setNews(request.getParameter("news")); intl.setNews(request.getParameter("news"));
} }

View File

@ -8,11 +8,7 @@
<%@include file="summaryajax.jsi" %> <%@include file="summaryajax.jsi" %>
</head><body onload="initAjax()"> </head><body onload="initAjax()">
<% <%
String consoleNonce = System.getProperty("router.consoleNonce"); String consoleNonce = intl.getNonce();
if (consoleNonce == null) {
consoleNonce = Long.toString(new java.util.Random().nextLong());
System.setProperty("router.consoleNonce", consoleNonce);
}
%> %>
<jsp:useBean class="net.i2p.router.web.NewsHelper" id="newshelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.NewsHelper" id="newshelper" scope="request" />
<jsp:setProperty name="newshelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> <jsp:setProperty name="newshelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />