* Console:

- Use CSS for form messages
      - Goodbye nonce spoof message
      - tunnels.jsp improvements
This commit is contained in:
zzz
2009-05-26 20:04:20 +00:00
parent 32dddac75b
commit 2f1d6e3f90
17 changed files with 88 additions and 34 deletions

View File

@ -145,7 +145,7 @@ public class IndexBean {
if ( (_action == null) || (_action.trim().length() <= 0) || ("Cancel".equals(_action)))
return "";
if ( (_prevNonce != _curNonce) && (!validPassphrase(_passphrase)) )
return "Invalid nonce, are you being spoofed?";
return "Invalid form submission, probably because you used the 'back' or 'reload' button on your browser. Please resubmit.";
if ("Stop all".equals(_action))
return stopAll();
else if ("Start all".equals(_action))

View File

@ -12,7 +12,7 @@ import net.i2p.util.Log;
* <jsp:setProperty name="handler" property="*" />
*
* The form is "processed" after the properties are set and the first output
* property is retrieved - either getNotices() or getErrors().
* property is retrieved - either getAll(), getNotices() or getErrors().
*
*/
public class FormHandler {
@ -21,8 +21,8 @@ public class FormHandler {
private String _nonce;
protected String _action;
protected String _passphrase;
private List _errors;
private List _notices;
private List<String> _errors;
private List<String> _notices;
private boolean _processed;
private boolean _valid;
@ -78,6 +78,31 @@ public class FormHandler {
_notices.add(msg);
}
/**
* Display everything, wrap it in a div for consistent presentation
*
*/
public String getAllMessages() {
validate();
process();
if (_errors.size() <= 0 && _notices.size() <= 0)
return "";
StringBuffer buf = new StringBuffer(512);
buf.append("<div class=\"messages\" id=\"messages\"><p>");
if (_errors.size() > 0) {
buf.append("<span class=\"error\">");
buf.append(render(_errors));
buf.append("</span>");
}
if (_notices.size() > 0) {
buf.append("<span class=\"notice\">");
buf.append(render(_notices));
buf.append("</span>");
}
buf.append("</p></div>");
return buf.toString();
}
/**
* Display any error messages (processing the form if it hasn't
* been yet)
@ -85,6 +110,7 @@ public class FormHandler {
*/
public String getErrors() {
validate();
process();
return render(_errors);
}
@ -95,6 +121,7 @@ public class FormHandler {
*/
public String getNotices() {
validate();
process();
return render(_notices);
}
@ -133,28 +160,29 @@ public class FormHandler {
if ( (expected != null) && (expected.trim().length() > 0) && (expected.equals(_passphrase)) ) {
// ok
} else {
addFormError("Invalid nonce, are you being spoofed?");
addFormError("Invalid form submission, probably because you used the 'back' or 'reload' button on your browser. Please resubmit.");
_valid = false;
}
}
}
private String render(List source) {
private void process() {
if (!_processed) {
if (_valid)
processForm();
_processed = true;
}
}
private String render(List<String> source) {
if (source.size() <= 0) {
return "";
} else if (source.size() == 1) {
return (String)source.get(0);
} else {
StringBuffer buf = new StringBuffer(512);
buf.append("<ul>\n");
for (int i = 0; i < source.size(); i++) {
buf.append("<li>");
buf.append((String)source.get(i));
buf.append(source.get(i));
buf.append("</li>\n");
}
buf.append("</ul>\n");

View File

@ -18,8 +18,7 @@
<jsp:useBean class="net.i2p.router.web.ConfigNetHandler" id="formhandler" scope="request" />
<jsp:setProperty name="formhandler" property="*" />
<jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<font color="red"><jsp:getProperty name="formhandler" property="errors" /></font>
<i><jsp:getProperty name="formhandler" property="notices" /></i>
<jsp:getProperty name="formhandler" property="allMessages" />
<form action="config.jsp" method="POST">
<% String prev = System.getProperty("net.i2p.router.web.ConfigNetHandler.nonce");
@ -116,7 +115,7 @@
%>
<br />
<input type="radio" name="udpAutoIP" value="hidden" <%=nethelper.getUdpAutoIPChecked(2) %> />
Hidden mode - do not publish IP<i>(prevents participating traffic; change restarts router)</i><br />
Hidden mode - do not publish IP <i>(prevents participating traffic; change restarts router)</i><br />
</p><p>
<b>UDP Configuration:</b><br />
UDP port:

View File

@ -19,8 +19,7 @@
<jsp:useBean class="net.i2p.router.web.ConfigAdvancedHandler" id="formhandler" scope="request" />
<jsp:setProperty name="formhandler" property="*" />
<jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<font color="red"><jsp:getProperty name="formhandler" property="errors" /></font>
<i><jsp:getProperty name="formhandler" property="notices" /></i>
<jsp:getProperty name="formhandler" property="allMessages" />
<form action="configadvanced.jsp" method="POST">
<% String prev = System.getProperty("net.i2p.router.web.ConfigAdvancedHandler.nonce");

View File

@ -26,8 +26,7 @@ button span.hide{
<jsp:setProperty name="formhandler" property="action" value="<%=request.getParameter("action")%>" />
<jsp:setProperty name="formhandler" property="nonce" value="<%=request.getParameter("nonce")%>" />
<jsp:setProperty name="formhandler" property="settings" value="<%=request.getParameterMap()%>" />
<font color="red"><jsp:getProperty name="formhandler" property="errors" /></font>
<i><jsp:getProperty name="formhandler" property="notices" /></i>
<jsp:getProperty name="formhandler" property="allMessages" />
<form action="configclients.jsp" method="POST">
<% String prev = System.getProperty("net.i2p.router.web.ConfigClientsHandler.nonce");

View File

@ -16,8 +16,7 @@
<jsp:useBean class="net.i2p.router.web.ConfigKeyringHandler" id="formhandler" scope="request" />
<jsp:setProperty name="formhandler" property="*" />
<jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<font color="red"><jsp:getProperty name="formhandler" property="errors" /></font>
<i><jsp:getProperty name="formhandler" property="notices" /></i>
<jsp:getProperty name="formhandler" property="allMessages" />

View File

@ -18,8 +18,7 @@
<jsp:useBean class="net.i2p.router.web.ConfigLoggingHandler" id="formhandler" scope="request" />
<jsp:setProperty name="formhandler" property="*" />
<jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<font color="red"><jsp:getProperty name="formhandler" property="errors" /></font>
<i><jsp:getProperty name="formhandler" property="notices" /></i>
<jsp:getProperty name="formhandler" property="allMessages" />
<form action="configlogging.jsp" method="POST">
<% String prev = System.getProperty("net.i2p.router.web.ConfigLoggingHandler.nonce");

View File

@ -16,8 +16,7 @@
<jsp:useBean class="net.i2p.router.web.ConfigPeerHandler" id="formhandler" scope="request" />
<jsp:setProperty name="formhandler" property="*" />
<jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<font color="red"><jsp:getProperty name="formhandler" property="errors" /></font>
<i><jsp:getProperty name="formhandler" property="notices" /></i>
<jsp:getProperty name="formhandler" property="allMessages" />

View File

@ -16,8 +16,7 @@
<jsp:useBean class="net.i2p.router.web.ConfigServiceHandler" id="formhandler" scope="request" />
<jsp:setProperty name="formhandler" property="*" />
<jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<font color="red"><jsp:getProperty name="formhandler" property="errors" /></font>
<i><jsp:getProperty name="formhandler" property="notices" /></i>
<jsp:getProperty name="formhandler" property="allMessages" />
<form action="configservice.jsp" method="POST">
<% String prev = System.getProperty("net.i2p.router.web.ConfigServiceHandler.nonce");

View File

@ -61,8 +61,7 @@ function toggleAll(category)
<jsp:useBean class="net.i2p.router.web.ConfigStatsHandler" id="formhandler" scope="request" />
<jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<jsp:setProperty name="formhandler" property="*" />
<font color="red"><jsp:getProperty name="formhandler" property="errors" /></font>
<i><jsp:getProperty name="formhandler" property="notices" /></i>
<jsp:getProperty name="formhandler" property="allMessages" />
<jsp:useBean class="net.i2p.router.web.ConfigStatsHelper" id="statshelper" scope="request" />
<jsp:setProperty name="statshelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />

View File

@ -22,8 +22,7 @@
<jsp:setProperty name="formhandler" property="action" value="<%=request.getParameter("action")%>" />
<jsp:setProperty name="formhandler" property="nonce" value="<%=request.getParameter("nonce")%>" />
<jsp:setProperty name="formhandler" property="settings" value="<%=request.getParameterMap()%>" />
<font color="red"><jsp:getProperty name="formhandler" property="errors" /></font>
<i><jsp:getProperty name="formhandler" property="notices" /></i>
<jsp:getProperty name="formhandler" property="allMessages" />
<p><i>
NOTE: The default settings work for most people.

View File

@ -16,8 +16,7 @@
<jsp:useBean class="net.i2p.router.web.ConfigUpdateHandler" id="formhandler" scope="request" />
<jsp:setProperty name="formhandler" property="*" />
<jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<font color="red"><jsp:getProperty name="formhandler" property="errors" /></font>
<i><jsp:getProperty name="formhandler" property="notices" /></i>
<jsp:getProperty name="formhandler" property="allMessages" />
<jsp:useBean class="net.i2p.router.web.ConfigUpdateHelper" id="updatehelper" scope="request" />
<jsp:setProperty name="updatehelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />

View File

@ -89,9 +89,24 @@ div.news {
}
div.confignav {
padding: 1em;
background-color: #efefff;
}
div.configure {
padding: 1em;
background-color: #ffffc0;
}
div.messages {
padding: 1em;
background-color: #fafaff;
}
div.messages span.error {
color: #d00000;
}
div.messages span.notice {
font-style: italic;
}

View File

@ -270,7 +270,7 @@ public class AddressbookBean
}
}
else {
message += "Invalid nonce. Are you being spoofed?";
message = "Invalid form submission, probably because you used the 'back' or 'reload' button on your browser. Please resubmit.";
}
}

View File

@ -142,7 +142,7 @@ public class ConfigBean implements Serializable {
}
}
else {
message = "Invalid nonce. Are you being spoofed?";
message = "Invalid form submission, probably because you used the 'back' or 'reload' button on your browser. Please resubmit.";
}
}
if( message.length() > 0 )

View File

@ -136,7 +136,7 @@ public class SubscriptionsBean
}
}
else {
message = "Invalid nonce. Are you being spoofed?";
message = "Invalid form submission, probably because you used the 'back' or 'reload' button on your browser. Please resubmit.";
}
}
if( message.length() > 0 )

View File

@ -523,8 +523,25 @@ public class TunnelPoolManager implements TunnelManagerFacade {
long processedIn = (in != null ? in.getLifetimeProcessed() : 0);
long processedOut = (outPool != null ? outPool.getLifetimeProcessed() : 0);
out.write("<table border=\"1\"><tr><td><b>Direction</b></td><td><b>Expiration</b></td><td><b>Usage</b></td><td align=\"left\">Hops (gateway first)</td></tr>\n");
int live = 0;
int maxLength = 1;
for (int i = 0; i < tunnels.size(); i++) {
TunnelInfo info = (TunnelInfo)tunnels.get(i);
if (info.getLength() > maxLength)
maxLength = info.getLength();
}
out.write("<table border=\"1\"><tr><th>Direction</th><th>Expiration</th><th>Usage</th><th>Gateway</th>");
if (maxLength > 3) {
out.write("<th align=\"center\" colspan=\"" + (maxLength - 2));
out.write("\">Participants</th>");
}
else if (maxLength == 3) {
out.write("<th>Participant</th>");
}
if (maxLength > 1) {
out.write("<th>Endpoint</th>");
}
out.write("</tr>\n");
for (int i = 0; i < tunnels.size(); i++) {
TunnelInfo info = (TunnelInfo)tunnels.get(i);
long timeLeft = info.getExpiration()-_context.clock().now();
@ -546,6 +563,10 @@ public class TunnelPoolManager implements TunnelManagerFacade {
String cap = getCapacity(peer);
out.write("<td>" + netDbLink(peer) + (id == null ? "" : " " + id) + cap + "</td>");
}
if (info.getLength() < maxLength && (info.getLength() == 1 || j == info.getLength() - 2)) {
for (int k = info.getLength(); k < maxLength; k++)
out.write("<td>&nbsp</td>");
}
}
out.write("</tr>\n");