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 71089ce73..9fa61080d 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/FormHandler.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/FormHandler.java @@ -26,6 +26,8 @@ public class FormHandler { private final List _notices; private boolean _processed; private boolean _valid; + private static final String NONCE_SUFFIX = ".nonce"; + private static final String PREV_SUFFIX = "Prev"; public FormHandler() { _errors = new ArrayList(); @@ -162,8 +164,8 @@ public class FormHandler { return; } - String nonce = System.getProperty(getClass().getName() + ".nonce"); - String noncePrev = System.getProperty(getClass().getName() + ".noncePrev"); + String nonce = System.getProperty(getClass().getName() + NONCE_SUFFIX); + String noncePrev = nonce + PREV_SUFFIX; if ( ( (nonce == null) || (!_nonce.equals(nonce)) ) && ( (noncePrev == null) || (!_nonce.equals(noncePrev)) ) ) { @@ -201,6 +203,22 @@ public class FormHandler { } } + /** + * Generate a new nonce, store old and new in the system properties. + * Only call once per page! + * @return a new random long as a String + * @since 0.8.5 + */ + public String getNewNonce() { + String prop = getClass().getName() + NONCE_SUFFIX; + String prev = System.getProperty(prop); + if (prev != null) + System.setProperty(prop + PREV_SUFFIX, prev); + String rv = Long.toString(_context.random().nextLong()); + System.setProperty(prop, rv); + return rv; + } + /** translate a string */ public String _(String s) { return Messages.getString(s, _context); diff --git a/apps/routerconsole/jsp/config.jsp b/apps/routerconsole/jsp/config.jsp index 74f1bf465..83548e6a3 100644 --- a/apps/routerconsole/jsp/config.jsp +++ b/apps/routerconsole/jsp/config.jsp @@ -22,10 +22,7 @@
- <% String prev = System.getProperty("net.i2p.router.web.ConfigNetHandler.nonce"); - if (prev != null) System.setProperty("net.i2p.router.web.ConfigNetHandler.noncePrev", prev); - System.setProperty("net.i2p.router.web.ConfigNetHandler.nonce", new java.util.Random().nextLong()+""); %> - " > + " >

<%=intl._("Bandwidth limiter")%>

<%=intl._("I2P will work best if you configure your rates to match the speed of your internet connection.")%> diff --git a/apps/routerconsole/jsp/configadvanced.jsp b/apps/routerconsole/jsp/configadvanced.jsp index a327c0290..9acfd65ec 100644 --- a/apps/routerconsole/jsp/configadvanced.jsp +++ b/apps/routerconsole/jsp/configadvanced.jsp @@ -25,10 +25,7 @@

- <% String prev = System.getProperty("net.i2p.router.web.ConfigAdvancedHandler.nonce"); - if (prev != null) System.setProperty("net.i2p.router.web.ConfigAdvancedHandler.noncePrev", prev); - System.setProperty("net.i2p.router.web.ConfigAdvancedHandler.nonce", new java.util.Random().nextLong()+""); %> - " > + " >

<%=intl._("Advanced I2P Configuration")%>



diff --git a/apps/routerconsole/jsp/configclients.jsp b/apps/routerconsole/jsp/configclients.jsp index c106352ea..9d74d4990 100644 --- a/apps/routerconsole/jsp/configclients.jsp +++ b/apps/routerconsole/jsp/configclients.jsp @@ -28,10 +28,9 @@ button span.hide{
- <% String prev = System.getProperty("net.i2p.router.web.ConfigClientsHandler.nonce"); - if (prev != null) System.setProperty("net.i2p.router.web.ConfigClientsHandler.noncePrev", prev); - String pageNonce = Long.toString(new java.util.Random().nextLong()); - System.setProperty("net.i2p.router.web.ConfigClientsHandler.nonce", pageNonce); %> +<% + String pageNonce = formhandler.getNewNonce(); +%>

<%=intl._("Client Configuration")%>

<%=intl._("The Java clients listed below are started by the router and run in the same JVM.")%>

diff --git a/apps/routerconsole/jsp/configkeyring.jsp b/apps/routerconsole/jsp/configkeyring.jsp index 7438f5580..9188f56df 100644 --- a/apps/routerconsole/jsp/configkeyring.jsp +++ b/apps/routerconsole/jsp/configkeyring.jsp @@ -27,10 +27,7 @@

- <% String prev = System.getProperty("net.i2p.router.web.ConfigKeyringHandler.nonce"); - if (prev != null) System.setProperty("net.i2p.router.web.ConfigKeyringHandler.noncePrev", prev); - System.setProperty("net.i2p.router.web.ConfigKeyringHandler.nonce", new java.util.Random().nextLong()+""); %> - " > + " >

<%=intl._("Manual Keyring Addition")%>

<%=intl._("Enter keys for encrypted remote destinations here.")%> <%=intl._("Keys for local destinations must be entered on the")%> <%=intl._("I2PTunnel page")%>. diff --git a/apps/routerconsole/jsp/configlogging.jsp b/apps/routerconsole/jsp/configlogging.jsp index bd80b8086..4c5904a90 100644 --- a/apps/routerconsole/jsp/configlogging.jsp +++ b/apps/routerconsole/jsp/configlogging.jsp @@ -21,10 +21,7 @@

- <% String prev = System.getProperty("net.i2p.router.web.ConfigLoggingHandler.nonce"); - if (prev != null) System.setProperty("net.i2p.router.web.ConfigLoggingHandler.noncePrev", prev); - System.setProperty("net.i2p.router.web.ConfigLoggingHandler.nonce", new java.util.Random().nextLong()+""); %> - " > + " >

<%=intl._("Configure I2P Logging Options")%>

diff --git a/apps/routerconsole/jsp/configpeer.jsp b/apps/routerconsole/jsp/configpeer.jsp index 188ca56d4..f3a7097e6 100644 --- a/apps/routerconsole/jsp/configpeer.jsp +++ b/apps/routerconsole/jsp/configpeer.jsp @@ -29,10 +29,7 @@ %>
- <% String prev = System.getProperty("net.i2p.router.web.ConfigPeerHandler.nonce"); - if (prev != null) System.setProperty("net.i2p.router.web.ConfigPeerHandler.noncePrev", prev); - System.setProperty("net.i2p.router.web.ConfigPeerHandler.nonce", new java.util.Random().nextLong()+""); %> - " /> + " > diff --git a/apps/routerconsole/jsp/configreseed.jsp b/apps/routerconsole/jsp/configreseed.jsp index 593e410d3..87707444a 100644 --- a/apps/routerconsole/jsp/configreseed.jsp +++ b/apps/routerconsole/jsp/configreseed.jsp @@ -23,10 +23,7 @@
-<% String prev = System.getProperty("net.i2p.router.web.ConfigReseedHandler.nonce"); - if (prev != null) System.setProperty("net.i2p.router.web.ConfigReseedHandler.noncePrev", prev); - System.setProperty("net.i2p.router.web.ConfigReseedHandler.nonce", new java.util.Random().nextLong()+""); %> -" > +" >

<%=intl._("Reseeding Configuration")%>

<%=intl._("Reseeding is the bootstrapping process used to find other routers when you first install I2P, or when your router has too few router references remaining.")%> <%=intl._("If reseeding has failed, you should first check your network connection.")%> diff --git a/apps/routerconsole/jsp/configservice.jsp b/apps/routerconsole/jsp/configservice.jsp index d6864e5fb..21990fc0f 100644 --- a/apps/routerconsole/jsp/configservice.jsp +++ b/apps/routerconsole/jsp/configservice.jsp @@ -19,10 +19,7 @@

- <% String prev = System.getProperty("net.i2p.router.web.ConfigServiceHandler.nonce"); - if (prev != null) System.setProperty("net.i2p.router.web.ConfigServiceHandler.noncePrev", prev); - System.setProperty("net.i2p.router.web.ConfigServiceHandler.nonce", new java.util.Random().nextLong()+""); %> - " > + " >

<%=intl._("Shutdown the router")%>

<%=intl._("Graceful shutdown lets the router satisfy the agreements it has already made before shutting down, but may take a few minutes.")%> <%=intl._("If you need to kill the router immediately, that option is available as well.")%>

diff --git a/apps/routerconsole/jsp/configstats.jsp b/apps/routerconsole/jsp/configstats.jsp index fde10837d..4e6a4af97 100644 --- a/apps/routerconsole/jsp/configstats.jsp +++ b/apps/routerconsole/jsp/configstats.jsp @@ -67,11 +67,8 @@ function toggleAll(category) " />
- <% String prev = System.getProperty("net.i2p.router.web.ConfigStatsHandler.nonce"); - if (prev != null) System.setProperty("net.i2p.router.web.ConfigStatsHandler.noncePrev", prev); - System.setProperty("net.i2p.router.web.ConfigStatsHandler.nonce", new java.util.Random().nextLong()+""); %> - " > + " >

<%=intl._("Configure I2P Stat Collection")%>

<%=intl._("Enable full stats?")%>

- <% String prev = System.getProperty("net.i2p.router.web.ConfigTunnelsHandler.nonce"); - if (prev != null) System.setProperty("net.i2p.router.web.ConfigTunnelsHandler.noncePrev", prev); - System.setProperty("net.i2p.router.web.ConfigTunnelsHandler.nonce", new java.util.Random().nextLong()+""); %> - " > + " > <%=intl._("Note")%>: <%=intl._("Exploratory tunnel setting changes are stored in the router.config file.")%> diff --git a/apps/routerconsole/jsp/configui.jsp b/apps/routerconsole/jsp/configui.jsp index 9f3d32e4f..e67b11340 100644 --- a/apps/routerconsole/jsp/configui.jsp +++ b/apps/routerconsole/jsp/configui.jsp @@ -24,10 +24,16 @@

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

- <% String prev = System.getProperty("net.i2p.router.web.ConfigUIHandler.nonce"); - if (prev != null) System.setProperty("net.i2p.router.web.ConfigUIHandler.noncePrev", prev); - System.setProperty("net.i2p.router.web.ConfigUIHandler.nonce", new java.util.Random().nextLong()+""); %> - " > +<% + /** 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); + } +%> + + " > <% String userAgent = request.getHeader("User-Agent"); diff --git a/apps/routerconsole/jsp/configupdate.jsp b/apps/routerconsole/jsp/configupdate.jsp index 47b8b9310..4b1bf4bc6 100644 --- a/apps/routerconsole/jsp/configupdate.jsp +++ b/apps/routerconsole/jsp/configupdate.jsp @@ -23,10 +23,7 @@
- <% String prev = System.getProperty("net.i2p.router.web.ConfigUpdateHandler.nonce"); - if (prev != null) System.setProperty("net.i2p.router.web.ConfigUpdateHandler.noncePrev", prev); - System.setProperty("net.i2p.router.web.ConfigUpdateHandler.nonce", new java.util.Random().nextLong()+""); %> - " > + " > <% /* set hidden default */ %>

<%=intl._("Check for I2P and news updates")%>