diff --git a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java index b249f7296..56094e26e 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java +++ b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java @@ -1073,7 +1073,7 @@ public class SnarkManager implements CompleteListener { if (theme != null) { if(!theme.equals(_config.getProperty(PROP_THEME))) { _config.setProperty(PROP_THEME, theme); - addMessage(_t("{0} theme loaded, return to main i2psnark page to view.", theme)); + addMessage(_t("{0} theme loaded.", theme)); changed = true; } } diff --git a/apps/i2psnark/java/src/org/klomp/snark/dht/DHTNodes.java b/apps/i2psnark/java/src/org/klomp/snark/dht/DHTNodes.java index 820709069..55778eea2 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/dht/DHTNodes.java +++ b/apps/i2psnark/java/src/org/klomp/snark/dht/DHTNodes.java @@ -138,7 +138,7 @@ class DHTNodes { * @since 0.9.4 */ public void renderStatusHTML(StringBuilder buf) { - buf.append(_kad.toString().replace("\n", "
\n")); + buf.append(_kad.toString().replace("\n", "

\n")); } /** */ diff --git a/apps/i2psnark/java/src/org/klomp/snark/dht/KRPC.java b/apps/i2psnark/java/src/org/klomp/snark/dht/KRPC.java index 27325ee6f..75d9cadac 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/dht/KRPC.java +++ b/apps/i2psnark/java/src/org/klomp/snark/dht/KRPC.java @@ -679,7 +679,7 @@ public class KRPC implements I2PSessionMuxedListener, DHT { public String renderStatusHTML() { long uptime = Math.max(1000, _context.clock().now() - _started); StringBuilder buf = new StringBuilder(256); - buf.append("
DHT DEBUG
TX: ").append(_txPkts.get()).append(" pkts / ") + buf.append("

DHT DEBUG

TX: ").append(_txPkts.get()).append(" pkts / ") .append(DataHelper.formatSize2(_txBytes.get())).append("B / ") .append(DataHelper.formatSize2(_txBytes.get() * 1000 / uptime)).append("Bps
" + "RX: ").append(_rxPkts.get()).append(" pkts / ") @@ -689,7 +689,7 @@ public class KRPC implements I2PSessionMuxedListener, DHT { "Blacklisted: ").append(_blacklist.size()).append("
" + "Sent tokens: ").append(_outgoingTokens.size()).append("
" + "Rcvd tokens: ").append(_incomingTokens.size()).append("
" + - "Pending queries: ").append(_sentQueries.size()).append("
"); + "Pending queries: ").append(_sentQueries.size()).append("

"); _tracker.renderStatusHTML(buf); _knownNodes.renderStatusHTML(buf); return buf.toString(); diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java index 8abc08554..4325d3acf 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java +++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java @@ -504,7 +504,7 @@ public class I2PSnarkServlet extends BasicServlet { : tx)); if (showSort) out.write(""); - out.write("\n"); + out.write("\n"); if (total > 0 && (start > 0 || total > pageSize)) { writePageNav(out, req, start, pageSize, total, noThinsp); } @@ -830,7 +830,7 @@ public class I2PSnarkServlet extends BasicServlet { out.write(""); - out.write(toThemeImg("control_rewind_blue", _t("First"), _t("First page"))); + out.write(toThemeImg("first", _t("First"), _t("First page"))); out.write(" "); int prev = Math.max(0, start - pageSize); //if (prev > 0) { @@ -840,16 +840,16 @@ public class I2PSnarkServlet extends BasicServlet { String sprev = (prev > 0) ? Integer.toString(prev) : ""; out.write(getQueryString(req, null, sprev, null)); out.write("\">"); - out.write(toThemeImg("control_back_blue", _t("Prev"), _t("Previous page"))); + out.write(toThemeImg("previous", _t("Prev"), _t("Previous page"))); out.write(" "); } } else { out.write( "\"\"" + + _imgPath + "first.png\">" + " " + "\"\"" + + _imgPath + "previous.png\">" + " "); } // Page count @@ -873,7 +873,7 @@ public class I2PSnarkServlet extends BasicServlet { out.write(" "); - out.write(toThemeImg("control_play_blue", _t("Next"), _t("Next page"))); + out.write(toThemeImg("next", _t("Next"), _t("Next page"))); out.write(" "); } // Last @@ -881,15 +881,15 @@ public class I2PSnarkServlet extends BasicServlet { out.write(" "); - out.write(toThemeImg("control_fastforward_blue", _t("Last"), _t("Last page"))); + out.write(toThemeImg("last", _t("Last"), _t("Last page"))); out.write(" "); } else { out.write(" " + "\"\"" + + _imgPath + "next.png\">" + " " + "\"\""); + _imgPath + "last.png\">"); } } @@ -2063,24 +2063,26 @@ public class I2PSnarkServlet extends BasicServlet { // *not* enctype="multipart/form-data", so that the input type=file sends the filename, not the file out.write("
\n"); writeHiddenInputs(out, req, "Add"); - out.write("
"); + out.write("
"); + out.write(""); - out.write("
\n
"); + out.write("
\n
"); out.write(_t("From URL")); out.write(": \n"); + out.write("\">\n"); // not supporting from file at the moment, since the file name passed isn't always absolute (so it may not resolve) //out.write("From file:
"); out.write("
\n" + - "
"); + out.write(_t("Data dir")); out.write(":
\n"); out.write(""); } - + private void writeSeedForm(PrintWriter out, HttpServletRequest req, List sortedTrackers) throws IOException { out.write("
\n"); // *not* enctype="multipart/form-data", so that the input type=file sends the filename, not the file out.write("
\n"); writeHiddenInputs(out, req, "Create"); - out.write(""); + out.write("
\n
"); + out.write("
\n + + + + + + + + + + + + + + + + + + + + + + + + + + <% if ("client".equals(tunnelType) || "ircclient".equals(tunnelType) || "socksirctunnel".equals(tunnelType) || "sockstunnel".equals(tunnelType)) { %> -
- -
-
- - class="tickbox" /> -
-
- - -
+ + + + + + + + <% String destb64 = editBean.getDestinationBase64(curTunnel); if (destb64.length() > 0) { - %>
- - -
-
- - <%=editBean.getDestHashBase32(curTunnel)%> -
- <% } // if destb64 %> + %> -
-
-
+ + + + + + + + + + + <% } // if destb64 %> <% } %> <% if ("httpclient".equals(tunnelType)) { %> -
- -
-
- - class="tickbox" /> -

-
- -
-
- - class="tickbox" /> -

-
- -
-
- - class="tickbox" /> -

-
- -
-
- - class="tickbox" /> -
-
-
-
+ + + + + + + + + + + + + + + <% } // if httpclient %> - + <% if (true /* editBean.isAdvanced() */ ) { int currentSigType = editBean.getSigType(curTunnel, tunnelType); %> -
- -
-
-
- - class="tickbox" /> -
+
+ + + + + + <% } // isAvailable %> - - -
-
-
+ <% } // isAdvanced %> <% if ("httpclient".equals(tunnelType) || "connectclient".equals(tunnelType) || "sockstunnel".equals(tunnelType) || "socksirctunnel".equals(tunnelType)) { %> -
- -
-
- - class="tickbox" /> -
-
- - -
-
- - -
-
-
-
-
- -
-
- - class="tickbox" /> -
-
- - -
-
- - -
-
-
-
+ + + + + + + + + + + + + + + + + + + + + + + + + <% } // httpclient || connect || socks || socksirc %> <% if ("httpclient".equals(tunnelType)) { %> -
- -
-
- -
-
-
-
+ + + + + + + + <% } // httpclient %> -
- - -
- - - -
-
-
+ + + + + + + + + + +
"); //out.write("From file:
\n"); out.write(_t("Data to seed")); out.write(":
" @@ -2112,20 +2114,23 @@ public class I2PSnarkServlet extends BasicServlet { + "\" spellcheck=\"false\" title=\""); out.write(_t("File or directory to seed (full path or within the directory {0} )", _manager.getDataDir().getAbsolutePath() + File.separatorChar)); - out.write("\" >
\n"); + out.write("\" > "); + out.write("
\n"); out.write(_t("Trackers")); - out.write(":
"); + out.write(":\n"); + out.write("\n"); + for (Tracker t : sortedTrackers) { String name = t.name; String announceURL = t.announceURL.replace("=", "="); + String homeURL = t.baseURL; out.write("\n"); + out.write("\" value=\"foo\">\n"); } out.write("
"); out.write(_t("Primary")); out.write(""); out.write(_t("Alternates")); - out.write("" + - " " + - "
"); + out.write(_t("Tracker URL")); + out.write("
"); out.write(name); out.write("
"); + out.write(homeURL); + out.write("
"); out.write(_t("none")); out.write("
\n"); + out.write(">
\n"); // make the user add a tracker on the config form now //out.write(_t("or")); //out.write("  - - + <% } %> - + <% if (editBean.isInitialized()) { @@ -41,19 +39,18 @@ input.default { width: 1px; height: 1px; visibility: hidden; } %> -
-
+
<% String tunnelTypeName; String tunnelType; if (curTunnel >= 0) { tunnelTypeName = editBean.getTunnelType(curTunnel); tunnelType = editBean.getInternalType(curTunnel); - %>

<%=intl._t("Edit proxy settings")%>

<% + %>

<%=intl._t("Edit proxy settings")%> (<%=editBean.getTunnelName(curTunnel)%>)

<% } else { tunnelTypeName = editBean.getTypeName(request.getParameter("type")); tunnelType = net.i2p.data.DataHelper.stripHTML(request.getParameter("type")); - %>

<%=intl._t("New proxy settings")%>

<% + %>

<%=intl._t("New proxy settings")%>

<% } %> @@ -79,70 +76,88 @@ input.default { width: 1px; height: 1px; visibility: hidden; } <% } %> -
- -
-
-
-
- - -
-
- - <%=tunnelTypeName%> -
-
- - -
- -
-
-
- -
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + <% - if ("streamrclient".equals(tunnelType)) { - out.write("Host:"); + if ("streamrclient".equals(tunnelType)) { %> + <% } else { %> - <%=intl._t("Reachable by")%>(R): - + + <% } /* streamrclient */ %> - + + <% if ("client".equals(tunnelType) || "ircclient".equals(tunnelType)) { - %>
-
+ + + + + <% } /* tunnel types */ %> -
-
-
- <% if ("httpclient".equals(tunnelType) || "connectclient".equals(tunnelType) || "sockstunnel".equals(tunnelType) || "socksirctunnel".equals(tunnelType)) { - %>
- - -
+ %> + + + + + + + <% if ("httpclient".equals(tunnelType)) { - %>
- - -
+ %> + + + + + + + <% } // httpclient %> -
- - class="tickbox" /> - <%=intl._t("(Check the Box for 'YES')")%> -
+ + + + + + <% } else if ("client".equals(tunnelType) || "ircclient".equals(tunnelType) || "streamrclient".equals(tunnelType)) { - %>
-
+ + + + + + <% } %> + <% if (!"streamrclient".equals(tunnelType)) { %> -
- - class="tickbox" /> - <%=intl._t("(Share tunnels with other clients and irc/httpclients? Change requires restart of client proxy)")%> -
+ + + + + + + <% } // !streamrclient %> -
- - class="tickbox" /> - <%=intl._t("(Check the Box for 'YES')")%> -
+ <% if ("ircclient".equals(tunnelType)) { %> -
- - class="tickbox" /> - <%=intl._t("(Check the Box for 'YES')")%> -
+ + + + + + + <% } // ircclient %> - - - +
+ <%=intl._t("Name")%> + + <%=intl._t("Type")%> +
+ + + <%=tunnelTypeName%> +
+ <%=intl._t("Description")%> + + <%=intl._t("Auto Start Tunnel")%> +
+ + + class="tickbox" /> + <%=intl._t("Automatically start tunnel when router starts")%> +
<% if ("streamrclient".equals(tunnelType)) { %> - + <%=intl._t("Target")%> <% } else { %> - + <%=intl._t("Access Point")%> <% } /* streamrclient */ %> - -
-
+ <%=intl._t("Port")%>: <% String value = editBean.getClientPort(curTunnel); if (value == null || "".equals(value.trim())) { - out.write(" ("); + out.write(" ("); out.write(intl._t("required")); - out.write(")"); + out.write(")"); } %> - - - -
-
+ <%=intl._t("Host")%>: + <% String targetHost = editBean.getTargetHost(curTunnel); if (targetHost == null || "".equals(targetHost.trim())) { - out.write(" ("); + out.write(" ("); out.write(intl._t("required")); - out.write(")"); + out.write(")"); } %> - - + + + + <%=intl._t("Reachable by")%>: + +
<%=intl._t("Use SSL?")%> - - class="tickbox" /> - +
+ class="tickbox" /> + <%=intl._t("Clients use SSL to connect to tunnel")%> +
+ <%=intl._t("Outproxies")%> +
+  (<%=intl._t("comma separated eg. proxy1.i2p,proxy2.i2p")%>) +
+ <%=intl._t("SSL Outproxies")%> +
+ +
+ <%=intl._t("Use Outproxy Plugin")%> + +
+ + class="tickbox" /> +<%=intl._t("Use plugin instead of above-listed proxies if available")%> +
+ <%=intl._t("Tunnel Destination")%> +
<% String value2 = editBean.getClientDestination(curTunnel); if (value2 == null || "".equals(value2.trim())) { - out.write(" ("); + out.write(" ("); out.write(intl._t("required")); - out.write(")"); + out.write(")"); } %> - - - (<%=intl._t("name, name:port, or destination")%> + + + (<%=intl._t("name, name:port, or destination")%> <% if ("streamrclient".equals(tunnelType)) { /* deferred resolution unimplemented in streamr client */ %> - <%=intl._t("b32 not recommended")%> <% } %> ) - - +
+ <%=intl._t("Shared Client")%> +
+ class="tickbox" /> + <%=intl._t("Share tunnels with other clients and irc/httpclients? (Change requires restart of client proxy tunnel)")%> +
+ <%=intl._t("Enable DCC")%> +
+ class="tickbox" /> + <%=intl._t("Enable Direct Client-to-Client protocol. Note that this will compromise your anonymity and is not recommended.")%> +
-
-
-

<%=intl._t("Advanced networking options")%>


- <%=intl._t("(NOTE: when this client proxy is configured to share tunnels, then these options are for all the shared proxy clients!)")%> -
+

<%=intl._t("Advanced Networking Options")%>

-
-
-
- -
- -
-
- + + + +<% if (!"streamrclient".equals(tunnelType)) { %> <% // no shared client tunnels for streamr %> + + + + <% } // !streamrclient %> + + + + + + + + + + + + + + + + + + + + + + + + + -
-
-
<% if (!"streamrclient".equals(tunnelType)) { %> -
- -
+ + + + + + + + -
-
-
+ + <% } // !streamrclient %> -
- -
-
- - readonly="readonly" <% } %> /> -
-
- - readonly="readonly" <% } %> /> -
+ + + + + + + + + + <% if (!"streamrclient".equals(tunnelType)) { // streamr client sends pings so it will never be idle %> -
-
-
-
- -
-
- - class="tickbox" /> -
+ + + + + + + + <% } // !streamrclient %> -
-
-
- -
- -
-
- - class="tickbox" /> -
-
- - -
-
- - -
- -
-
-
- -
- -
-
- - class="tickbox" /> -
-
- -
+ <%=intl._t("Note: When this client proxy is configured to share tunnels, then these options are for all the shared proxy clients!")%> +
+ <%=intl._t("Tunnel Options")%> +
+ <%=intl._t("Length")%> + + <%=intl._t("Variance")%> +
- -
- +
- -
- + %> +
+ <%=intl._t("Count")%> + + <%=intl._t("Backup Count")%> +
- -
- + +
- + %> +
+ <%=intl._t("Profile")%> + + <%=intl._t("Delay Connect")%> +
+ - -
- - class="tickbox" /> - (<%=intl._t("for request/response connections")%>) -
+
+ class="tickbox" /> + (<%=intl._t("for request/response connections")%>) +
+ <%=intl._t("Router I2CP Address")%> +
+ <%=intl._t("Host")%>: + readonly="readonly" <% } %> /> + + <%=intl._t("Port")%>: + readonly="readonly" <% } %> /> +
+ <%=intl._t("Delay tunnel open until required")%> +
+ class="tickbox" /> + <%=intl._t("Delay opening client tunnel until activity is detected on the configured tunnel port")%> +
- - - - -
class="tickbox" /><%=intl._t("Enable")%> class="tickbox" /><%=intl._t("Disable")%>
-
-
- - -
- -
-
-
+
+ <%=intl._t("Reduce tunnel quantity when idle")%> +
+ class="tickbox" /> + <%=intl._t("Reduce tunnel quantity when idle to conserve resources")%> +
+ <%=intl._t("Reduced tunnel count")%>: + + + <%=intl._t("Idle period")%>: + + minutes +
+ <%=intl._t("Close tunnels when idle")%> +
+ class="tickbox" /> + <%=intl._t("Close client tunnels after specified idle period")%> + + <%=intl._t("Idle period")%>: + + minutes +
+ <%=intl._t("New Keys on Reopen")%>: + class="tickbox" /> + <%=intl._t("Enable")%> + class="tickbox" /> + <%=intl._t("Disable")%> +
+ <%=intl._t("Persistent private key")%> +
+ class="tickbox" /> + <%=intl._t("Generate key to enable persistent client tunnel identity")%> + + <%=intl._t("File")%>: + +
+ <%=intl._t("Local destination")%> +
+ +
+ <%=intl._t("Local Base 32")%>: + <%=editBean.getDestHashBase32(curTunnel)%> +
+ <%=intl._t("HTTP Filtering")%> +
+ class="tickbox" /> + <%=intl._t("Do not spoof User-Agent header")%> + + class="tickbox" /> + <%=intl._t("Do not block Referer header")%> +
+ class="tickbox" /> +<%=intl._t("Do not block Accept headers")%> + + class="tickbox" /> + <%=intl._t("Allow SSL to I2P addresses")%> +
+ <%=intl._t("Signature type")%> (<%=intl._t("Experts only!")%>) +
+ + class="tickbox" /> + DSA-SHA1 + + + <% if (editBean.isSigTypeAvailable(1)) { %> -
- - class="tickbox" /> -
+ + + class="tickbox" /> + ECDSA-P256 + + + <% } + if (editBean.isSigTypeAvailable(2)) { %> -
- - class="tickbox" /> -
+ + + class="tickbox" /> + ECDSA-P384 + + <% } if (editBean.isSigTypeAvailable(3)) { %> -
- - class="tickbox" /> -
+ + + class="tickbox" /> + ECDSA-P521 + + + <% } if (editBean.isSigTypeAvailable(7)) { %> -
- - class="tickbox" /> -
+ + + class="tickbox" /> + Ed25519-SHA-512 + +
+ <%=intl._t("Local Authorization")%> +
+ class="tickbox" /> + <%=intl._t("Require local authorization for this service")%> +
+ <%=intl._t("Username")%>: + + + <%=intl._t("Password")%>: + +
+ <%=intl._t("Outproxy Authorization")%> +
+ class="tickbox" /> + <%=intl._t("Outproxy requires authorization")%> +
+ <%=intl._t("Username")%>: + + + <%=intl._t("Password")%>: + +
+ <%=intl._t("Jump URL List")%> +
+ +
+ <%=intl._t("Custom options")%> +
+ +
- - - - - - - + + +
+ + + <% } else { - %>Tunnels are not initialized yet, please reload in two minutes.<% + %>
<%=intl._t("Tunnels are not initialized yet, please reload in two minutes.")%>
<% } // isInitialized() %> diff --git a/apps/i2ptunnel/jsp/editServer.jsp b/apps/i2ptunnel/jsp/editServer.jsp index fe31926e0..c8153b688 100644 --- a/apps/i2ptunnel/jsp/editServer.jsp +++ b/apps/i2ptunnel/jsp/editServer.jsp @@ -23,8 +23,7 @@ <% if (editBean.allowCSS()) { %> - - + <% } %> - + <% if (editBean.isInitialized()) { @@ -41,19 +39,19 @@ input.default { width: 1px; height: 1px; visibility: hidden; } %>
-
-
+
+ <% String tunnelTypeName; String tunnelType; if (curTunnel >= 0) { tunnelTypeName = editBean.getTunnelType(curTunnel); tunnelType = editBean.getInternalType(curTunnel); - %>

<%=intl._t("Edit server settings")%>

<% + %>

<%=intl._t("Edit Server Settings")%> (<%=editBean.getTunnelName(curTunnel)%>)

<% } else { tunnelTypeName = editBean.getTypeName(request.getParameter("type")); tunnelType = net.i2p.data.DataHelper.stripHTML(request.getParameter("type")); - %>

<%=intl._t("New server settings")%>

<% + %>

<%=intl._t("New Server Settings")%>

<% } %> @@ -79,103 +77,115 @@ input.default { width: 1px; height: 1px; visibility: hidden; } <% } %> -
- -
-
-
-
- - -
-
- - <%=tunnelTypeName%> -
-
- - -
-
- - class="tickbox" /> - <%=intl._t("(Check the Box for 'YES')")%> -
- -
-
-
- -
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + <% if (!"streamrserver".equals(tunnelType)) { %> -
- - -
+ <% } /* !streamrserver */ %> -
-
+ <% if (!"streamrserver".equals(tunnelType)) { %> -
- - class="tickbox" /> -
+ + + + <% if ("httpbidirserver".equals(tunnelType)) { %> -
-
-
-
- -
-
-
+ + + + + + + <% } /* httpbidirserver */ %> <% if ("httpbidirserver".equals(tunnelType) || "streamrserver".equals(tunnelType)) { %> -
- + +
<% } /* httpbidirserver || streamrserver */ %> + -
-
-
<% if (("httpserver".equals(tunnelType)) || ("httpbidirserver".equals(tunnelType))) { - %>
- - - <%=intl._t("(leave blank for outproxies)")%> -
+ %> + + + + + + + + + + <% } - %>
-
+ + + + + + -
- - -
+ + + + + + + <% /****** @@ -248,7 +277,8 @@ input.default { width: 1px; height: 1px; visibility: hidden; } String b64 = editBean.getDestinationBase64(curTunnel); if (!"".equals(b64)) { %> -
+
+ <% b64 = b64.replace("=", "%3d"); String name = editBean.getSpoofedHost(curTunnel); @@ -256,46 +286,50 @@ input.default { width: 1px; height: 1px; visibility: hidden; } name = editBean.getTunnelName(curTunnel); if (name != null && !name.equals("") && !name.contains(" ") && name.endsWith(".i2p")) { %> - <% } else { %> - - <%=intl._t("Set name with .i2p suffix to enable QR code generation")%> - <%=intl._t("Set name with .i2p suffix to enable registration authentication")%> + <% } // name %> - + + <% } // b64 %> - - +
+ <%=intl._t("Name")%> + + <%=intl._t("Type")%> +
+ + + <%=tunnelTypeName%> +
+ <%=intl._t("Description")%> + + <%=intl._t("Auto Start Tunnel")%> +
+ + + class="tickbox" /> + <%=intl._t("Automatically start tunnel when router starts")%> +
<% if ("streamrserver".equals(tunnelType)) { %> - + <%=intl._t("Access Point")%> <% } else { %> - + <%=intl._t("Target")%> <% } %> - +
+ <%=intl._t("Host")%>: + + + <%=intl._t("Port")%>: <% String value = editBean.getTargetPort(curTunnel); if (value == null || "".equals(value.trim())) { - out.write(" ("); + out.write(" ("); out.write(intl._t("required")); - out.write(")"); + out.write(")"); } %> - - - + +
+ class="tickbox" /> + <%=intl._t("Use SSL to connect to target")%> <% } /* !streamrserver */ %> - +
+ <%=intl._t("Access Point")%> +
+ <%=intl._t("Port")%>: + <% String value4 = editBean.getClientPort(curTunnel); if (value4 == null || "".equals(value4.trim())) { - out.write(" ("); + out.write(" ("); out.write(intl._t("required")); - out.write(")"); + out.write(")"); } %> - - - + + + + <%=intl._t("Reachable by")%>: + - + +
+ <%=intl._t("Website Hostname")%> +
+ + <%=intl._t("(leave blank for outproxies)")%> +
+ <%=intl._t("Private key file")%> +
<% String value3 = editBean.getPrivateKeyFile(curTunnel); if (value3 == null || "".equals(value3.trim())) { - out.write(" ("); + out.write(" ("); out.write(intl._t("required")); - out.write(")"); + out.write(")"); } %> - - - + +
+ <%=intl._t("Local destination")%> +
+ +
" href="/imagegen/qr?s=320&t=<%=name%>&c=http%3a%2f%2f<%=name%>%2f%3fi2paddresshelper%3d<%=b64%>" target="_top"><%=intl._t("Generate QR Code")%> - <%=intl._t("Add to local addressbook")%> -      - <%=intl._t("Registration Authentication")%> + <%=intl._t("Registration Authentication")%> + + <%=intl._t("Note: In order to enable QR code generation or registration authentication, configure the Name field above with .i2p suffix eg. mynewserver.i2p")%> +
-
-
-

<%=intl._t("Advanced networking options")%>

-
+

<%=intl._t("Advanced Networking Options")%>

-
-
-
- -
- -
-
- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <% if (!"streamrserver".equals(tunnelType)) { %> -
- + +
+ + + + + + -
-
-
<% } /* !streamrserver */ %> -
- -
-
- - readonly="readonly" <% } %> /> -
-
- - readonly="readonly" <% } %> /> -
- -
-
-
- -
- -
-
- - class="tickbox" /> -
-
- - -
-
- - - <%=intl._t("(Tunnel must be stopped first)")%> -
- -
-
-
- -
- -
-
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -
-
- -
-
- - -
-
- - -
-
- - -
-
-
-
- -
-
- -
-
- -
-
- -
-
-
-
- -
-
- -
-
+ + + + + + + + + + + <% if (("httpserver".equals(tunnelType)) || ("httpbidirserver".equals(tunnelType))) { - %>
-
- -
-
- - -
-
- - -
-
-
-
- -
-
- -
-
- -
-
-
-
- -
-
- -
-
- <% } // httpserver - %>
-
-
- -
- -
-
- - class="tickbox" /> -
-
- - -
-
- - -
+ %> -
-
-
+ + + + + + + + + + + + <% } // httpserver + %> + + + + + + + + + + + + + + + + + + + + + + + + + + <% /***************** %>
@@ -671,76 +741,74 @@ input.default { width: 1px; height: 1px; visibility: hidden; } <% if (true /* editBean.isAdvanced() */ ) { int currentSigType = editBean.getSigType(curTunnel, tunnelType); %> -
- -
-
-
- - class="tickbox" /> -
+
+ + + + + + <% } // isAdvanced %> - -
- - -
- - - -
-
-
+ + + + + + + + + +
+ <%=intl._t("Tunnel Options")%> +
+ <%=intl._t("Length")%> + + <%=intl._t("Variance")%> +
- -
- +
- -
- + %> +
+ <%=intl._t("Count")%> + + <%=intl._t("Backup Count")%> +
- -
- + +
- - -
-
-
- + %> +
+ <%=intl._t("Profile")%> +
- + +
+ <%=intl._t("Router I2CP Address")%> +
+ <%=intl._t("Host")%>: + readonly="readonly" <% } %> /> + + <%=intl._t("Port")%>: + readonly="readonly" <% } %> /> +
+ <%=intl._t("Encrypt Leaseset")%> +
+ class="tickbox" /> + <%=intl._t("Only allow clients with the encryption key to connect to this server")%> +
+ <%=intl._t("Encryption Key")%> + + <%=intl._t("Generate New Key")%> (<%=intl._t("Tunnel must be stopped first")%>) +
+ + + +
+ <%=intl._t("Restricted Access List")%> +
<% /* can't use
+ <%=intl._t("Access List")%> (<%=intl._t("Specify clients, 1 per line")%>) +
+ +
+ <%=intl._t("Server Access Options")%> +
+ " <%=(editBean.isRejectInproxy(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" /> + <%=intl._t("Block Access via Inproxies")%> + + " <%=(editBean.isRejectReferer(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" /> + <%=intl._t("Block Accesses containing Referers")%> +
+ " <%=(editBean.isRejectUserAgents(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" /> + <%=intl._t("Block these User-Agents")%> + + " value="<%=editBean.getUserAgents(curTunnel)%>" class="freetext" /> +
+ " <%=(editBean.getUniqueLocal(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" /> + <%=intl._t("Unique Local Address per Client")%> + + " <%=(editBean.getMultihome(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" /> + <%=intl._t("Optimize for Multihoming")%> +
+ <%=intl._t("Server Throttling")%> +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <% if (("httpserver".equals(tunnelType)) || ("httpbidirserver".equals(tunnelType))) { + %> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <% } // httpserver + %> + + +
+ <%=intl._t("Inbound connection limits (0=unlimited)")%> +
<%=intl._t("Per Minute")%><%=intl._t("Per Hour")%><%=intl._t("Per Day")%>
<%=intl._t("Per Client")%> + + + + + +
<%=intl._t("Total")%> + + + + + +
<%=intl._t("Max concurrent connections (0=unlimited)")%>
+ +
+ <%=intl._t("POST limits (0=unlimited)")%> +
+ <%=intl._t("Per Period")%> + + <%=intl._t("Ban Duration")%> +
+ <%=intl._t("Per Client")%> + + + + + + <%=intl._t("minutes")%> +
+ <%=intl._t("Total")%> + + + + + + <%=intl._t("minutes")%> +
+ <%=intl._t("POST limit period")%> + + + + <%=intl._t("minutes")%> +
+
+ <%=intl._t("Reduce tunnel quantity when idle")%> +
+ class="tickbox" /> + <%=intl._t("Reduce tunnel quantity when idle to conserve resources")%> +
+ <%=intl._t("Reduced tunnel count")%>: + + + <%=intl._t("Idle period")%>: + + <%=intl._t("minutes")%> +
+ <%=intl._t("Signature type")%> (<%=intl._t("Experts only! Changes B32!")%>) +
+ + class="tickbox" /> + DSA-SHA1 + <% if (editBean.isSigTypeAvailable(1)) { %> -
- - class="tickbox" /> -
+ + class="tickbox" /> + ECDSA-P256 + <% } if (editBean.isSigTypeAvailable(2)) { %> -
- - class="tickbox" /> -
+ + class="tickbox" /> + ECDSA-P384 + <% } if (editBean.isSigTypeAvailable(3)) { %> -
- - class="tickbox" /> -
+ + class="tickbox" /> + ECDSA-P521 + <% } if (editBean.isSigTypeAvailable(7)) { %> -
- - class="tickbox" /> -
+ + class="tickbox" /> + Ed25519-SHA-512 + <% } // isAvailable %> - - -
-
-
+ +
+ <%=intl._t("Custom options")%> +
+ +
- - - - - + + +
+
- + <% } else { - %>Tunnels are not initialized yet, please reload in two minutes.<% + %>
<%=intl._t("Tunnels are not initialized yet, please reload in two minutes.")%>
<% } // isInitialized() %> diff --git a/apps/i2ptunnel/jsp/index.jsp b/apps/i2ptunnel/jsp/index.jsp index bb099231c..6863af89a 100644 --- a/apps/i2ptunnel/jsp/index.jsp +++ b/apps/i2ptunnel/jsp/index.jsp @@ -28,46 +28,42 @@ <% if (indexBean.allowCSS()) { %> - - + <% } %> - - -
-
-

<%=intl._t("Status Messages")%>

-
- -
-
-
+
+

<%=intl._t("Status Messages")%>

+ + + + -
-
-
- + + +
+
<%=intl._t("Refresh")%> - - - +
+
+ <% if (indexBean.isInitialized()) { String nextNonce = net.i2p.i2ptunnel.web.IndexBean.getNextNonce(); %> -
-
-