i2ptunnel:

- Remove redundant labels and spans for keyaccess
- Edit Server:
  - Shift Local Destination / Private Key file to share table row
    - Reduces spread of Local Destination textarea
  - Move "Use SSL to connect to target" to Target Port column
- Add translation tagging for title tags
- Remove redundant title tags and provide enhanced strings for features that
  benefit from clarification
- Move title tags to <label> where applicable
- Fixed Cancel button on registration so it now jumps back to the list page
- textareas for registration page and local destination on edit server page
  changed to divs
  - Scrollbars hidden until mouseover, 1 click to select content
  - Responsive width, tabindex="0"
    - Fixes text breaking out of textarea bounding box issue in chrome/blink
- Fix overflow issue on select dropdowns (edit server/client -> tunnel options)
  in Chrome / Blink
- More generous vertical padding for th (responsive)
- Larger h2/h3s (responsive)
- Increase spacing between panels in iframe mode
This commit is contained in:
str4d
2017-06-03 14:10:08 +00:00
parent ff400c9448
commit 017f66a342
9 changed files with 860 additions and 296 deletions

View File

@@ -88,7 +88,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
</tr>
<tr>
<td>
<input type="text" size="30" maxlength="50" name="name" title="Tunnel Name" value="<%=editBean.getTunnelName(curTunnel)%>" class="freetext tunnelName" />
<input type="text" size="30" maxlength="50" name="name" title="<%=intl._t("Name of tunnel to be displayed on Tunnel Manager home page and the router console sidebar")%>" value="<%=editBean.getTunnelName(curTunnel)%>" class="freetext tunnelName" />
</td>
<td>
<%=tunnelTypeName%>
@@ -107,11 +107,11 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<tr>
<td>
<input type="text" size="60" maxlength="80" name="nofilter_description" title="Tunnel Description" value="<%=editBean.getTunnelDescription(curTunnel)%>" class="freetext tunnelDescription" />
<input type="text" size="60" maxlength="80" name="nofilter_description" title="<%=intl._t("Description of tunnel to be displayed on Tunnel Manager home page")%>" value="<%=editBean.getTunnelDescription(curTunnel)%>" class="freetext tunnelDescription" />
</td>
<td>
<label><input value="1" type="checkbox" name="startOnLoad" title="Start Tunnel Automatically"<%=(editBean.startAutomatically(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<label title="<%=intl._t("Enable this option to ensure this service is available when the router starts")%>"><input value="1" type="checkbox" name="startOnLoad"<%=(editBean.startAutomatically(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<%=intl._t("Automatically start tunnel when router starts")%></label>
</td>
</tr>
@@ -135,7 +135,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
out.write(")</font></span>");
}
%>
<input type="text" size="6" maxlength="5" name="port" title="Access Port Number" value="<%=editBean.getClientPort(curTunnel)%>" class="freetext port" placeholder="required" />
<input type="text" size="6" maxlength="5" name="port" title="<%=intl._t("Specify the local port this service should be accessible from")%>" value="<%=editBean.getClientPort(curTunnel)%>" class="freetext port" placeholder="required" />
</td>
<%
@@ -151,14 +151,14 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
}
%>
<input type="text" size="20" id="targetHost" name="targetHost" title="Target Hostname or IP" value="<%=targetHost%>" class="freetext host" placeholder="required" />
<input type="text" size="20" id="targetHost" name="targetHost" title="<%=intl._t("Hostname or IP address of the target server")%>" value="<%=targetHost%>" class="freetext host" placeholder="required" />
</td>
<% } else { %>
<td>
<b><%=intl._t("Reachable by")%>:</b>
<select id="reachableBy" name="reachableBy" title="IP for Client Access" class="selectbox">
<select id="reachableBy" name="reachableBy" title="<%=intl._t("Local interface (ip address) the client tunnel will be reachable from")%>" class="selectbox")%>">
<%
String clientInterface = editBean.getClientInterface(curTunnel);
for (String ifc : editBean.interfaceSet()) {
@@ -186,7 +186,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
</tr>
<tr>
<td colspan="2">
<label><input value="1" type="checkbox" name="useSSL" title="Clients use SSL to connect" <%=(editBean.isSSLEnabled(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<label title="<%=intl._t("If you are accessing a service on a remote I2P router, you may wish to connect with SSL to avoid traffic interception. The client application should be also be configured to use SSL.")%>"><input value="1" type="checkbox" name="useSSL" <%=(editBean.isSSLEnabled(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<%=intl._t("Clients use SSL to connect to tunnel")%></label>
</td>
</tr>
@@ -201,7 +201,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
</tr>
<tr>
<td colspan="2">
<input type="text" size="30" name="proxyList" title="List of Outproxy I2P destinations" value="<%=editBean.getClientDestination(curTunnel)%>" class="freetext proxyList" />&nbsp;(<%=intl._t("comma separated eg. proxy1.i2p,proxy2.i2p")%>)
<input type="text" size="30" name="proxyList" title="<%=intl._t("Specify the .i2p address or destination (b32 or b64) of the outproxy here.")%>&nbsp;<%=intl._t("For a random selection from a pool, separate with commas e.g. server1.i2p,server2.i2p")%>" value="<%=editBean.getClientDestination(curTunnel)%>" class="freetext proxyList" />
</td>
</tr>
@@ -214,7 +214,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
</tr>
<tr>
<td colspan="2">
<input type="text" size="30" name="sslProxies" title="List of Outproxy I2P destinations" value="<%=editBean.getSslProxies(curTunnel)%>" class="freetext proxyList" />
<input type="text" size="30" name="sslProxies" title="<%=intl._t("Specify the .i2p address or destination (b32 or b64) of the outproxy here.")%>&nbsp;<%=intl._t("For a random selection from a pool, separate with commas e.g. server1.i2p,server2.i2p")%>" value="<%=editBean.getSslProxies(curTunnel)%>" class="freetext proxyList" />
</td>
</tr>
@@ -228,7 +228,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<tr>
<td colspan="2">
<label><input value="1" type="checkbox" name="useOutproxyPlugin" <%=(editBean.getUseOutproxyPlugin(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<label title="<%=intl._t("If an outproxy plugin is installed (e.g. Orchid), use this instead of any configured outproxies to access websites outside of I2P")%>"><input value="1" type="checkbox" name="useOutproxyPlugin" <%=(editBean.getUseOutproxyPlugin(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<%=intl._t("Use plugin instead of above-listed proxies if available")%></label>
</td>
</tr>
@@ -249,7 +249,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
}
%>
<input type="text" size="30" id="targetDestination" name="targetDestination" title="Destination of the Tunnel" value="<%=editBean.getClientDestination(curTunnel)%>" class="freetext destination" placeholder="required" />
<input type="text" size="30" id="targetDestination" name="targetDestination" title="<%=intl._t("Specify the .i2p address or destination (b32 or b64) of the tunnel here.")%>&nbsp;<%=intl._t("For a random selection from a pool, separate with commas e.g. server1.i2p,server2.i2p")%>" value="<%=editBean.getClientDestination(curTunnel)%>" class="freetext destination" placeholder="required" />
(<%=intl._t("name, name:port, or destination")%>
<% if ("streamrclient".equals(tunnelType)) { /* deferred resolution unimplemented in streamr client */ %>
- <%=intl._t("b32 not recommended")%>
@@ -267,7 +267,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
</tr>
<tr>
<td colspan="2">
<label><input value="true" type="checkbox" name="shared" title="Share tunnels with other clients"<%=(editBean.isSharedClient(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<label title="<%=intl._t("Traffic from all clients with this feature enabled will be routed over the same set of tunnels. This will make profiling the tunnels by an adversary more difficult, but will link the clients together.")%>"><input value="true" type="checkbox" name="shared"<%=(editBean.isSharedClient(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<%=intl._t("Share tunnels with other clients and irc/httpclients? (Change requires restart of client proxy tunnel)")%></label>
</td>
</tr>
@@ -282,7 +282,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
</tr>
<tr>
<td colspan="2">
<label><input value="1" type="checkbox" name="DCC" title="Enable DCC"<%=(editBean.getDCC(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<label title="<%=intl._t("Enables direct chat and file transfers, bypassing I2P")%>"><input value="1" type="checkbox" name="DCC"<%=(editBean.getDCC(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<%=intl._t("Enable Direct Client-to-Client protocol. Note that this will compromise your anonymity and is <i>not</i> recommended.")%></label>
</td>
</tr>
@@ -319,7 +319,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<tr>
<td>
<select id="tunnelDepth" name="tunnelDepth" title="Length of each Tunnel" class="selectbox">
<select id="tunnelDepth" name="tunnelDepth" title="<%=intl._t("Length of each Tunnel")%>" class="selectbox">
<% int tunnelDepth = editBean.getTunnelDepth(curTunnel, 3);
%><option value="0"<%=(tunnelDepth == 0 ? " selected=\"selected\"" : "") %>><%=intl._t("0 hop tunnel (no anonymity)")%></option>
<option value="1"<%=(tunnelDepth == 1 ? " selected=\"selected\"" : "") %>><%=intl._t("1 hop tunnel (low anonymity)")%></option>
@@ -337,7 +337,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
</td>
<td>
<select id="tunnelVariance" name="tunnelVariance" title="Level of Randomization for Tunnel Length" class="selectbox">
<select id="tunnelVariance" name="tunnelVariance" title="<%=intl._t("Level of Randomization for Tunnel Length")%>" class="selectbox">
<% int tunnelVariance = editBean.getTunnelVariance(curTunnel, 0);
%><option value="0"<%=(tunnelVariance == 0 ? " selected=\"selected\"" : "") %>><%=intl._t("0 hop variance (no randomization, consistent performance)")%></option>
<option value="1"<%=(tunnelVariance == 1 ? " selected=\"selected\"" : "") %>><%=intl._t("+ 0-1 hop variance (medium additive randomization, subtractive performance)")%></option>
@@ -362,13 +362,13 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<tr>
<td>
<select id="tunnelQuantity" name="tunnelQuantity" title="Number of Tunnels in Group" class="selectbox">
<select id="tunnelQuantity" name="tunnelQuantity" title="<%=intl._t("Number of Tunnels in Group")%>" class="selectbox">
<%=editBean.getQuantityOptions(curTunnel)%>
</select>
</td>
<td>
<select id="tunnelBackupQuantity" name="tunnelBackupQuantity" title="Number of Reserve Tunnels" class="selectbox">
<select id="tunnelBackupQuantity" name="tunnelBackupQuantity" title="<%=intl._t("Number of Reserve Tunnels")%>" class="selectbox">
<% int tunnelBackupQuantity = editBean.getTunnelBackupQuantity(curTunnel, 0);
%><option value="0"<%=(tunnelBackupQuantity == 0 ? " selected=\"selected\"" : "") %>><%=intl._t("0 backup tunnels (0 redundancy, no added resource usage)")%></option>
<option value="1"<%=(tunnelBackupQuantity == 1 ? " selected=\"selected\"" : "") %>><%=intl._t("1 backup tunnel each direction (low redundancy, low resource usage)")%></option>
@@ -396,7 +396,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<tr>
<td>
<select id="connectionProfile" name="profile" title="Connection Profile" class="selectbox">
<select id="connectionProfile" name="profile" title="<%=intl._t("Connection Profile")%>" class="selectbox">
<% boolean interactiveProfile = editBean.isInteractive(curTunnel);
%><option <%=(interactiveProfile == true ? "selected=\"selected\" " : "")%>value="interactive"><%=intl._t("interactive connection")%> </option>
<option <%=(interactiveProfile == false ? "selected=\"selected\" " : "")%>value="bulk"><%=intl._t("bulk connection (downloads/websites/BT)")%> </option>
@@ -404,8 +404,8 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
</td>
<td>
<label><input value="1000" type="checkbox" name="connectDelay" title="Delay Connection"<%=(editBean.shouldDelay(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
(<%=intl._t("for request/response connections")%>)</label>
<label title="<%=intl._t("Delay Connection")%>"><input value="1000" type="checkbox" name="connectDelay"<%=(editBean.shouldDelay(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
(<%=intl._t("for request/response connections")%>)</label> <% // TODO: Convey to users: Where is the (1s) delay introduced? What is the difference between delay connect and delay open? %>
</td>
</tr>
<% } // !streamrclient %>
@@ -419,13 +419,13 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<tr>
<td>
<b><%=intl._t("Host")%>:</b>
<input type="text" name="clientHost" size="20" title="I2CP Hostname or IP" value="<%=editBean.getI2CPHost(curTunnel)%>" class="freetext host" <% if (editBean.isRouterContext()) { %> readonly="readonly" <% } %> />
<input type="text" name="clientHost" size="20" title="<%=intl._t("I2CP Hostname or IP")%>" value="<%=editBean.getI2CPHost(curTunnel)%>" class="freetext host" <% if (editBean.isRouterContext()) { %> readonly="readonly" <% } %> />
</td>
<td>
<b><%=intl._t("Port")%>:</b>
<input type="text" name="clientport" size="20" title="I2CP Port Number" value="<%=editBean.getI2CPPort(curTunnel)%>" class="freetext port" <% if (editBean.isRouterContext()) { %> readonly="readonly" <% } %> />
<input type="text" name="clientport" size="20" title="<%=intl._t("I2CP Port Number")%>" value="<%=editBean.getI2CPPort(curTunnel)%>" class="freetext port" <% if (editBean.isRouterContext()) { %> readonly="readonly" <% } %> />
</td>
</tr>
@@ -439,7 +439,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<tr>
<td colspan="2">
<label><input value="1" type="checkbox" name="delayOpen" title="Delay Tunnel Open"<%=(editBean.getDelayOpen(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<label title="<%=intl._t("Conserve resources by only creating tunnels when required")%>"><input value="1" type="checkbox" name="delayOpen"<%=(editBean.getDelayOpen(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<%=intl._t("Delay opening client tunnel until activity is detected on the configured tunnel port")%></label>
</td>
</tr>
@@ -454,7 +454,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<tr>
<td colspan="2">
<label><input value="1" type="checkbox" name="reduce" title="Reduce Tunnels"<%=(editBean.getReduce(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<label title="<%=intl._t("Reduce tunnel count when idle but keep tunnel open (to ensure immediate availability)")%>"><input value="1" type="checkbox" name="reduce"<%=(editBean.getReduce(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<%=intl._t("Reduce tunnel quantity when idle to conserve resources")%></label>
</td>
</tr>
@@ -462,12 +462,12 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<tr>
<td>
<b><%=intl._t("Reduced tunnel count")%>:</b>
<input type="text" id="reducedTunnelCount" name="reduceCount" size="1" maxlength="1" title="Reduced Tunnel Count" value="<%=editBean.getReduceCount(curTunnel)%>" class="freetext quantity" />
<input type="text" id="reducedTunnelCount" name="reduceCount" size="1" maxlength="1" title="<%=intl._t("Reduced Tunnel Count")%>" value="<%=editBean.getReduceCount(curTunnel)%>" class="freetext quantity" />
</td>
<td>
<b><%=intl._t("Idle period")%>:</b>
<input type="text" name="reduceTime" size="4" maxlength="4" title="Reduced Tunnel Idle Time" value="<%=editBean.getReduceTime(curTunnel)%>" class="freetext period" />
<input type="text" name="reduceTime" size="4" maxlength="4" title="<%=intl._t("Reduced Tunnel Idle Time")%>" value="<%=editBean.getReduceTime(curTunnel)%>" class="freetext period" />
minutes
</td>
</tr>
@@ -480,13 +480,13 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<tr>
<td>
<label><input value="1" type="checkbox" name="close" title="Close Tunnels"<%=(editBean.getClose(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<label title="<%=intl._t("To conserve resources, close tunnels when not in use")%>"><input value="1" type="checkbox" name="close"<%=(editBean.getClose(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<%=intl._t("Close client tunnels after specified idle period")%></label>
</td>
<td>
<b><%=intl._t("Idle period")%>:</b>
<input type="text" name="closeTime" size="4" maxlength="4" title="Close Tunnel Idle Time" value="<%=editBean.getCloseTime(curTunnel)%>" class="freetext period" />
<input type="text" name="closeTime" size="4" maxlength="4" title="<%=intl._t("Close Tunnel Idle Time")%>" value="<%=editBean.getCloseTime(curTunnel)%>" class="freetext period" />
minutes
</td>
</tr>
@@ -495,12 +495,12 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<td colspan="2">
<b><%=intl._t("New Keys on Reopen")%>:</b>
<span class="multiOption">
<label><input value="1" type="radio" name="newDest" title="New Destination"
<label title="<%=intl._t("Change tunnel identity (destination) when tunnels reopen")%>"><input value="1" type="radio" name="newDest"
<%=(editBean.getNewDest(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<%=intl._t("Enable")%></label>
</span>
<span class="multiOption">
<label><input value="0" type="radio" name="newDest" title="New Destination"
<label title="<%=intl._t("Retain tunnel identity (destination) when tunnels reopen")%>"><input value="0" type="radio" name="newDest"
<%=(editBean.getNewDest(curTunnel) || editBean.getPersistentClientKey(curTunnel) ? "" : " checked=\"checked\"")%> class="tickbox" />
<%=intl._t("Disable")%></label>
</span>
@@ -516,13 +516,13 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
</tr>
<tr>
<td>
<label><input value="2" type="radio" name="newDest" title="New Destination"
<label title="<%=intl._t("Enabling this feature will ensure your tunnel identity (destination) remains static, for services offering features based on destination e.g. IRC user authentication")%>"><input value="2" type="radio" name="newDest"
<%=(editBean.getPersistentClientKey(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<%=intl._t("Generate key to enable persistent client tunnel identity")%></label>
</td>
<td>
<b><%=intl._t("File")%>:</b>
<input type="text" size="30" id="privKeyFile" name="privKeyFile" title="Path to Private Key File" value="<%=editBean.getPrivateKeyFile(curTunnel)%>" class="freetext" />
<input type="text" size="30" id="privKeyFile" name="privKeyFile" title="<%=intl._t("Path to Private Key File")%>" value="<%=editBean.getPrivateKeyFile(curTunnel)%>" class="freetext" />
</td>
</tr>
<%
@@ -537,7 +537,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
</tr>
<tr>
<td colspan="2">
<textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Read Only: Local Destination (if known)" wrap="off" spellcheck="false"><%=destb64%></textarea>
<textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="<%=intl._t("Read Only: Local Destination (if known)")%>" wrap="off" spellcheck="false"><%=destb64%></textarea>
</td>
</tr>
@@ -560,23 +560,23 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<tr>
<td>
<label><input value="1" type="checkbox" name="allowUserAgent" title="Do not spoof user agent string when checked"<%=(editBean.getAllowUserAgent(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<label title="<%=intl._t("When enabled, the user agent of your web browser or http client will not be spoofed, potentially reducing your anonymity")%>"><input value="1" type="checkbox" name="allowUserAgent"<%=(editBean.getAllowUserAgent(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<%=intl._t("Do not spoof User-Agent header")%></label>
</td>
<td>
<label><input value="1" type="checkbox" name="allowReferer" title="Do not block referer header when checked"<%=(editBean.getAllowReferer(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<label title="<%=intl._t("When enabled, the referer (originating page) of your web requests will not be filtered, potentially reducing your anonymity")%>"><input value="1" type="checkbox" name="allowReferer"<%=(editBean.getAllowReferer(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<%=intl._t("Do not block Referer header")%></label>
</td>
</tr>
<tr>
<td>
<label><input value="1" type="checkbox" name="allowAccept" title="Do not block accept headers when checked"<%=(editBean.getAllowAccept(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<label title="<%=intl._t("When enabled, the accept headers (mime types support) broadcast by your web browser will not be filtered, potentially reducing your anonymity")%>"><input value="1" type="checkbox" name="allowAccept"<%=(editBean.getAllowAccept(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<%=intl._t("Do not block Accept headers")%></label>
</td>
<td>
<label><input value="1" type="checkbox" name="allowInternalSSL" title="Allow SSL to I2P addresses when checked"<%=(editBean.getAllowInternalSSL(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<label title="<%=intl._t("Allow SSL to I2P addresses when enabled")%>"><input value="1" type="checkbox" name="allowInternalSSL"<%=(editBean.getAllowInternalSSL(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<%=intl._t("Allow SSL to I2P addresses")%></label>
</td>
</tr>
@@ -594,7 +594,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<tr>
<td colspan="2">
<span class="multiOption">
<label><input value="0" type="radio" name="sigType" title="Default"<%=(currentSigType==0 ? " checked=\"checked\"" : "")%> class="tickbox" />
<label><input value="0" type="radio" name="sigType"<%=(currentSigType==0 ? " checked=\"checked\"" : "")%> class="tickbox" />
DSA-SHA1</label>
</span>
@@ -602,7 +602,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<% if (editBean.isSigTypeAvailable(1)) { %>
<span class="multiOption">
<label><input value="1" type="radio" name="sigType" title="Advanced users only"<%=(currentSigType==1 ? " checked=\"checked\"" : "")%> class="tickbox" />
<label><input value="1" type="radio" name="sigType"<%=(currentSigType==1 ? " checked=\"checked\"" : "")%> class="tickbox" />
ECDSA-P256</label>
</span>
@@ -612,7 +612,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
if (editBean.isSigTypeAvailable(2)) { %>
<span class="multiOption">
<label><input value="2" type="radio" name="sigType" title="Advanced users only"<%=(currentSigType==2 ? " checked=\"checked\"" : "")%> class="tickbox" />
<label><input value="2" type="radio" name="sigType"<%=(currentSigType==2 ? " checked=\"checked\"" : "")%> class="tickbox" />
ECDSA-P384</label>
</span>
@@ -620,7 +620,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
if (editBean.isSigTypeAvailable(3)) { %>
<span class="multiOption">
<label><input value="3" type="radio" name="sigType" title="Advanced users only"<%=(currentSigType==3 ? " checked=\"checked\"" : "")%> class="tickbox" />
<label><input value="3" type="radio" name="sigType"<%=(currentSigType==3 ? " checked=\"checked\"" : "")%> class="tickbox" />
ECDSA-P521</label>
</span>
@@ -629,13 +629,13 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
if (editBean.isSigTypeAvailable(7)) { %>
<span class="multiOption">
<label><input value="7" type="radio" name="sigType" title="Advanced users only"<%=(currentSigType==7 ? " checked=\"checked\"" : "")%> class="tickbox" />
<label><input value="7" type="radio" name="sigType"<%=(currentSigType==7 ? " checked=\"checked\"" : "")%> class="tickbox" />
Ed25519-SHA-512</label>
</span>
</td>
</tr>
<% } // isAvailable %>
<% } // isAdvanced %>
<% if ("httpclient".equals(tunnelType) || "connectclient".equals(tunnelType) || "sockstunnel".equals(tunnelType) || "socksirctunnel".equals(tunnelType)) { %>
@@ -646,7 +646,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
</tr>
<tr>
<td colspan="2">
<label><input value="1" type="checkbox" name="proxyAuth" title="Check to require authorization for this service"<%=(editBean.getProxyAuth(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<label title="<%=intl._t("Enable to require a username and password to access this local service (for example if hosting on a LAN)")%>"><input value="1" type="checkbox" name="proxyAuth"<%=(editBean.getProxyAuth(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<%=intl._t("Require local authorization for this service")%></label>
</td>
</tr>
@@ -654,11 +654,11 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<tr>
<td>
<b><%=intl._t("Username")%>:</b>
<input type="text" name="proxyUsername" title="Set username for this service" value="" class="freetext username" />
<input type="text" name="proxyUsername" title="<%=intl._t("Set username required to access this service")%>" value="" class="freetext username" />
</td>
<td>
<b><%=intl._t("Password")%>:</b>
<input type="password" name="nofilter_proxyPassword" title="Set password for this service" value="" class="freetext password" />
<input type="password" name="nofilter_proxyPassword" title="<%=intl._t("Set password required to access this service")%>" value="" class="freetext password" />
</td>
</tr>
@@ -669,7 +669,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
</tr>
<tr>
<td colspan="2">
<label><input value="1" type="checkbox" id="startOnLoad" name="outproxyAuth" title="Check if the outproxy requires authorization"<%=(editBean.getOutproxyAuth(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<label title="<%=intl._t("Enable if the outproxy a username and password to access")%>"><input value="1" type="checkbox" id="startOnLoad" name="outproxyAuth"<%=(editBean.getOutproxyAuth(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<%=intl._t("Outproxy requires authorization")%></label>
</td>
</tr>
@@ -677,12 +677,12 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<tr>
<td>
<b><%=intl._t("Username")%>:</b>
<input type="text" name="outproxyUsername" title="Enter username required by outproxy" value="<%=editBean.getOutproxyUsername(curTunnel)%>" class="freetext username" />
<input type="text" name="outproxyUsername" title="<%=intl._t("Enter username required by outproxy")%>" value="<%=editBean.getOutproxyUsername(curTunnel)%>" class="freetext username" />
</td>
<td>
<b><%=intl._t("Password")%>:</b>
<input type="password" name="nofilter_outproxyPassword" title="Enter password required by outproxy" value="<%=editBean.getOutproxyPassword(curTunnel)%>" class="freetext password" />
<input type="password" name="nofilter_outproxyPassword" title="<%=intl._t("Enter password required by outproxy")%>" value="<%=editBean.getOutproxyPassword(curTunnel)%>" class="freetext password" />
</td>
</tr>
@@ -697,7 +697,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
</tr>
<tr>
<td colspan="2">
<textarea rows="2" style="height: 8em;" cols="60" id="hostField" name="jumpList" title="List of helper URLs to offer when a host is not found in your addressbook" wrap="off" spellcheck="false"><%=editBean.getJumpList(curTunnel)%></textarea>
<textarea rows="2" style="height: 8em;" cols="60" id="hostField" name="jumpList" title="<%=intl._t("List of helper URLs to offer jumplinks from the web proxy error page when a host is not found in your addressbook")%>" wrap="off" spellcheck="false"><%=editBean.getJumpList(curTunnel)%></textarea>
</td>
</tr>
@@ -711,16 +711,16 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<tr>
<td colspan="2">
<input type="text" id="customOptions" name="nofilter_customOptions" size="60" title="Custom Options" value="<%=editBean.getCustomOptions(curTunnel)%>" class="freetext" spellcheck="false"/>
<input type="text" id="customOptions" name="nofilter_customOptions" size="60" title="<%=intl._t("Advanced options to control tunnel priority etc")%>" value="<%=editBean.getCustomOptions(curTunnel)%>" class="freetext" spellcheck="false"/>
</td>
</tr>
<tr>
<td class="buttons" colspan="2">
<input type="hidden" value="true" name="removeConfirm" />
<button id="controlCancel" class="control" type="submit" name="action" value="" title="Cancel"><%=intl._t("Cancel")%></button>
<button id="controlDelete" <%=(editBean.allowJS() ? "onclick=\"if (!confirm('Are you sure you want to delete?')) { return false; }\" " : "")%>accesskey="D" class="control" type="submit" name="action" value="Delete this proxy" title="Delete this Proxy"><%=intl._t("Delete")%></button>
<button id="controlSave" accesskey="S" class="control" type="submit" name="action" value="Save changes" title="Save Changes"><%=intl._t("Save")%></button>
<button id="controlCancel" class="control" type="submit" name="action" value=""><%=intl._t("Cancel")%></button>
<button id="controlDelete" <%=(editBean.allowJS() ? "onclick=\"if (!confirm('Are you sure you want to delete?')) { return false; }\" " : "")%>class="control" type="submit" name="action" value="Delete this proxy" title="<%=intl._t("Delete this Proxy (cannot be undone)")%>"><%=intl._t("Delete")%></button>
<button id="controlSave" class="control" type="submit" name="action" value="Save changes"><%=intl._t("Save")%></button>
</td>
</tr>
</table>
@@ -730,7 +730,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<%
} else {
%><div id="notReady"><%=intl._t("Tunnels are not initialized yet, please reload in two minutes.")%></div><%
%><div id="notReady"><%=intl._t("Tunnels not initialized yet; please retry in a few moments.")%></div><%
} // isInitialized()
%>

View File

@@ -90,7 +90,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<tr>
<td>
<input type="text" size="30" maxlength="50" name="name" title="Tunnel Name" value="<%=editBean.getTunnelName(curTunnel)%>" class="freetext tunnelName" />
<input type="text" size="30" maxlength="50" name="name" title="<%=intl._t("Name of tunnel to be displayed on Tunnel Manager home page and the router console sidebar")%>" value="<%=editBean.getTunnelName(curTunnel)%>" class="freetext tunnelName" />
</td>
<td>
<%=tunnelTypeName%>
@@ -109,11 +109,11 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<tr>
<td>
<input type="text" size="60" maxlength="80" name="nofilter_description" title="Tunnel Description" value="<%=editBean.getTunnelDescription(curTunnel)%>" class="freetext tunnelDescription" />
<input type="text" size="60" maxlength="80" name="nofilter_description" title="<%=intl._t("Description of tunnel to be displayed on Tunnel Manager home page")%>" value="<%=editBean.getTunnelDescription(curTunnel)%>" class="freetext tunnelDescription" />
</td>
<td>
<label><input value="1" type="checkbox" name="startOnLoad" title="Start Tunnel Automatically"<%=(editBean.startAutomatically(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<label title="<%=intl._t("Enable this option to ensure this service is available when the router starts")%>"><input value="1" type="checkbox" name="startOnLoad"<%=(editBean.startAutomatically(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<%=intl._t("Automatically start tunnel when router starts")%></label>
</td>
</tr>
@@ -132,7 +132,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<% if (!"streamrserver".equals(tunnelType)) { %>
<td>
<b><%=intl._t("Host")%>:</b>
<input type="text" size="20" name="targetHost" title="Target Hostname or IP" value="<%=editBean.getTargetHost(curTunnel)%>" class="freetext host" />
<input type="text" size="20" name="targetHost" title="<%=intl._t("Hostname or IP address of the target server")%>" value="<%=editBean.getTargetHost(curTunnel)%>" class="freetext host" />
</td>
<% } /* !streamrserver */ %>
@@ -145,15 +145,9 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
out.write(")</font></span>");
}
%>
<input type="text" size="6" maxlength="5" id="targetPort" name="targetPort" title="Target Port Number" value="<%=editBean.getTargetPort(curTunnel)%>" class="freetext port" placeholder="required" />
</td>
<input type="text" size="6" maxlength="5" id="targetPort" name="targetPort" title="<%=intl._t("Specify the port the server is running on")%>" value="<%=editBean.getTargetPort(curTunnel)%>" class="freetext port" placeholder="required" />
<% if (!"streamrserver".equals(tunnelType)) { %>
</tr>
<tr>
<td colspan="2">
<label><input value="1" type="checkbox" name="useSSL" title="Use SSL to connect to target" <%=(editBean.isSSLEnabled(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<label title="<%=intl._t("To avoid traffic sniffing if connecting to a remote server, you can enable an SSL connection. Note that the target server must be configured to accept SSL connections.")%>"><input value="1" type="checkbox" name="useSSL"<%=(editBean.isSSLEnabled(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<%=intl._t("Use SSL to connect to target")%></label>
<% } /* !streamrserver */ %>
</td>
@@ -178,7 +172,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
}
%>
<input type="text" size="6" maxlength="5" name="port" title="Access Port Number" value="<%=editBean.getClientPort(curTunnel)%>" class="freetext port" placeholder="required" />
<input type="text" size="6" maxlength="5" name="port" title="<%=intl._t("Port required to access service (this can be a different port to the port the service is hosted on)")%>" value="<%=editBean.getClientPort(curTunnel)%>" class="freetext port" placeholder="required" />
</td>
<% } /* httpbidirserver */ %>
<% if ("httpbidirserver".equals(tunnelType) || "streamrserver".equals(tunnelType)) { %>
@@ -186,7 +180,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<td>
<b><%=intl._t("Reachable by")%>:</b>
<select id="reachableBy" name="reachableBy" title="IP for Client Access" class="selectbox">
<select id="reachableBy" name="reachableBy" title="<%=intl._t("Listening interface (IP address) for client access (normally 127.0.0.1)")%>" class="selectbox">
<%
String clientInterface = editBean.getClientInterface(curTunnel);
for (String ifc : editBean.interfaceSet()) {
@@ -218,7 +212,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<tr>
<td colspan="2">
<input type="text" size="20" id="websiteName" name="spoofedHost" title="Website Hostname" value="<%=editBean.getSpoofedHost(curTunnel)%>" class="freetext" />
<input type="text" size="20" id="websiteName" name="spoofedHost" title="<%=intl._t("Website Hostname e.g. mysite.i2p")%>" value="<%=editBean.getSpoofedHost(curTunnel)%>" class="freetext" />
<%=intl._t("(leave blank for outproxies)")%>
</td>
</tr>
@@ -226,13 +220,19 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
%>
<tr>
<th colspan="2">
<th>
<%=intl._t("Local destination")%>
</th>
<th>
<%=intl._t("Private key file")%>
</th>
</tr>
<tr>
<td colspan="2">
<td>
<div class="displayText" title="<%=intl._t("Read Only: Local Destination (if known)")%>" tabindex="0"><%=editBean.getDestinationBase64(curTunnel)%></div>
</td>
<td>
<% String value3 = editBean.getPrivateKeyFile(curTunnel);
if (value3 == null || "".equals(value3.trim())) {
out.write(" <span class=\"required\"><font color=\"red\">(");
@@ -240,19 +240,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
out.write(")</font></span>");
}
%>
<input type="text" size="30" id="privKeyFile" name="privKeyFile" title="Path to Private Key File" value="<%=editBean.getPrivateKeyFile(curTunnel)%>" class="freetext" placeholder="required" />
</td>
</tr>
<tr>
<th colspan="2">
<%=intl._t("Local destination")%>
</th>
</tr>
<tr>
<td colspan="2">
<textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Read Only: Local Destination (if known)" wrap="off" spellcheck="false"><%=editBean.getDestinationBase64(curTunnel)%></textarea>
<input type="text" size="30" id="privKeyFile" name="privKeyFile" title="<%=intl._t("Path to Private Key File")%>" value="<%=editBean.getPrivateKeyFile(curTunnel)%>" class="freetext" placeholder="required" />
</td>
</tr>
@@ -263,10 +251,8 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
String sig = editBean.getNameSignature(curTunnel);
if (sig.length() > 0) {
%><div id="sigField" class="rowItem">
<label for="signature">
<%=intl._t("Hostname Signature")%>
</label>
<input type="text" size="30" readonly="readonly" title="Use to prove that the website name is for this destination" value="<%=sig%>" wrap="off" class="freetext" />
<input type="text" size="30" readonly="readonly" title="<%=intl._t("Use to prove that the website name is for this destination")%>" value="<%=sig%>" wrap="off" class="freetext" />
</div>
<%
} // sig
@@ -288,15 +274,15 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
%>
<td class="buttons" colspan="2">
<a class="control" title="<%=intl._t("Generate QR Code")%>" href="/imagegen/qr?s=320&amp;t=<%=name%>&amp;c=http%3a%2f%2f<%=name%>%2f%3fi2paddresshelper%3d<%=b64%>" target="_top"><%=intl._t("Generate QR Code")%></a>
<a class="control" href="/susidns/addressbook.jsp?book=private&amp;hostname=<%=name%>&amp;destination=<%=b64%>#add"><%=intl._t("Add to local addressbook")%></a>
<a class="control" href="register?tunnel=<%=curTunnel%>"><%=intl._t("Registration Authentication")%></a>
<a class="control" title="<%=intl._t("Generate a QR Code for this domain")%>" href="/imagegen/qr?s=320&amp;t=<%=name%>&amp;c=http%3a%2f%2f<%=name%>%2f%3fi2paddresshelper%3d<%=b64%>" target="_top"><%=intl._t("Generate QR Code")%></a>
<a class="control" title="<%=intl._t("Add to Private addressbook")%>" href="/susidns/addressbook.jsp?book=private&amp;hostname=<%=name%>&amp;destination=<%=b64%>#add"><%=intl._t("Add to local addressbook")%></a>
<a class="control" title="<%=intl._t("Register, unregister or change details for hostname")%>" href="register?tunnel=<%=curTunnel%>"><%=intl._t("Registration Authentication")%></a>
</td>
<%
} else {
%>
<td class="infohelp" colspan="2">
<%=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("Note: In order to enable QR code generation or registration authentication, configure the Website Hostname field (for websites) or the Name field (everything else) above with an .i2p suffixed hostname e.g. mynewserver.i2p")%>
</td>
<%
} // name
@@ -330,7 +316,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<tr>
<td>
<select id="tunnelDepth" name="tunnelDepth" title="Length of each Tunnel" class="selectbox">
<select id="tunnelDepth" name="tunnelDepth" title="<%=intl._t("Length of each Tunnel")%>" class="selectbox">
<% int tunnelDepth = editBean.getTunnelDepth(curTunnel, 3);
%><option value="0"<%=(tunnelDepth == 0 ? " selected=\"selected\"" : "") %>><%=intl._t("0 hop tunnel (no anonymity)")%></option>
<option value="1"<%=(tunnelDepth == 1 ? " selected=\"selected\"" : "") %>><%=intl._t("1 hop tunnel (low anonymity)")%></option>
@@ -348,7 +334,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
</td>
<td>
<select id="tunnelVariance" name="tunnelVariance" title="Level of Randomization for Tunnel Depth" class="selectbox">
<select id="tunnelVariance" name="tunnelVariance" title="<%=intl._t("Level of Randomization for Tunnel Depth")%>" class="selectbox">
<% int tunnelVariance = editBean.getTunnelVariance(curTunnel, 0);
%><option value="0"<%=(tunnelVariance == 0 ? " selected=\"selected\"" : "") %>><%=intl._t("0 hop variance (no randomization, consistent performance)")%></option>
<option value="1"<%=(tunnelVariance == 1 ? " selected=\"selected\"" : "") %>><%=intl._t("+ 0-1 hop variance (medium additive randomization, subtractive performance)")%></option>
@@ -374,13 +360,13 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<tr>
<td>
<select id="tunnelQuantity" name="tunnelQuantity" title="Number of Tunnels in Group" class="selectbox">
<select id="tunnelQuantity" name="tunnelQuantity" title="<%=intl._t("Number of Tunnels in Group")%>" class="selectbox">
<%=editBean.getQuantityOptions(curTunnel)%>
</select>
</td>
<td>
<select id="tunnelBackupQuantity" name="tunnelBackupQuantity" title="Number of Reserve Tunnels" class="selectbox">
<select id="tunnelBackupQuantity" name="tunnelBackupQuantity" title="<%=intl._t("Number of Reserve Tunnels")%>" class="selectbox">
<% int tunnelBackupQuantity = editBean.getTunnelBackupQuantity(curTunnel, 0);
%><option value="0"<%=(tunnelBackupQuantity == 0 ? " selected=\"selected\"" : "") %>><%=intl._t("0 backup tunnels (0 redundancy, no added resource usage)")%></option>
<option value="1"<%=(tunnelBackupQuantity == 1 ? " selected=\"selected\"" : "") %>><%=intl._t("1 backup tunnel each direction (low redundancy, low resource usage)")%></option>
@@ -403,7 +389,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<tr>
<td colspan="2">
<select id="profile" name="profile" title="Connection Profile" class="selectbox">
<select id="profile" name="profile" title="<%=intl._t("Connection Profile")%>" class="selectbox">
<% boolean interactiveProfile = editBean.isInteractive(curTunnel);
%><option <%=(interactiveProfile == true ? "selected=\"selected\" " : "")%>value="interactive"><%=intl._t("interactive connection")%> </option>
<option <%=(interactiveProfile == false ? "selected=\"selected\" " : "")%>value="bulk"><%=intl._t("bulk connection (downloads/websites/BT)")%> </option>
@@ -421,11 +407,11 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<tr>
<td>
<b><%=intl._t("Host")%>:</b>
<input type="text" id="clientHost" name="clientHost" size="20" title="I2CP Hostname or IP" value="<%=editBean.getI2CPHost(curTunnel)%>" class="freetext" <% if (editBean.isRouterContext()) { %> readonly="readonly" <% } %> />
<input type="text" id="clientHost" name="clientHost" size="20" title="<%=intl._t("I2CP Hostname or IP")%>" value="<%=editBean.getI2CPHost(curTunnel)%>" class="freetext" <% if (editBean.isRouterContext()) { %> readonly="readonly" <% } %> />
</td>
<td>
<b><%=intl._t("Port")%>:</b>
<input type="text" id="clientPort" name="clientport" size="20" title="I2CP Port Number" value="<%=editBean.getI2CPPort(curTunnel)%>" class="freetext" <% if (editBean.isRouterContext()) { %> readonly="readonly" <% } %> />
<input type="text" id="clientPort" name="clientport" size="20" title="<%=intl._t("I2CP Port Number")%>" value="<%=editBean.getI2CPPort(curTunnel)%>" class="freetext" <% if (editBean.isRouterContext()) { %> readonly="readonly" <% } %> />
</td>
</tr>
@@ -437,7 +423,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<tr>
<td colspan="2">
<label><input value="1" type="checkbox" id="startOnLoad" name="encrypt" title="ONLY clients with the encryption key will be able to connect"<%=(editBean.getEncrypt(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<label title="<%=intl._t("Only clients with the encryption key will be able to connect")%>"><input value="1" type="checkbox" id="startOnLoad" name="encrypt"<%=(editBean.getEncrypt(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<%=intl._t("Only allow clients with the encryption key to connect to this server")%></label>
</td>
</tr>
@@ -454,11 +440,11 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<tr>
<td>
<textarea rows="1" style="height: 3em;" cols="44" id="leasesetKey" name="encryptKey" title="Encrypt Key" wrap="off" spellcheck="false"><%=editBean.getEncryptKey(curTunnel)%></textarea>
<textarea rows="1" style="height: 3em;" cols="44" id="leasesetKey" name="encryptKey" title="<%=intl._t("Encryption key required to access this service")%>" wrap="off" spellcheck="false"><%=editBean.getEncryptKey(curTunnel)%></textarea>
</td>
<td>
<button class="control" type="submit" name="action" value="Generate" title="Generate New Key Now"><%=intl._t("Generate")%></button>
<button class="control" type="submit" name="action" value="Generate" title="<%=intl._t("Generate new encryption key")%>"><%=intl._t("Generate")%></button>
</td>
</tr>
@@ -470,12 +456,11 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<tr>
<td colspan="2">
<% /* can't use <label> here */ %>
<span class="multiOption"><label><input value="0" type="radio" name="accessMode" title="<%=intl._t("Allow all clients")%>"<%=(editBean.getAccessMode(curTunnel).equals("0") ? " checked=\"checked\"" : "")%> class="tickbox" />
<span class="multiOption"><label title="<%=intl._t("Allow all clients to connect to this service")%>"><input value="0" type="radio" name="accessMode"<%=(editBean.getAccessMode(curTunnel).equals("0") ? " checked=\"checked\"" : "")%> class="tickbox" />
<%=intl._t("Disable")%></label></span>
<span class="multiOption"><label><input value="2" type="radio" name="accessMode" title="<%=intl._t("Reject listed clients")%>"<%=(editBean.getAccessMode(curTunnel).equals("2") ? " checked=\"checked\"" : "")%> class="tickbox" />
<span class="multiOption"><label title="<%=intl._t("Prevent listed clients from connecting to this service")%>"><input value="2" type="radio" name="accessMode"<%=(editBean.getAccessMode(curTunnel).equals("2") ? " checked=\"checked\"" : "")%> class="tickbox" />
<%=intl._t("Blacklist")%></label></span>
<span class="multiOption"><label><input value="1" type="radio" name="accessMode" title="<%=intl._t("Allow listed clients only")%>"<%=(editBean.getAccessMode(curTunnel).equals("1") ? " checked=\"checked\"" : "")%> class="tickbox" />
<span class="multiOption"><label title="<%=intl._t("Only allow listed clients to connect to this service")%>"><input value="1" type="radio" name="accessMode"<%=(editBean.getAccessMode(curTunnel).equals("1") ? " checked=\"checked\"" : "")%> class="tickbox" />
<%=intl._t("Whitelist")%></label></span>
</td>
</tr>
@@ -488,7 +473,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<tr>
<td colspan="2">
<textarea rows="2" style="height: 8em;" cols="60" name="accessList" title="Access List" wrap="off" spellcheck="false"><%=editBean.getAccessList(curTunnel)%></textarea>
<textarea rows="2" style="height: 8em;" cols="60" name="accessList" title="<%=intl._t("Control access to this service")%>" wrap="off" spellcheck="false"><%=editBean.getAccessList(curTunnel)%></textarea>
</td>
</tr>
@@ -503,19 +488,19 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<tr>
<td>
<label><input value="1" type="checkbox" name="rejectInproxy" title="<%=intl._t("Deny inproxy access when enabled")%>" <%=(editBean.isRejectInproxy(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<label title="<%=intl._t("Prevent clients from accessing this service via an inproxy")%>"><input value="1" type="checkbox" name="rejectInproxy"<%=(editBean.isRejectInproxy(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<%=intl._t("Block Access via Inproxies")%></label>
</td>
<td>
<label><input value="1" type="checkbox" name="rejectReferer" title="<%=intl._t("Deny accesseses with referers (probably from inproxies)")%>" <%=(editBean.isRejectReferer(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<label title="<%=intl._t("Deny accesseses with referers (probably from inproxies)")%>"><input value="1" type="checkbox" name="rejectReferer"<%=(editBean.isRejectReferer(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<%=intl._t("Block Accesses containing Referers")%></label>
</td>
</tr>
<tr>
<td>
<label><input value="1" type="checkbox" name="rejectUserAgents" title="<%=intl._t("Deny User-Agents matching these strings (probably from inproxies)")%>" <%=(editBean.isRejectUserAgents(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<label title="<%=intl._t("Deny User-Agents matching these strings (probably from inproxies)")%>"><input value="1" type="checkbox" name="rejectUserAgents"<%=(editBean.isRejectUserAgents(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<%=intl._t("Block these User-Agents")%></label>
</td>
@@ -528,12 +513,12 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<tr>
<td>
<label><input value="1" type="checkbox" name="uniqueLocal" title="<%=intl._t("Use unique IP addresses for each connecting client (local non-SSL servers only)")%>" <%=(editBean.getUniqueLocal(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<label title="<%=intl._t("Use unique IP addresses for each connecting client (local non-SSL servers only)")%>"><input value="1" type="checkbox" name="uniqueLocal"<%=(editBean.getUniqueLocal(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<%=intl._t("Unique Local Address per Client")%></label>
</td>
<td>
<label><input value="1" type="checkbox" name="multihome" title="<%=intl._t("Only enable if you are hosting this service on multiple routers")%>" <%=(editBean.getMultihome(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<label title="<%=intl._t("Only enable if you are hosting this service on multiple routers")%>"><input value="1" type="checkbox" name="multihome"<%=(editBean.getMultihome(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<%=intl._t("Optimize for Multihoming")%></label>
</td>
</tr>
@@ -562,26 +547,26 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<tr>
<td><b><%=intl._t("Per Client")%></b></td>
<td>
<input type="text" name="limitMinute" value="<%=editBean.getLimitMinute(curTunnel)%>" class="freetext" />
<input type="text" name="limitMinute" title="<%=intl._t("Maximum number of web page requests per minute for a unique client before access to the server is blocked")%>" value="<%=editBean.getLimitMinute(curTunnel)%>" class="freetext" />
</td>
<td>
<input type="text" name="limitHour" value="<%=editBean.getLimitHour(curTunnel)%>" class="freetext" />
<input type="text" name="limitHour" title="<%=intl._t("Maximum number of web page requests per hour for a unique client before access to the server is blocked")%>" value="<%=editBean.getLimitHour(curTunnel)%>" class="freetext" />
</td>
<td>
<input type="text" name="limitDay" value="<%=editBean.getLimitDay(curTunnel)%>" class="freetext" />
<input type="text" name="limitDay" title="<%=intl._t("Maximum number of web page requests per day for a unique client before access to the server is blocked")%>" value="<%=editBean.getLimitDay(curTunnel)%>" class="freetext" />
</td>
<td class="blankColumn"></td>
</tr>
<tr>
<td><b><%=intl._t("Total")%></b></td>
<td>
<input type="text" name="totalMinute" value="<%=editBean.getTotalMinute(curTunnel)%>" class="freetext" />
<input type="text" name="totalMinute" title="<%=intl._t("Total number of web page requests per minute before access to the server is blocked")%>" value="<%=editBean.getTotalMinute(curTunnel)%>" class="freetext" />
</td>
<td>
<input type="text" name="totalHour" value="<%=editBean.getTotalHour(curTunnel)%>" class="freetext" />
<input type="text" name="totalHour" title="<%=intl._t("Total number of web page requests per hour before access to the server is blocked")%>" value="<%=editBean.getTotalHour(curTunnel)%>" class="freetext" />
</td>
<td>
<input type="text" name="totalDay" value="<%=editBean.getTotalDay(curTunnel)%>" class="freetext" />
<input type="text" name="totalDay" title="<%=intl._t("Total number of web page requests per day before access to the server is blocked")%>" value="<%=editBean.getTotalDay(curTunnel)%>" class="freetext" />
</td>
<td class="blankColumn"></td>
</tr>
@@ -591,7 +576,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<tr>
<td></td>
<td>
<input type="text" name="maxStreams" value="<%=editBean.getMaxStreams(curTunnel)%>" class="freetext" />
<input type="text" name="maxStreams" title="<%=intl._t("Maximum number of simultaneous client connections")%>" value="<%=editBean.getMaxStreams(curTunnel)%>" class="freetext" />
</td>
<td></td>
<td></td>
@@ -622,10 +607,10 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
</b>
</td>
<td>
<input type="text" name="postMax" value="<%=editBean.getPostMax(curTunnel)%>" class="freetext quantity"/>
<input type="text" name="postMax" title="<%=intl._t("Maximum number of post requests permitted for a unique client for the configured timespan")%>" value="<%=editBean.getPostMax(curTunnel)%>" class="freetext quantity"/>
</td>
<td colspan="2">
<input type="text" name="postBanTime" value="<%=editBean.getPostBanTime(curTunnel)%>" class="freetext period"/>
<input type="text" name="postBanTime" title="<%=intl._t("If a client exceeds the maximum number of post requests per allocated period, enforce a ban for this number of minutes")%>" value="<%=editBean.getPostBanTime(curTunnel)%>" class="freetext period"/>
<%=intl._t("minutes")%>
</td>
<td class="blankColumn"></td>
@@ -636,10 +621,10 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
</b>
</td>
<td>
<input type="text" name="postTotalMax" value="<%=editBean.getPostTotalMax(curTunnel)%>" class="freetext quantity"/>
<input type="text" name="postTotalMax" title="<%=intl._t("Total number of post requests permitted for the configured timespan")%>" value="<%=editBean.getPostTotalMax(curTunnel)%>" class="freetext quantity"/>
</td>
<td colspan="2">
<input type="text" name="postTotalBanTime" value="<%=editBean.getPostTotalBanTime(curTunnel)%>" class="freetext period"/>
<input type="text" name="postTotalBanTime" title="<%=intl._t("If the maximum number of post requests per allocated period is exceeded, enforce a global access ban for this number of minutes")%>" value="<%=editBean.getPostTotalBanTime(curTunnel)%>" class="freetext period"/>
<%=intl._t("minutes")%>
</td>
<td class="blankColumn"></td>
@@ -650,7 +635,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
</b>
</td>
<td colspan="2">
<input type="text" name="postCheckTime" value="<%=editBean.getPostCheckTime(curTunnel)%>" class="freetext period"/>
<input type="text" name="postCheckTime" title="<%=intl._t("Timespan for the maximum number of post requests to be reached before a ban is triggered")%>" value="<%=editBean.getPostCheckTime(curTunnel)%>" class="freetext period"/>
<%=intl._t("minutes")%>
</td>
<td></td>
@@ -660,7 +645,6 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<% } // httpserver
%>
</table>
</td>
</tr>
@@ -673,66 +657,85 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<tr>
<td colspan="2">
<label><input value="1" type="checkbox" id="startOnLoad" name="reduce" title="Reduce Tunnels"<%=(editBean.getReduce(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<label><input value="1" type="checkbox" id="startOnLoad" name="reduce" <%=(editBean.getReduce(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<%=intl._t("Reduce tunnel quantity when idle to conserve resources")%></label>
</td>
</tr>
<tr>
<td>
<b><%=intl._t("Reduced tunnel count")%>:</b>
<input type="text" id="reduceCount" name="reduceCount" size="1" maxlength="1" title="Reduced Tunnel Count" value="<%=editBean.getReduceCount(curTunnel)%>" class="freetext quantity" />
<input type="text" id="reduceCount" name="reduceCount" size="1" maxlength="1" title="<%=intl._t("Number of tunnels to keep open to maintain availability of service")%>" value="<%=editBean.getReduceCount(curTunnel)%>" class="freetext quantity" />
</td>
<td>
<b><%=intl._t("Idle period")%>:</b>
<input type="text" id="reduceTime" name="reduceTime" size="4" maxlength="4" title="Reduced Tunnel Idle Time" value="<%=editBean.getReduceTime(curTunnel)%>" class="freetext period" />
<input type="text" id="reduceTime" name="reduceTime" size="4" maxlength="4" title="<%=intl._t("Period of inactivity before tunnel number is reduced")%>" value="<%=editBean.getReduceTime(curTunnel)%>" class="freetext period" />
<%=intl._t("minutes")%>
</td>
</tr>
<% /***************** %>
<div id="tunnelOptionsField" class="rowItem">
<label for="cert" accesskey="c">
<%=intl._t("New Certificate type")%>(<span class="accessKey">C</span>):
</label>
</div>
<div id="hostField" class="rowItem">
<div id="portField" class="rowItem">
<label><%=intl._t("None")%></label>
<input value="0" type="radio" id="startOnLoad" name="cert" title="No Certificate"<%=(editBean.getCert(curTunnel)==0 ? " checked=\"checked\"" : "")%> class="tickbox" />
</div>
<div id="portField" class="rowItem">
<label><%=intl._t("Hashcash (effort)")%></label>
<input value="1" type="radio" id="startOnLoad" name="cert" title="Hashcash Certificate"<%=(editBean.getCert(curTunnel)==1 ? " checked=\"checked\"" : "")%> class="tickbox" />
<input type="text" id="port" name="effort" size="2" maxlength="2" title="Hashcash Effort" value="<%=editBean.getEffort(curTunnel)%>" class="freetext" />
</div>
</div>
<div id="portField" class="rowItem">
<label for="force" accesskey="c">
<%=intl._t("Hashcash Calc Time")%>:
</label>
<button accesskey="S" class="control" type="submit" name="action" value="Estimate" title="Estimate Calculation Time"><%=intl._t("Estimate")%></button>
</div>
<div id="hostField" class="rowItem">
<div id="portField" class="rowItem">
<label><%=intl._t("Hidden")%></label>
<input value="2" type="radio" id="startOnLoad" name="cert" title="Hidden Certificate"<%=(editBean.getCert(curTunnel)==2 ? " checked=\"checked\"" : "")%> class="tickbox" />
</div>
<div id="portField" class="rowItem">
<label for="signer" accesskey="c">
<%=intl._t("Signed (signed by)")%>:
</label>
<input value="3" type="radio" id="startOnLoad" name="cert" title="Signed Certificate"<%=(editBean.getCert(curTunnel)==3 ? " checked=\"checked\"" : "")%> class="tickbox" />
<input type="text" id="port" name="signer" size="50" title="Cert Signer" value="<%=editBean.getSigner(curTunnel)%>" class="freetext" />
</div>
</div>
<div id="portField" class="rowItem">
<label for="force" accesskey="c">
<%=intl._t("Modify Certificate")%>:
</label>
<button accesskey="S" class="control" type="submit" name="action" value="Modify" title="Force New Cert Now"><%=intl._t("Modify")%></button>
<span class="comment"><%=intl._t("(Tunnel must be stopped first)")%></span>
</div>
<tr>
<th colspan="2">
<%=intl._t("New Certificate type")%>
</th>
</tr>
<tr>
<td colspan="2">
<span class="multiOption"><label title="<%=intl._t("No Certificate")%>"><%=intl._t("None")%>
<input value="0" type="radio" id="startOnLoad" name="cert"<%=(editBean.getCert(curTunnel)==0 ? " checked=\"checked\"" : "")%> class="tickbox" /></label></span>
<span class="multiOption"><label title="<%=intl._t("Hashcash Certificate")%>"><%=intl._t("Hashcash (effort)")%>
<input value="1" type="radio" id="startOnLoad" name="cert"<%=(editBean.getCert(curTunnel)==1 ? " checked=\"checked\"" : "")%> class="tickbox" /></label>
<input type="text" id="port" name="effort" size="2" maxlength="2" title="<%=intl._t("Hashcash Effort")%>" value="<%=editBean.getEffort(curTunnel)%>" class="freetext" /></span>
</td>
</tr>
<tr>
<th>
<%=intl._t("Hashcash Calc Time")%>
</th>
<th>
<%=intl._t("Hidden")%>
</th>
</tr>
<tr>
<td>
<button class="control" type="submit" name="action" value="Estimate" title="<%=intl._t("Estimate Calculation Time")%>"><%=intl._t("Estimate")%></button>
</td>
<td>
<input value="2" type="radio" id="startOnLoad" name="cert" title="<%=intl._t("Hidden Certificate")%>"<%=(editBean.getCert(curTunnel)==2 ? " checked=\"checked\"" : "")%> class="tickbox" />
</td>
</tr>
<tr>
<th colspan="2">
<%=intl._t("Signed Certificate")%>
</th>
</tr>
<tr>
<td colspan="2">
<label title="<%=intl._t("Signed Certificate")%>"><%=intl._t("Signed (signed by)")%>:
<input value="3" type="radio" id="startOnLoad" name="cert"<%=(editBean.getCert(curTunnel)==3 ? " checked=\"checked\"" : "")%> class="tickbox" /></label>
<input type="text" id="port" name="signer" size="50" title="<%=intl._t("Cert Signer")%>" value="<%=editBean.getSigner(curTunnel)%>" class="freetext" />
</td>
</tr>
<tr>
<th colspan="2">
<%=intl._t("Modify Certificate")%>&nbsp;<%=intl._t("(Tunnel must be stopped first)")%>
</th>
</tr>
<tr>
<td colspan="2">
<button class="control" type="submit" name="action" value="Modify" title="<%=intl._t("Force new Certificate now")%>"><%=intl._t("Modify")%></button>
</td>
</tr>
<% **********************/ %>
<%
@@ -747,30 +750,30 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<tr>
<td colspan="2">
<span class="multiOption">
<label><input value="0" type="radio" id="startOnLoad" name="sigType" title="Default"<%=(currentSigType==0 ? " checked=\"checked\"" : "")%> class="tickbox" />
<label title="<%=intl._t("Legacy option (deprecated), provided for backward compatibility")%>"><input value="0" type="radio" id="startOnLoad" name="sigType"<%=(currentSigType==0 ? " checked=\"checked\"" : "")%> class="tickbox" />
DSA-SHA1</label>
</span>
<% if (editBean.isSigTypeAvailable(1)) { %>
<span class="multiOption">
<label><input value="1" type="radio" id="startOnLoad" name="sigType" title="Advanced users only"<%=(currentSigType==1 ? " checked=\"checked\"" : "")%> class="tickbox" />
<label><input value="1" type="radio" id="startOnLoad" name="sigType"<%=(currentSigType==1 ? " checked=\"checked\"" : "")%> class="tickbox" />
ECDSA-P256</label>
</span>
<% }
if (editBean.isSigTypeAvailable(2)) { %>
<span class="multiOption">
<label><input value="2" type="radio" id="startOnLoad" name="sigType" title="Advanced users only"<%=(currentSigType==2 ? " checked=\"checked\"" : "")%> class="tickbox" />
<label><input value="2" type="radio" id="startOnLoad" name="sigType"<%=(currentSigType==2 ? " checked=\"checked\"" : "")%> class="tickbox" />
ECDSA-P384</label>
</span>
<% }
if (editBean.isSigTypeAvailable(3)) { %>
<span class="multiOption">
<label><input value="3" type="radio" id="startOnLoad" name="sigType" title="Advanced users only"<%=(currentSigType==3 ? " checked=\"checked\"" : "")%> class="tickbox" />
<label><input value="3" type="radio" id="startOnLoad" name="sigType"<%=(currentSigType==3 ? " checked=\"checked\"" : "")%> class="tickbox" />
ECDSA-P521</label>
</span>
<% }
if (editBean.isSigTypeAvailable(7)) { %>
<span class="multiOption">
<label><input value="7" type="radio" id="startOnLoad" name="sigType" title="Advanced users only"<%=(currentSigType==7 ? " checked=\"checked\"" : "")%> class="tickbox" />
<label title="<%=intl._t("This is the default, recommended option")%>"><input value="7" type="radio" id="startOnLoad" name="sigType"<%=(currentSigType==7 ? " checked=\"checked\"" : "")%> class="tickbox" />
Ed25519-SHA-512</label>
</span>
<% } // isAvailable %>
@@ -784,23 +787,43 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
/* alternate dest, only if current dest is set and is DSA_SHA1 */
if (currentSigType == 0 && !"".equals(b64) && !"streamrserver".equals(tunnelType)) {
%><div id="privKeyField" class="rowItem">
<label for="privKeyFile"><%=intl._t("Alternate private key file")%> (Ed25519-SHA-512):</label>
<input type="text" size="30" id="privKeyFile" name="altPrivKeyFile" title="Path to Private Key File" value="<%=editBean.getAltPrivateKeyFile(curTunnel)%>" class="freetext" />
</div>
%>
<tr>
<th colspan="2">
<%=intl._t("Alternate private key file")%> (Ed25519-SHA-512)
</th>
</tr>
<tr>
<td colspan="2">
<input type="text" class="freetext" size="30" id="altPrivKeyFile" name="altPrivKeyFile" title="<%=intl._t("Path to Private Key File")%>" value="<%=editBean.getAltPrivateKeyFile(curTunnel)%>" />
</td>
</tr>
<%
String ab64 = editBean.getAltDestinationBase64(curTunnel);
if (!"".equals(ab64)) {
%><div id="destinationField" class="rowItem">
<label for="localDestination"><%=intl._t("Alternate local destination")%>:</label>
<textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Read Only: Alternate Local Destination" wrap="off" spellcheck="false"><%=ab64%></textarea>
</div>
<div id="destinationField" class="rowItem">
<label> </label>
<span class="comment"><%=editBean.getAltDestHashBase32(curTunnel)%></span>
</div>
<div id="destinationField" class="rowItem">
%>
<tr>
<th colspan="2">
<%=intl._t("Alternate local destination")%>
</th>
</tr>
<tr>
<td colspan="2">
<div class="displayText" title="<%=intl._t("Read Only: Alternate Local Destination")%>"><%=ab64%></div>
</td>
</tr>
<tr>
<td colspan="2">
<%=editBean.getAltDestHashBase32(curTunnel)%>
</td>
</tr>
<%
ab64 = ab64.replace("=", "%3d");
String name = editBean.getSpoofedHost(curTunnel);
@@ -808,20 +831,28 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
name = editBean.getTunnelName(curTunnel);
// mysite.i2p is set in the installed i2ptunnel.config
if (name != null && !name.equals("") && !name.equals("mysite.i2p") && !name.contains(" ") && name.endsWith(".i2p")) {
%><label>
%>
<tr>
<td class="buttons" colspan="2">
<a class="control" title="<%=intl._t("Generate QR Code")%>" href="/imagegen/qr?s=320&amp;t=<%=name%>&amp;c=http%3a%2f%2f<%=name%>%2f%3fi2paddresshelper%3d<%=ab64%>" target="_top"><%=intl._t("Generate QR Code")%></a>
</label>
<a class="control" href="/susidns/addressbook.jsp?book=private&amp;hostname=<%=name%>&amp;destination=<%=ab64%>#add"><%=intl._t("Add to local addressbook")%></a>
<a class="control" title="<%=intl._t("Add to Private addressbook")%>" href="/susidns/addressbook.jsp?book=private&amp;hostname=<%=name%>&amp;destination=<%=ab64%>#add"><%=intl._t("Add to local addressbook")%></a>
<%
} else {
%><label> </label>
<span class="comment"><%=intl._t("Set name with .i2p suffix to enable QR code generation")%></span>
%>
<tr>
<td colspan="2">
<%=intl._t("Note: In order to enable QR code generation or registration authentication, configure the Website Hostname field (for websites) or the Name field (everything else) above with an .i2p suffixed hostname e.g. mynewserver.i2p")%>
</td>
</tr>
<%
} // name
%></div>
%>
<%
} // ab64
%><div class="subdivider"><hr /></div>
%>
<% } // currentSigType %>
<tr>
@@ -831,16 +862,16 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
</tr>
<tr>
<td colspan="2">
<input type="text" id="customOptions" name="nofilter_customOptions" size="60" title="Custom Options" value="<%=editBean.getCustomOptions(curTunnel)%>" class="freetext" spellcheck="false"/>
<input type="text" class="freetext" id="customOptions" name="nofilter_customOptions" size="60" title="<%=intl._t("Advanced options to control tunnel priority etc")%>" value="<%=editBean.getCustomOptions(curTunnel)%>" />
</td>
</tr>
<tr>
<td class="buttons" colspan="2">
<input type="hidden" value="true" name="removeConfirm" />
<button id="controlCancel" class="control" type="submit" name="action" value="" title="Cancel"><%=intl._t("Cancel")%></button>
<button id="controlDelete" <%=(editBean.allowJS() ? "onclick=\"if (!confirm('Are you sure you want to delete?')) { return false; }\" " : "")%>accesskey="D" class="control" type="submit" name="action" value="Delete this proxy" title="Delete this Proxy"><%=intl._t("Delete")%></button>
<button id="controlSave" accesskey="S" class="control" type="submit" name="action" value="Save changes" title="Save Changes"><%=intl._t("Save")%></button>
<button id="controlCancel" class="control" type="submit" name="action" value=""><%=intl._t("Cancel")%></button>
<button id="controlDelete" <%=(editBean.allowJS() ? "onclick=\"if (!confirm('Are you sure you want to delete?')) { return false; }\" " : "")%>class="control" type="submit" name="action" value="Delete this proxy" title="<%=intl._t("Delete this Proxy (cannot be undone)")%>"><%=intl._t("Delete")%></button>
<button id="controlSave" class="control" type="submit" name="action" value="Save changes"><%=intl._t("Save")%></button>
</td>
</tr>
</table>
@@ -850,7 +881,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<%
} else {
%><div id="notReady"><%=intl._t("Tunnels are not initialized yet, please reload in two minutes.")%></div><%
%><div id="notReady"><%=intl._t("Tunnels not initialized yet; please retry in a few moments.")%></div><%
} // isInitialized()
%>

View File

@@ -68,7 +68,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<input type="hidden" name="type" value="<%=tunnelType%>" />
<input type="submit" class="default" name="action" value="Save changes" />
<%
if (!"new".equals(tunnelType)) {
if (!"new".equals(tunnelType)) {
%>
<table>
@@ -83,7 +83,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
</td>
</tr>
<%
<%
if (("httpserver".equals(tunnelType)) || ("httpbidirserver".equals(tunnelType))) {
%>
<tr><td><b><%=intl._t("Website Name")%>:</b> <%=editBean.getSpoofedHost(curTunnel)%></td></tr>
@@ -131,7 +131,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
</tr>
<tr>
<td>
<textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" title="Copy and paste this to the registration site" wrap="off" spellcheck="false" class="authentication"><% he.write(out); %></textarea>
<div class="displayText" tabindex="0" title="<%=intl._t("Copy and paste this to the registration site")%>"><% he.write(out); %></div>
</td>
</tr>
</table>
@@ -143,7 +143,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
props.setProperty(HostTxtEntry.PROP_ACTION, HostTxtEntry.ACTION_REMOVE);
he.signRemove(spk);
%>
<table>
<tr>
<th>
@@ -152,7 +152,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
</tr>
<tr>
<td>
<textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" title="Copy and paste this to the registration site" wrap="off" spellcheck="false" class="authentication"><% he.writeRemove(out); %></textarea>
<div class="displayText" tabindex="0" title="<%=intl._t("Copy and paste this to the registration site")%>"><% he.writeRemove(out); %></div>
</td>
</tr>
@@ -192,7 +192,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
%>
<tr>
<td>
<textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" title="Copy and paste this to the registration site" wrap="off" spellcheck="false" class="authentication"><% he.write(out); %></textarea>
<div class="displayText" tabindex="0" title="<%=intl._t("Copy and paste this to the registration site")%>"><% he.write(out); %></div>
</td>
</tr>
<tr>
@@ -225,7 +225,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
%>
<tr>
<td>
<textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" title="Copy and paste this to the registration site" wrap="off" spellcheck="false" class="authentication"><% he.write(out); %></textarea>
<div class="displayText" tabindex="0" title="<%=intl._t("Copy and paste this to the registration site")%>"><% he.write(out); %></div>
</td>
</tr>
<tr>
@@ -240,7 +240,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<%
}
%>
<%
props.remove(HostTxtEntry.PROP_SIG);
props.remove(HostTxtEntry.PROP_OLDNAME);
@@ -262,7 +262,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<tr>
<td>
<textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" title="Copy and paste this to the registration site" wrap="off" spellcheck="false" class="authentication"><% he.write(out); %></textarea>
<div class="displayText" tabindex="0" title="<%=intl._t("Copy and paste this to the registration site")%>"><% he.write(out); %></div>
</td>
</tr>
<tr>
@@ -283,7 +283,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
props.remove(HostTxtEntry.PROP_SIG);
props.remove(HostTxtEntry.PROP_OLDSIG);
%>
<tr>
<th>
<%=intl._t("Authentication for adding alternate destination")%>
@@ -299,7 +299,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
%>
<tr>
<td>
<textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" title="Copy and paste this to the registration site" wrap="off" spellcheck="false" class="authentication"><% he.write(out); %></textarea>
<div class="displayText" tabindex="0" title="<%=intl._t("Copy and paste this to the registration site")%>"><% he.write(out); %></div>
</td>
</tr>
<tr>
@@ -332,7 +332,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
props2.setProperty(HostTxtEntry.PROP_OLDDEST, b64);
he2.signInner(spk);
he2.sign(spk3);
%><tr><td><textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he2.write(out); %></textarea></td></tr>
%><tr><td><div class="displayText" tabindex="0" title="<%=intl._t("Copy and paste this to the registration site")%>"><% he2.write(out); %></div></td></tr>
<tr><td class="infohelp"><%=intl._t("This will add an alternate destination for {0}", name)%></td></tr>
<%
} else {
@@ -363,10 +363,10 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
he.signInner(spk2);
he.sign(spk);
%>
<tr>
<td>
<textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" title="Copy and paste this to the registration site" wrap="off" spellcheck="false" class="authentication"><% he.write(out); %></textarea>
<div class="displayText" tabindex="0" title="<%=intl._t("Copy and paste this to the registration site")%>"><% he.write(out); %></div>
</td>
</tr>
<tr>
@@ -426,7 +426,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<tr>
<td>
<b><%=intl._t("Old Hostname")%>:</b>
<input type="text" size="30" maxlength="50" name="oldname" id="oldName" title="Old Hostname" value="<%=oldname%>" class="freetext" />
<input type="text" size="30" maxlength="50" name="oldname" id="oldName" value="<%=oldname%>" class="freetext" />
</td>
</tr>
<tr>
@@ -438,8 +438,8 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<tr>
<td class="buttons">
<input type="hidden" value="true" name="removeConfirm" />
<button id="controlCancel" class="control" type="submit" name="action" value="" title="Cancel"><%=intl._t("Cancel")%></button>
<button id="controlSave" accesskey="S" class="control" type="submit" name="action" value="authenticate" title="Generate Authentication"><%=intl._t("Generate")%></button>
<a class="control" href="list"><%=intl._t("Cancel")%></a>
<button id="controlSave" class="control" type="submit" name="action" value="authenticate" title="<%=intl._t("Generate Authentication")%>"><%=intl._t("Generate")%></button>
</td>
</tr>

View File

@@ -257,13 +257,13 @@
<tr>
<td>
<span class="tag"><%=intl._t("Name")%>:</span>
<input type="text" size="30" maxlength="50" name="name" id="name" placeholder="New Tunnel" title="Tunnel Name" value="<%=(!"null".equals(request.getParameter("name")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("name")) : "" ) %>" class="freetext" />
<input type="text" size="30" maxlength="50" name="name" id="name" placeholder="New Tunnel" title="<%=intl._t("Name of tunnel to be displayed on Tunnel Manager home page and the router console sidebar")%>" value="<%=(!"null".equals(request.getParameter("name")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("name")) : "" ) %>" class="freetext" />
</td>
</tr>
<tr>
<td>
<span class="tag"><%=intl._t("Description")%>:</span>
<input type="text" size="60" maxlength="80" name="nofilter_description" id="description" title="Tunnel Description" value="<%=(!"null".equals(request.getParameter("nofilter_description")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("nofilter_description")) : "" ) %>" class="freetext" />
<input type="text" size="60" maxlength="80" name="nofilter_description" id="description" title="<%=intl._t("Description of tunnel to be displayed on Tunnel Manager home page")%>" value="<%=(!"null".equals(request.getParameter("nofilter_description")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("nofilter_description")) : "" ) %>" class="freetext" />
</td>
</tr>
<%
@@ -291,7 +291,7 @@
<tr>
<td>
<span class="tag"><%=intl._t("Outproxies")%>:</span>
<input type="text" size="30" id="proxyList" name="proxyList" title="List of Outproxy I2P destinations" value="<%=(!"null".equals(request.getParameter("proxyList")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("proxyList")) : "" ) %>" class="freetext" />
<input type="text" size="30" id="proxyList" name="proxyList" title="<%=intl._t("List of I2P outproxy destinations, separated with commas (e.g. proxy1.i2p,proxy2.i2p)")%>" value="<%=(!"null".equals(request.getParameter("proxyList")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("proxyList")) : "" ) %>" class="freetext" />
</td>
</tr>
<%
@@ -312,7 +312,7 @@
<tr>
<td>
<span class="tag"><%=intl._t("Tunnel Destination")%>:</span>
<input type="text" size="30" id="targetDestination" name="targetDestination" title="Destination of the Tunnel" value="<%=(!"null".equals(request.getParameter("targetDestination")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("targetDestination")) : "" ) %>" class="freetext" />
<input type="text" size="30" id="targetDestination" name="targetDestination" title="<%=intl._t("Enter a b64 or .i2p address here")%>" value="<%=(!"null".equals(request.getParameter("targetDestination")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("targetDestination")) : "" ) %>" class="freetext" />
&nbsp;(<%=intl._t("name, name:port, or destination")%>
<% if ("streamrclient".equals(tunnelType)) { /* deferred resolution unimplemented in streamr client */ %>
- <%=intl._t("b32 not recommended")%>
@@ -344,7 +344,7 @@
<tr>
<td>
<span class="tag"><%=intl._t("Host")%>:</span>
<input type="text" size="20" id="targetHost" name="targetHost" title="Target Hostname or IP" placeholder="127.0.0.1" value="<%=(!"null".equals(request.getParameter("targetHost")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("targetHost")) : "127.0.0.1" ) %>" class="freetext" />
<input type="text" size="20" id="targetHost" name="targetHost" title="<%=intl._t("Hostname or IP address of the target server")%>" placeholder="127.0.0.1" value="<%=(!"null".equals(request.getParameter("targetHost")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("targetHost")) : "127.0.0.1" ) %>" class="freetext" />
</td>
</tr>
<%
@@ -366,7 +366,7 @@
<tr>
<td>
<span class="tag"><%=intl._t("Port")%>:</span>
<input type="text" size="6" maxlength="5" id="targetPort" name="targetPort" title="Target Port Number" value="<%=(!"null".equals(request.getParameter("targetPort")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("targetPort")) : "" ) %>" class="freetext" />
<input type="text" size="6" maxlength="5" id="targetPort" name="targetPort" title="<%=intl._t("Specify the port the server is running on")%>" value="<%=(!"null".equals(request.getParameter("targetPort")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("targetPort")) : "" ) %>" class="freetext" />
</td>
</tr>
<%
@@ -389,7 +389,7 @@
<tr>
<td>
<span class="tag"><%=intl._t("Port")%>:</span>
<input type="text" size="6" maxlength="5" id="port" name="port" title="Access Port Number" value="<%=(!"null".equals(request.getParameter("port")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("port")) : "" ) %>" class="freetext" />
<input type="text" size="6" maxlength="5" id="port" name="port" title="<%=intl._t("Specify the local port this service should be accessible from")%>" value="<%=(!"null".equals(request.getParameter("port")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("port")) : "" ) %>" class="freetext" />
</td>
</tr>
<%
@@ -414,7 +414,7 @@
<tr>
<td>
<span class="tag"><%=intl._t("Reachable by")%>:</span>
<select id="reachableBy" name="reachableBy" title="IP for Client Access" class="selectbox">
<select id="reachableBy" name="reachableBy" title="<%=intl._t("Listening interface (IP address) for client access (normally 127.0.0.1)")%>" class="selectbox">
<%
String clientInterface = request.getParameter("reachableBy");
if ("null".equals(clientInterface)) {
@@ -456,7 +456,7 @@
</tr>
<tr>
<td class="options">
<label><input value="1" type="checkbox" id="startOnLoad" name="startOnLoad" title="Start Tunnel Automatically"<%=("1".equals(request.getParameter("startOnLoad")) ? " checked=\"checked\"" : "")%> class="tickbox" />
<label title="<%=intl._t("Enable this option to ensure this service is available when the router starts")%>"><input value="1" type="checkbox" id="startOnLoad" name="startOnLoad" <%=("1".equals(request.getParameter("startOnLoad")) ? " checked=\"checked\"" : "")%> class="tickbox" />
&nbsp;<%=intl._t("Automatically start tunnel when router starts")%></label>
</td>
</tr>
@@ -616,16 +616,16 @@ http://stats.i2p/cgi-bin/jump.cgi?a=" /><%
/* End page 7 */ %>
<tr>
<td class="buttons">
<a class="control" href="list"><%=intl._t("Cancel")%></a>
<a class="control" title="<%=intl._t("Cancel the wizard and return to Tunnel Manager home page")%>" href="list"><%=intl._t("Cancel")%></a>
<% if (curPage != 1 && curPage != 7) {
%><button id="controlPrevious" class="control" type="submit" name="action" value="Previous page" title="Previous Page"><%=intl._t("Previous")%></button><%
%><button id="controlPrevious" class="control" type="submit" name="action" value="Previous page" title="<%=intl._t("Return to previous page")%>"><%=intl._t("Previous")%></button><%
} %>
<% if (curPage == 7) {
%><button id="controlSave" class="control" type="submit" name="action" value="Save changes" title="Save Tunnel"><%=intl._t("Save Tunnel")%></button><%
%><button id="controlSave" class="control" type="submit" name="action" value="Save changes" title="<%=intl._t("Save tunnel configuration")%>"><%=intl._t("Save Tunnel")%></button><%
} else if (curPage == 6) {
%><button id="controlFinish" class="control" type="submit" name="action" value="Next page" title="Finish Wizard"><%=intl._t("Finish")%></button><%
%><button id="controlFinish" class="control" type="submit" name="action" value="Next page" title="<%=intl._t("Finish Wizard and review tunnel settings")%>"><%=intl._t("Finish")%></button><%
} else {
%><button id="controlNext" class="control" type="submit" name="action" value="Next page" title="Next Page"><%=intl._t("Next")%></button><%
%><button id="controlNext" class="control" type="submit" name="action" value="Next page" title="<%=intl._t("Advance to next page")%>"><%=intl._t("Next")%></button><%
} %>
</td>
</tr>

View File

@@ -44,7 +44,25 @@
- De-emphasise siderbar app icons with background-blend-mode: luminosity
- Change sidebar snark icon to match homepage icon
- Bump div.main text color from #222 to #333 (reduce contrast)
* i2ptunnel: Increase vertical spacing of H2/H3's
* i2ptunnel:
- Remove redundant labels and spans for keyaccess
- Edit Server:
- Shift Local Destination / Private Key file to share table row
- Move "Use SSL to connect to target" to Target Port column
- Add translation tagging for title tags
- Remove redundant title tags and provide enhanced strings for features
that benefit from clarification
- Move title tags to <label> where applicable
- Fixed Cancel button on registration so it now jumps back to the list page
- textareas for registration page and local destination on edit server page
changed to divs
- Scrollbars hidden until mouseover, 1 click to select content
- Responsive width, tabindex="0"
- Fix overflow issue on select dropdowns (edit server/client -> tunnel
options) in Chrome / Blink
- More generous vertical padding for th (responsive)
- Larger h2/h3s (responsive)
- Increase spacing between panels in iframe mode
* SusiDNS: Change address helper icon to add book icon
* i2psnark:
- Remove font-adjust-size (ubergine/vanilla)

View File

@@ -260,6 +260,10 @@ h2, h3 {
position: relative;
}
.iframed h2, .iframed h3 {
margin-top: 12px;
}
/* title images */
#messages h2 {
@@ -295,7 +299,7 @@ h2, h3 {
/* end title images */
.iframed #globalTunnelControl h2 {
margin-top: 2px;
margin-top: 4px;
}
.iframed #globalTunnelControl {
@@ -314,7 +318,7 @@ h2, h3 {
th {
background: #fff url(/themes/console/classic/images/tinytitle.png) repeat-x center center;
background: linear-gradient(to bottom, #fff, #eff2ff) !important;
padding: 5px;
padding: 7px 5px;
text-align: left;
border-top: 1px solid #89f;
border-bottom: 1px solid #89f;
@@ -966,3 +970,124 @@ _:-ms-lang(x), h2, h3 {
}
/* end Edge/IE tweaks */
/* TO DO: merge with main classes */
.panel {
min-width: 700px;
}
@media screen and (-webkit-min-device-pixel-ratio:0) { /* fixes chrome/blinkoverflow issue */
select {
white-space: normal;
}
}
label {
vertical-align: sub;
}
input[type="text"] + label {
white-space: nowrap;
}
#targetPort {
margin-right: 10px !important;
}
#privKeyFile {
min-width: 200px;
width: 200px;
width: calc(100% - 20px);
}
.displayText, .displayText:empty:hover, .displayText:empty:focus {
font-family: "Droid Sans Mono", "Noto Mono", "Lucida Console", "DejaVu Sans Mono", monospace;
width: calc(100% - 10px);
width: 290px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
word-break: break-all;
margin: 5px;
padding: 4px;
-moz-user-select: all;
-webkit-user-select: all;
user-select: all;
border: 1px solid #999;
background: #fff;
border-radius: 2px;
box-shadow: inset 1px 1px 1px #ddd;
}
.displayText:hover, .displayText:focus {
overflow: auto;
text-overflow: clip;
margin: 0.5px 5px;
padding: 2px 4px;
box-shadow: 0 0 1px #89f;
background: #ffe;
outline: none;
}
.displayText:empty, .displayText:empty:hover, .displayText:empty:focus {
background: #ddd;
box-shadow: inset 2px 2px 1px #ccc;
}
.displayText:empty::before {
content: "";
display: inline-block;
min-height: 9px;
}
#registration .displayText {
width: 500px;
}
#registration td {
padding: 8px;
}
#registration .infohelp {
padding-top: 15px !important;
padding-bottom: 15px !important;
}
#registration input[type="file"] {
margin-top: 5px;
margin-bottom: 5px;
}
#oldName, #altPrivKeyFile {
width: 45% !important;
}
@media screen and (max-width: 800px) {
.displayText, .displayText:empty:hover, .displayText:empty:focus {
width: 260px;
font-size: 8pt;
}
}
@media screen and (min-width: 1000px) {
.displayText, .displayText:empty:hover, .displayText:empty:focus {
width: 386px;
}
#registration .displayText {
width: 600px;
}
}
@media screen and (min-width: 1500px) {
.displayText, .displayText:empty:hover, .displayText:empty:focus {
width: 552px;
}
#registration .displayText {
width: 800px;
}
}

View File

@@ -2,7 +2,7 @@
/* Author: dr|z3d */
body {
margin: 0;
margin: 3px 0 12px;
padding: 0;
text-align: center;
font-family: "Droid Sans", "Noto Sans", Ubuntu, "Segoe UI", "Bitstream Vera Sans", "DejaVu Sans", Verdana, "Lucida Grande", Helvetica, sans-serif;
@@ -13,6 +13,7 @@ body {
body.iframed {
background: transparent url(/themes/console/images/transparent.gif) !important;
margin: 0;
padding: 0;
overflow: hidden;
}
@@ -164,67 +165,63 @@ hr {
}
h2, h3 {
padding: 8px 10px;
padding: 8px 10px 8px 34px;
border: 1px solid #494;
background: linear-gradient(to bottom, #1a261a 50%, #000 50%) !important;
font-size: 11pt;
text-transform: uppercase;
letter-spacing: 0.08em;
word-spacing: 0.1em;
margin: 5px 0 -1px;
margin: 10px 0 -1px;
color: #ee9;
box-shadow: inset 0 0 0 1px #000;
}
/* title images */
h2, h3 {
padding-left: 32px;
}
#messages h2 {
background: url(/themes/console/images/info/logs.png) left 6px center no-repeat, linear-gradient(to bottom, #1a261a 50%, #000 50%) !important;
background: url(/themes/console/images/info/logs.png) left 8px center no-repeat, linear-gradient(to bottom, #1a261a 50%, #000 50%) !important;
background-size: 20px auto, 100% 100%, 100% 100% !important;
}
#globalTunnelControl h2 {
background: url(/themes/console/images/info/control.png) left 6px center no-repeat, linear-gradient(to bottom, #1a261a 50%, #000 50%) !important;
background: url(/themes/console/images/info/control.png) left 8px center no-repeat, linear-gradient(to bottom, #1a261a 50%, #000 50%) !important;
background-size: 20px auto, 100% 100%, 100% 100% !important;
}
#servers h2 {
background: url(/themes/console/images/info/server.png) left 6px center no-repeat, linear-gradient(to bottom, #1a261a 50%, #000 50%) !important;
background: url(/themes/console/images/info/server.png) left 8px center no-repeat, linear-gradient(to bottom, #1a261a 50%, #000 50%) !important;
background-size: 20px auto, 100% 100%, 100% 100% !important;
}
#clients h2 {
background: url(/themes/console/images/info/client.png) left 6px center no-repeat, linear-gradient(to bottom, #1a261a 50%, #000 50%) !important;
background: url(/themes/console/images/info/client.png) left 8px center no-repeat, linear-gradient(to bottom, #1a261a 50%, #000 50%) !important;
background-size: 20px auto, 100% 100%, 100% 100% !important;
}
#tunnelEditPage h2, #tunnelEditPage h3, #registration h2, #registration h3 {
background: url(/themes/console/images/info/configure.png) left 6px center no-repeat, linear-gradient(to bottom, #1a261a 50%, #000 50%) !important;
background: url(/themes/console/images/info/configure.png) left 8px center no-repeat, linear-gradient(to bottom, #1a261a 50%, #000 50%) !important;
background-size: 20px auto, 100% 100%, 100% 100% !important;
}
#wizardPanel h2 {
background: url(/themes/console/images/info/wizard.png) left 6px center no-repeat, linear-gradient(to bottom, #1a261a 50%, #000 50%) !important;
background: url(/themes/console/images/info/wizard.png) left 8px center no-repeat, linear-gradient(to bottom, #1a261a 50%, #000 50%) !important;
background-size: 20px auto, 100% 100%, 100% 100% !important;
}
/* end title images */
.iframed h2 {
margin: 10px 0 -1px;
margin: 14px 0 -1px;
}
h3 {
border-radius: 0;
margin-top: 10px;
margin-top: 14px;
}
.iframed #globalTunnelControl h2 {
margin-top: 2px;
margin-top: 6px;
}
.panel table {
@@ -237,7 +234,7 @@ h3 {
th {
background: #000;
background: linear-gradient(to bottom, #1a261a 0%, #223022 7%, #212f21 9%, #172317 21%, #091109 49%, #050d05 50%, #020602 51%, #010301 53%, #000000 56%, #000000 100%);
padding: 6px 5px;
padding: 7px 5px;
border-top: 1px solid #494;
border-bottom: 1px solid #494;
font-size: 9pt;
@@ -818,6 +815,7 @@ td.blankColumn {
table {
background: #000 url(images/camotile2.png);
background: linear-gradient(to bottom, rgba(0,0,0,0.5),rgba(0,0,0,0.7)), url(images/camotile2.png);
}
#tunnelMessages {
@@ -1092,8 +1090,8 @@ td.tunnelDestination, td.tunnelDescription {
}
@media screen and (max-width: 1400px) {
h2,h3 {
font-size: 10.5pt;
h2, h3 {
font-size: 11.5pt;
}
}
@@ -1102,4 +1100,133 @@ h2,h3 {
body, td, a, button, input, .control, select, textarea#statusMessages, .freetext, textarea {
font-size: 10pt;
}
h2, h3 {
font-size: 12pt;
}
}
/* TO DO: merge with main classes */
.panel {
min-width: 700px;
}
@media screen and (-webkit-min-device-pixel-ratio:0) { /* fixes chrome/blinkoverflow issue */
select {
white-space: normal;
}
}
label {
vertical-align: sub;
}
input[type="text"] + label {
white-space: nowrap;
vertical-align: unset;
}
#targetPort {
margin-right: 10px !important;
}
#privKeyFile {
min-width: 200px;
width: 200px;
width: calc(100% - 20px);
}
.displayText, .displayText:empty:hover, .displayText:empty:focus {
font-family: "Droid Sans Mono", "Noto Mono", "Lucida Console", "DejaVu Sans Mono", monospace;
width: calc(100% - 10px);
width: 290px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
word-break: break-all;
margin: 5px;
padding: 4px;
-moz-user-select: all;
-webkit-user-select: all;
user-select: all;
border: 1px solid #494;
background: #000;
background: linear-gradient(to bottom, #000 0%, #010 100%);
border-radius: 2px;
box-shadow: inset 0 0 0 1px #000;
}
.displayText:hover, .displayText:focus {
overflow: auto;
text-overflow: clip;
margin: 0.5px 5px;
padding: 2px 4px;
box-shadow: 0 0 1px #494;
background: #000;
color: #ff0;
outline: none;
}
.displayText:empty, .displayText:empty:hover, .displayText:empty:focus {
background: #000;
box-shadow: inset 0 0 0 1px #000;
color: #885;
opacity: 0.8;
}
.displayText:empty::before {
content: "";
display: inline-block;
min-height: 11px;
}
#registration .displayText {
width: 500px;
}
#registration .infohelp {
padding-top: 15px !important;
padding-bottom: 15px !important;
}
#registration input[type="file"] {
margin-top: 5px;
margin-bottom: 5px;
}
#registration td {
padding: 8px;
}
#oldName, #altPrivKeyFile {
width: 45% !important;
}
@media screen and (max-width: 800px) {
.displayText, .displayText:empty:hover, .displayText:empty:focus {
width: 260px;
font-size: 8pt;
}
}
@media screen and (min-width: 1000px) {
.displayText, .displayText:empty:hover, .displayText:empty:focus {
width: 386px;
}
#registration .displayText {
width: 600px;
}
}
@media screen and (min-width: 1500px) {
.displayText, .displayText:empty:hover, .displayText:empty:focus {
width: 552px;
}
#registration .displayText {
width: 800px;
}
}

View File

@@ -15,7 +15,7 @@ body {
body.iframed {
background: transparent url(/themes/console/images/transparent.gif) !important;
padding-top: 5px;
padding: 5px 5px 10px;
}
::selection {
@@ -94,11 +94,6 @@ textarea {
textarea:focus {
box-shadow: inset 0 0 0 1px #89f;
color: #111;
font-weight: bold;
}
textarea[readonly]:focus {
font-weight: normal;
}
textarea#statusMessages {
@@ -165,14 +160,12 @@ hr {
.freetext:focus {
box-shadow: 0 0 1px #89f;
color: #111;
font-weight: bold;
}
.freetext[readonly], .freetext[readonly]:focus {
background: #e9e9e9;
box-shadow: inset 2px 2px 1px rgba(204, 204, 204, 0.6);
color: #333;
font-weight: normal;
}
#clientHost {
@@ -333,13 +326,11 @@ input[type="hidden"], input.default {
}
h2, h3 {
padding: 6px 10px;
padding: 9px 10px 7px 30px;
border: 1px solid #7778bf;
border-radius: 2px 2px 0 0;
background: linear-gradient(to bottom, #fff 50%, #eef 50%) !important;
background: linear-gradient(to bottom, #fff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), linear-gradient(to right, #fff 5%, rgba(231, 231, 255, 0.8) 15%) #fff !important;
font-size: 11pt;
font-size: 11.5pt;
text-transform: uppercase;
letter-spacing: 0.08em;
word-spacing: 0.1em;
@@ -349,46 +340,46 @@ h2, h3 {
position: relative;
}
/* title images */
h2, h3 {
padding-left: 30px;
.iframed h2, .iframed h3 {
margin-top: 14px;
}
/* title images */
#messages h2 {
background: url(/themes/console/images/info/logs.png) left 5px center no-repeat, linear-gradient(to bottom, #fff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), linear-gradient(to right, #fff 15%, rgba(231, 231, 255, 0.8) 35%) #fff !important;
background-size: 20px auto, 100% 100%, 100% 100% !important;
}
#globalTunnelControl h2 {
background: url(/themes/console/images/info/control.png) left 5px center no-repeat, linear-gradient(to bottom, #fff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), linear-gradient(to right, #fff 15%, rgba(231, 231, 255, 0.8) 35%) #fff !important;
background-size: 20px auto, 100% 100%, 100% 100% !important;
}
#servers h2 {
background: url(/themes/console/images/info/server.png) left 5px center no-repeat, linear-gradient(to bottom, #fff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), linear-gradient(to right, #fff 15%, rgba(231, 231, 255, 0.8) 35%) #fff !important;
background-size: 20px auto, 100% 100%, 100% 100% !important;
}
#clients h2 {
background: url(/themes/console/images/info/client.png) left 5px center no-repeat, linear-gradient(to bottom, #fff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), linear-gradient(to right, #fff 15%, rgba(231, 231, 255, 0.8) 35%) #fff !important;
background-size: 20px auto, 100% 100%, 100% 100% !important;
}
#tunnelEditPage h2, #tunnelEditPage h3, #registration h2, #registration h3 {
background: url(/themes/console/images/info/configure.png) left 5px center no-repeat, linear-gradient(to bottom, #fff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), linear-gradient(to right, #fff 15%, rgba(231, 231, 255, 0.8) 35%) #fff !important;
background-size: 20px auto, 100% 100%, 100% 100% !important;
}
#wizardPanel h2 {
background: url(/themes/console/images/info/wizard.png) left 6px center no-repeat, linear-gradient(to bottom, #fff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), linear-gradient(to right, #fff 15%, rgba(231, 231, 255, 0.8) 35%) #fff !important;
background-size: 20px auto, 100% 100%, 100% 100% !important;
background: url(/themes/console/images/info/wizard.png) left 5px center no-repeat, linear-gradient(to bottom, #fff 50%, rgba(255,255,255,0.6) 50%, rgba(240,240,240,0.4)), linear-gradient(to right, #fff 15%, rgba(231, 231, 255, 0.8) 35%) #fff !important;
}
#messages h2, #globalTunnelControl h2, #servers h2, #clients h2, #tunnelEditPage h2, #tunnelEditPage h3, #registration h2, #registration h3, #wizardPanel h2 {
background-size: 18px auto, 100% 100%, 100% 100% !important;
background-position: 7px center, center center, center center !important;
background-position: 7px 60%, center center, center center !important;
}
/* end title images */
.iframed #globalTunnelControl h2 {
margin-top: 2px;
margin-top: 6px;
}
.iframed #globalTunnelControl {
@@ -400,13 +391,14 @@ h2, h3 {
border-collapse: collapse;
border: 1px solid #7778bf;
margin: 0;
background: repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(240, 240, 255, 0.3) 3px, #fff 5px) #fff;
}
th {
background: #eef url(images/header.png) center center repeat-x;
background: linear-gradient(to bottom, #fff 50%, rgba(238, 238, 255, 0.2) 50%, #eef 100%) !important;
color: #333;
padding: 5px;
padding: 6px 5px;
text-align: left;
border-top: 1px solid #7778bf;
border-bottom: 1px solid #7778bf;
@@ -430,8 +422,8 @@ a:hover, a:focus, a:active, button:hover, button:focus, button:active, select:ho
text-shadow: none;
}
.tunnelConfig tr, #wizardPanel tr {
background: repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(240, 240, 255, 0.3) 3px, #fff 5px);
.tunnelConfig tr, #wizardPanel tr, #registration tr {
background: repeating-linear-gradient(135deg, rgba(255,255,255,0.5) 2px, rgba(240, 240, 255, 0.3) 3px, #fff 5px) #fff;
}
#wizardPanel tr:first-child {
@@ -910,7 +902,7 @@ textarea[name="accessList"], #hostField, #localDestination, .authentication {
}
td.tunnelDestination, td.tunnelDescription {
background: linear-gradient(to right, #fff 50%, #eef);
background: linear-gradient(to right, #fff, rgba(255,255,255,0.1) 50%, #eef);
}
#oldDestFile {
@@ -963,9 +955,26 @@ th {
}
}
@media screen and (max-width: 1500px) {
@media screen and (min-width: 1000px) {
#messages h2, #globalTunnelControl h2, #servers h2, #clients h2, #tunnelEditPage h2, #tunnelEditPage h3, #registration h2, #registration h3, #wizardPanel h2 {
background-position: 7px 58%, center center, center center !important;
}
}
@media screen and (min-width: 1200px) {
h2, h3 {
font-size: 10.5pt !important;
padding: 10px 10px 8px 30px;
font-size: 12pt;
}
#messages h2, #globalTunnelControl h2, #servers h2, #clients h2, #tunnelEditPage h2, #tunnelEditPage h3, #registration h2, #registration h3, #wizardPanel h2 {
background-size: 20px auto, 100% 100%, 100% 100% !important;
padding-left: 33px !important;
}
th {
padding-top: 7px;
padding-bottom: 7px;
}
}
@@ -975,7 +984,7 @@ body, select, .control, input, textarea, .freetext {
}
h2, h3 {
padding: 10px 10px 8px 30px;
font-size: 12.5pt;
}
th {
@@ -1008,3 +1017,119 @@ _:-ms-lang(x), td.tunnelDestination, td.tunnelDescription {
}
/* end Edge/IE tweaks */
/* TO DO: merge with main classes */
.panel {
min-width: 650px;
}
@media screen and (-webkit-min-device-pixel-ratio:0) { /* fixes chrome/blinkoverflow issue */
select {
white-space: normal;
}
}
label {
vertical-align: sub;
}
input[type="text"] + label {
white-space: nowrap;
}
#targetPort {
margin-right: 10px !important;
}
#privKeyFile {
min-width: 200px;
max-width: 400px;
width: 200px;
width: calc(100% - 100px);
}
#oldName, #altPrivKeyFile {
width: 45% !important;
}
.displayText, .displayText:empty:hover, .displayText:empty:focus {
font-family: "Droid Sans Mono", "Noto Mono", "Lucida Console", "DejaVu Sans Mono", monospace;
width: calc(100% - 10px);
width: 290px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
word-break: break-all;
margin: 5px;
padding: 4px;
-moz-user-select: all;
-webkit-user-select: all;
user-select: all;
border: 1px solid #999;
background: #fff;
border-radius: 2px;
box-shadow: inset 2px 2px 1px rgba(204, 204, 204, 0.6);
}
.displayText:empty, .displayText:empty:hover, .displayText:empty:focus {
background: #e9e9e9;
}
.displayText:empty::before {
content: "";
display: inline-block;
min-height: 11px;
}
.displayText:hover, .displayText:focus {
overflow: auto;
text-overflow: clip;
margin: 0.5px 5px;
padding: 2px 4px;
box-shadow: 0 0 1px #89f;
background: #ffe;
outline: none;
}
#registration .displayText {
width: 500px;
}
#registration .infohelp {
padding-top: 15px !important;
padding-bottom: 15px !important;
}
#registration input[type="file"] {
margin-top: 5px;
margin-bottom: 5px;
}
@media screen and (max-width: 800px) {
.displayText, .displayText:empty:hover, .displayText:empty:focus {
width: 260px;
font-size: 8pt;
}
}
@media screen and (min-width: 1000px) {
.displayText, .displayText:empty:hover, .displayText:empty:focus {
width: 386px;
}
#registration .displayText {
width: 600px;
}
}
@media screen and (min-width: 1500px) {
.displayText, .displayText:empty:hover, .displayText:empty:focus {
width: 552px;
}
#registration .displayText {
width: 800px;
}
}

View File

@@ -2,7 +2,7 @@
/* Author: dr|z3d. */
body {
margin: 0;
margin: 5px 0 15px;
padding: 0;
text-align: center;
font-family: "Droid Sans", "Noto Sans", Ubuntu, "Segoe UI", "Lucida Grande", Verdana, Helvetica, sans-serif;
@@ -13,6 +13,7 @@ body {
body.iframed {
background: transparent url(/themes/console/images/transparent.gif) !important;
margin: 0 5px;
padding: 0;
overflow: hidden;
}
@@ -137,11 +138,11 @@ hr {
}
.iframed .panel.iframed {
margin: 0 auto -8px auto !important;
margin: 0 auto -8px !important;
}
.iframed .panel {
margin: 16px auto -8px auto !important;
margin: 16px auto -8px !important;
width: 100%;
}
@@ -158,24 +159,20 @@ hr {
}
h2, h3 {
padding: 7px 10px;
padding: 8px 10px;
border: 1px solid #2d295f;
background: linear-gradient(to bottom, #191729 50%, #000 50%) !important;
font-size: 11pt;
text-transform: uppercase;
letter-spacing: 0.08em;
word-spacing: 0.1em;
margin: 5px 0 -1px;
margin: 12px 0 -1px;
color: #c9ceff;
box-shadow: inset 0 0 0 1px #000;
}
h3 {
margin-top: 10px;
}
.iframed h2 {
margin: 10px 0 -1px;
.iframed h2, .iframed h3 {
margin: 14px 0 -1px;
}
/* title images */
@@ -222,7 +219,7 @@ h2, h3 {
/* end title images */
.iframed #globalTunnelControl h2 {
margin-top: 2px;
margin-top: 6px;
}
.panel table {
@@ -1033,6 +1030,12 @@ h2, h3 {
}
}
@media screen and (min-width: 1000px) {
th {
padding: 7px 5px;
}
}
@media screen and (min-width: 1300px) {
body, td, .control, select, input, textarea {
font-size: 10pt !important;
@@ -1047,4 +1050,139 @@ td {
}
}
/* end responsive layout */
/* end responsive layout */
/* TO DO: merge with main classes */
.panel {
min-width: 600px;
}
@media screen and (-webkit-min-device-pixel-ratio:0) { /* fixes chrome/blinkoverflow issue */
select {
white-space: normal;
}
}
label {
vertical-align: sub;
}
input[type="text"] + label {
white-space: nowrap;
vertical-align: unset;
}
#targetPort {
margin-right: 10px !important;
}
#privKeyFile {
min-width: 200px;
width: 200px;
width: calc(100% - 20px);
}
#oldName, #altPrivKeyFile {
width: 45% !important;
}
.displayText {
font-family: "Droid Sans Mono", "Noto Mono", "Lucida Console", "DejaVu Sans Mono", monospace;
width: calc(100% - 10px);
width: 290px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
word-break: break-all;
margin: 5px;
padding: 4px;
-moz-user-select: all;
-webkit-user-select: all;
user-select: all;
border: 1px solid #443da0;
background: #000;
background: linear-gradient(to bottom, #000 0%, #000019 100%);
color: #7670c2;
border-radius: 2px;
box-shadow: inset 0 0 0 1px #000;
}
.displayText:hover, .displayText:focus {
overflow: auto;
text-overflow: clip;
margin: 0.5px 5px;
padding: 2px 4px;
background: #000;
color: #dd0;
outline: none;
}
.displayText:focus {
box-shadow: 0 0 0 1px rgba(101, 39, 135, 0.5);
filter: drop-shadow(0px 0 1px #99f);
transition: ease filter 0.3s;
}
.displayText:empty, .displayText:empty:hover, .displayText:empty:focus {
margin: 5px;
padding: 4px;
background: #000;
box-shadow: inset 0 0 0 1px #000 !important;
filter: none !important;
color: #669;
opacity: 0.8;
}
.displayText:empty::before, .displayText:hover:empty::before, .displayText:focus:empty::before {
content: "";
display: inline-block;
min-height: 11px;
overflow: hidden;
}
#registration .displayText {
width: 500px;
}
#registration .infohelp {
padding-top: 15px !important;
padding-bottom: 15px !important;
}
#registration input[type="file"] {
margin-top: 5px;
margin-bottom: 5px;
}
#registration td {
padding: 8px;
}
@media screen and (max-width: 800px) {
.displayText, .displayText:empty:hover, .displayText:empty:focus {
width: 260px;
font-size: 8pt;
}
}
@media screen and (min-width: 1000px) {
.displayText, .displayText:empty:hover, .displayText:empty:focus {
width: 386px;
}
#registration .displayText {
width: 600px;
}
}
@media screen and (min-width: 1500px) {
.displayText, .displayText:empty:hover, .displayText:empty:focus {
width: 552px;
}
#registration .displayText {
width: 800px;
}
}