source: apps/i2ptunnel/jsp/editClient.jsp @ 674f523

Last change on this file since 674f523 was 674f523, checked in by str4d <str4d@…>, 4 years ago

Add JavaScript? snippet to reset dest address scroll position onblur

Fixes Chrome/Blink? disappearing text bugs in i2ptunnel and susidns.

  • Property mode set to 100644
File size: 35.1 KB
Line 
1<%@page contentType="text/html" import="net.i2p.i2ptunnel.web.EditBean"
2%><%@page trimDirectiveWhitespaces="true"
3%><?xml version="1.0" encoding="UTF-8"?>
4<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
5<jsp:useBean class="net.i2p.i2ptunnel.web.EditBean" id="editBean" scope="request" />
6<jsp:useBean class="net.i2p.i2ptunnel.web.Messages" id="intl" scope="request" />
7<% String tun = request.getParameter("tunnel");
8   int curTunnel = -1;
9   if (tun != null) {
10     try {
11       curTunnel = Integer.parseInt(tun);
12     } catch (NumberFormatException nfe) {
13       curTunnel = -1;
14     }
15   }
16%>
17
18<%
19    response.setHeader("Content-Security-Policy", "default-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'");
20%>
21
22<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
23<head>
24    <title><%=intl._t("Hidden Services Manager")%> - <%=intl._t("Edit Client Tunnel")%></title>
25    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
26    <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
27    <link href="/themes/console/images/favicon.ico" type="image/x-icon" rel="shortcut icon" />
28
29    <% if (editBean.allowCSS()) {
30  %><link rel="icon" href="<%=editBean.getTheme()%>images/favicon.ico" />
31    <link href="<%=editBean.getTheme()%>i2ptunnel.css?<%=net.i2p.CoreVersion.VERSION%>" rel="stylesheet" type="text/css" /> 
32    <% }
33  %>
34<style type='text/css'>
35input.default { width: 1px; height: 1px; visibility: hidden; }
36</style>
37<script src="/js/resetScroll.js" type="text/javascript"></script>
38</head>
39<body id="tunnelEditPage">
40
41<%
42
43  if (editBean.isInitialized()) {
44
45%>
46    <form method="post" action="list">
47
48        <div class="panel">
49                <%
50                String tunnelTypeName;
51                String tunnelType;
52                if (curTunnel >= 0) {
53                    tunnelTypeName = editBean.getTunnelType(curTunnel);
54                    tunnelType = editBean.getInternalType(curTunnel);
55                  %><h2><%=intl._t("Edit proxy settings")%> (<%=editBean.getTunnelName(curTunnel)%>)</h2><% 
56                } else {
57                    tunnelTypeName = editBean.getTypeName(request.getParameter("type"));
58                    tunnelType = net.i2p.data.DataHelper.stripHTML(request.getParameter("type"));
59                  %><h2><%=intl._t("New proxy settings")%></h2><% 
60                } %>
61                <input type="hidden" name="tunnel" value="<%=curTunnel%>" />
62                <input type="hidden" name="nonce" value="<%=net.i2p.i2ptunnel.web.IndexBean.getNextNonce()%>" />
63                <input type="hidden" name="type" value="<%=tunnelType%>" />
64                <%
65                // these are four keys that are generated automatically on first save,
66                // and we want to persist in i2ptunnel.config, but don't want to
67                // show clogging up the custom options form.
68                String key = editBean.getKey1(curTunnel);
69                if (key != null && key.length() > 0) { %>
70                    <input type="hidden" name="key1" value="<%=key%>" />
71                <% }
72                key = editBean.getKey2(curTunnel);
73                if (key != null && key.length() > 0) { %>
74                    <input type="hidden" name="key2" value="<%=key%>" />
75                <% }
76                key = editBean.getKey3(curTunnel);
77                if (key != null && key.length() > 0) { %>
78                    <input type="hidden" name="key3" value="<%=key%>" />
79                <% }
80                key = editBean.getKey4(curTunnel);
81                if (key != null && key.length() > 0) { %>
82                    <input type="hidden" name="key4" value="<%=key%>" />
83                <% } %>
84                <input type="submit" class="default" name="action" value="Save changes" />
85
86    <table id="clientTunnelEdit" class="tunnelConfig">
87        <tr>
88            <th>
89                <%=intl._t("Name")%>
90            </th>
91            <th>
92                <%=intl._t("Type")%>
93            </th>
94        </tr>
95        <tr>
96            <td>
97                <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" />
98            </td>
99            <td>
100                <%=tunnelTypeName%>
101            </td>
102        </tr>
103
104        <tr>
105            <th>
106                <%=intl._t("Description")%>
107            </th>
108
109            <th>
110                <%=intl._t("Auto Start Tunnel")%>
111            </th>
112        </tr>
113
114        <tr>
115            <td>
116                <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" />
117            </td>
118
119            <td>
120                <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" />
121                <%=intl._t("Automatically start tunnel when router starts")%></label>
122            </td>
123        </tr>
124
125        <tr>
126            <th colspan="2">
127         <% if ("streamrclient".equals(tunnelType)) { %>
128                <%=intl._t("Target")%>
129         <% } else { %>
130                <%=intl._t("Access Point")%>
131         <% } /* streamrclient */ %>
132            </th>
133        </tr>
134        <tr>
135            <td>
136                <b><%=intl._t("Port")%>:</b>
137                    <% String value = editBean.getClientPort(curTunnel);
138                       if (value == null || "".equals(value.trim())) {
139                           out.write(" <span class=\"required\"><font color=\"red\">(");
140                           out.write(intl._t("required"));
141                           out.write(")</font></span>");
142                       }
143                     %>
144                <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" />
145            </td>
146
147         <%
148            if ("streamrclient".equals(tunnelType)) { %>
149            <td>
150                <b><%=intl._t("Host")%>:</b>
151                    <%
152                       String targetHost = editBean.getTargetHost(curTunnel);
153                       if (targetHost == null || "".equals(targetHost.trim())) {
154                           out.write(" <span class=\"required\"><font color=\"red\">(");
155                           out.write(intl._t("required"));
156                           out.write(")</font></span>");
157                       }
158          %>
159
160                <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" />
161            </td>
162         <% } else { %>
163
164            <td>
165                <b><%=intl._t("Reachable by")%>:</b>
166
167                <select id="reachableBy" name="reachableBy" title="<%=intl._t("Local interface (ip address) the client tunnel will be reachable from")%>" class="selectbox")%>">
168              <%
169                    String clientInterface = editBean.getClientInterface(curTunnel);
170                    for (String ifc : editBean.interfaceSet()) {
171                        out.write("<option value=\"");
172                        out.write(ifc);
173                        out.write('\"');
174                        if (ifc.equals(clientInterface))
175                            out.write(" selected=\"selected\"");
176                        out.write('>');
177                        out.write(ifc);
178                        out.write("</option>\n");
179                    }
180              %>
181                </select>
182            </td>
183         <% } /* streamrclient */ %>
184        </tr>
185
186         <% if ("client".equals(tunnelType) || "ircclient".equals(tunnelType)) {
187          %>
188        <tr>
189            <th colspan="2">
190                    <%=intl._t("Use SSL?")%>
191            </th>
192        </tr>
193        <tr>
194            <td colspan="2">
195                <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" />
196                <%=intl._t("Clients use SSL to connect to tunnel")%></label>
197            </td>
198        </tr>
199         <% } /* tunnel types */ %>
200
201            <% if ("httpclient".equals(tunnelType) || "connectclient".equals(tunnelType) || "sockstunnel".equals(tunnelType) || "socksirctunnel".equals(tunnelType)) {
202          %>
203        <tr>
204            <th colspan="2">
205                    <%=intl._t("Outproxies")%>
206            </th>
207        </tr>
208        <tr>
209            <td colspan="2">
210                <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" />
211            </td>
212        </tr>
213
214              <% if ("httpclient".equals(tunnelType)) {
215                 %>
216        <tr>
217            <th colspan="2">
218                       <%=intl._t("SSL Outproxies")%>
219            </th>
220        </tr>
221        <tr>
222            <td colspan="2">
223                   <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" />
224            </td>
225        </tr>
226
227              <% }  // httpclient %>
228        <tr>
229            <th colspan="2">
230                    <%=intl._t("Use Outproxy Plugin")%>
231
232            </th>
233        </tr>
234        <tr>
235            <td colspan="2">
236
237                <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" />
238<%=intl._t("Use plugin instead of above-listed proxies if available")%></label>
239            </td>
240        </tr>
241            <% } else if ("client".equals(tunnelType) || "ircclient".equals(tunnelType) || "streamrclient".equals(tunnelType)) {
242          %>
243        <tr>
244            <th colspan="2">
245                    <%=intl._t("Tunnel Destination")%>
246            </th>
247        </tr>
248        <tr>
249            <td colspan="2">
250                    <% String value2 = editBean.getClientDestination(curTunnel);
251                       if (value2 == null || "".equals(value2.trim())) {
252                           out.write(" <span class=\"required\"><font color=\"red\">(");
253                           out.write(intl._t("required"));
254                           out.write(")</font></span>");
255                       }
256                     %>
257
258                <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" />
259                (<%=intl._t("name, name:port, or destination")%>
260                     <% if ("streamrclient".equals(tunnelType)) { /* deferred resolution unimplemented in streamr client */ %>
261                         - <%=intl._t("b32 not recommended")%>
262                     <% } %> )
263            </td>
264        </tr>
265
266         <% } %>
267
268         <% if (!"streamrclient".equals(tunnelType)) { %>
269        <tr>
270            <th colspan="2">
271                <%=intl._t("Shared Client")%>
272            </th>
273        </tr>
274        <tr>
275            <td colspan="2">
276                <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" />
277                <%=intl._t("Share tunnels with other clients and irc/httpclients? (Change requires restart of client proxy tunnel)")%></label>
278            </td>
279        </tr>
280
281         <% } // !streamrclient %>
282
283         <% if ("ircclient".equals(tunnelType)) { %>
284        <tr>
285            <th colspan="2">
286                    <%=intl._t("Enable DCC")%>
287            </th>
288        </tr>
289        <tr>
290            <td colspan="2">
291                <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" />
292                <%=intl._t("Enable Direct Client-to-Client protocol. Note that this will compromise your anonymity and is <i>not</i> recommended.")%></label>
293            </td>
294        </tr>
295
296         <% } // ircclient %>
297    </table>
298
299    <h3><%=intl._t("Advanced networking options")%></h3>
300
301    <table class="tunnelConfig">
302
303
304<% if (!"streamrclient".equals(tunnelType)) { %> <% // no shared client tunnels for streamr %>
305        <tr>
306            <td class="infohelp" colspan="2">
307                <%=intl._t("Note: When this client proxy is configured to share tunnels, then these options are for all the shared proxy clients!")%>
308            </td>
309        </tr>
310         <% } // !streamrclient %>
311        <tr>
312            <th colspan="2">
313                <%=intl._t("Tunnel Options")%>
314            </th>
315        </tr>
316        <tr>
317            <td>
318                <b><%=intl._t("Length")%></b>
319            </td>
320
321            <td>
322                <b><%=intl._t("Variance")%></b>
323            </td>
324        </tr>
325
326        <tr>
327            <td>
328                <select id="tunnelDepth" name="tunnelDepth" title="<%=intl._t("Length of each Tunnel")%>" class="selectbox">
329                    <% int tunnelDepth = editBean.getTunnelDepth(curTunnel, 3);
330                  %><option value="0"<%=(tunnelDepth == 0 ? " selected=\"selected\"" : "") %>><%=intl._t("0 hop tunnel (no anonymity)")%></option>
331                    <option value="1"<%=(tunnelDepth == 1 ? " selected=\"selected\"" : "") %>><%=intl._t("1 hop tunnel (low anonymity)")%></option>
332                    <option value="2"<%=(tunnelDepth == 2 ? " selected=\"selected\"" : "") %>><%=intl._t("2 hop tunnel (medium anonymity)")%></option>
333                    <option value="3"<%=(tunnelDepth == 3 ? " selected=\"selected\"" : "") %>><%=intl._t("3 hop tunnel (high anonymity)")%></option>
334                <% if (editBean.isAdvanced()) {
335                  %><option value="4"<%=(tunnelDepth == 4 ? " selected=\"selected\"" : "") %>>4 hop tunnel</option>
336                    <option value="5"<%=(tunnelDepth == 5 ? " selected=\"selected\"" : "") %>>5 hop tunnel</option>
337                    <option value="6"<%=(tunnelDepth == 6 ? " selected=\"selected\"" : "") %>>6 hop tunnel</option>
338                    <option value="7"<%=(tunnelDepth == 7 ? " selected=\"selected\"" : "") %>>7 hop tunnel</option>
339                <% } else if (tunnelDepth > 3) { 
340                %>    <option value="<%=tunnelDepth%>" selected="selected"><%=tunnelDepth%> <%=intl._t("hop tunnel (very poor performance)")%></option>
341                <% }
342              %></select>
343            </td>
344
345            <td>
346                <select id="tunnelVariance" name="tunnelVariance" title="<%=intl._t("Level of Randomization for Tunnel Length")%>" class="selectbox">
347                    <% int tunnelVariance = editBean.getTunnelVariance(curTunnel, 0);
348                  %><option value="0"<%=(tunnelVariance  ==  0 ? " selected=\"selected\"" : "") %>><%=intl._t("0 hop variance (no randomization, consistent performance)")%></option>
349                    <option value="1"<%=(tunnelVariance  ==  1 ? " selected=\"selected\"" : "") %>><%=intl._t("+ 0-1 hop variance (medium additive randomization, subtractive performance)")%></option>
350                    <option value="2"<%=(tunnelVariance  ==  2 ? " selected=\"selected\"" : "") %>><%=intl._t("+ 0-2 hop variance (high additive randomization, subtractive performance)")%></option>
351                    <option value="-1"<%=(tunnelVariance == -1 ? " selected=\"selected\"" : "") %>><%=intl._t("+/- 0-1 hop variance (standard randomization, standard performance)")%></option>
352                    <option value="-2"<%=(tunnelVariance == -2 ? " selected=\"selected\"" : "") %>><%=intl._t("+/- 0-2 hop variance (not recommended)")%></option>
353                <% if (tunnelVariance > 2 || tunnelVariance < -2) {
354                %>    <option value="<%=tunnelVariance%>" selected="selected"><%= (tunnelVariance > 2 ? "+ " : "+/- ") %>0-<%=tunnelVariance%> <%=intl._t("hop variance")%></option>
355                <% }
356              %></select>
357            </td>
358        </tr>
359        <tr>
360            <td>
361                <b><%=intl._t("Count")%></b>
362            </td>
363
364            <td>
365                <b><%=intl._t("Backup Count")%></b>
366            </td>
367        </tr>
368
369        <tr>
370            <td>
371                <select id="tunnelQuantity" name="tunnelQuantity" title="<%=intl._t("Number of Tunnels in Group")%>" class="selectbox">
372                    <%=editBean.getQuantityOptions(curTunnel)%>
373                </select>
374            </td>
375
376            <td>
377                <select id="tunnelBackupQuantity" name="tunnelBackupQuantity" title="<%=intl._t("Number of Reserve Tunnels")%>" class="selectbox">
378                    <% int tunnelBackupQuantity = editBean.getTunnelBackupQuantity(curTunnel, 0);
379                  %><option value="0"<%=(tunnelBackupQuantity == 0 ? " selected=\"selected\"" : "") %>><%=intl._t("0 backup tunnels (0 redundancy, no added resource usage)")%></option>
380                    <option value="1"<%=(tunnelBackupQuantity == 1 ? " selected=\"selected\"" : "") %>><%=intl._t("1 backup tunnel each direction (low redundancy, low resource usage)")%></option>
381                    <option value="2"<%=(tunnelBackupQuantity == 2 ? " selected=\"selected\"" : "") %>><%=intl._t("2 backup tunnels each direction (medium redundancy, medium resource usage)")%></option>
382                    <option value="3"<%=(tunnelBackupQuantity == 3 ? " selected=\"selected\"" : "") %>><%=intl._t("3 backup tunnels each direction (high redundancy, high resource usage)")%></option>
383                <% if (tunnelBackupQuantity > 3) {
384                %>    <option value="<%=tunnelBackupQuantity%>" selected="selected"><%=tunnelBackupQuantity%> <%=intl._t("backup tunnels")%></option>
385                <% }
386              %></select>
387            </td>
388        </tr>
389
390
391         <% if (!"streamrclient".equals(tunnelType)) { %>
392        <tr>
393            <th>
394                <%=intl._t("Profile")%>
395            </th>
396
397            <th>
398                <%=intl._t("Delay Connect")%>
399            </th>
400
401        </tr>
402
403        <tr>
404            <td>
405                <select id="connectionProfile" name="profile" title="<%=intl._t("Connection Profile")%>" class="selectbox">
406                    <% boolean interactiveProfile = editBean.isInteractive(curTunnel);
407                  %><option <%=(interactiveProfile == true  ? "selected=\"selected\" " : "")%>value="interactive"><%=intl._t("interactive connection")%> </option>
408                    <option <%=(interactiveProfile == false ? "selected=\"selected\" " : "")%>value="bulk"><%=intl._t("bulk connection (downloads/websites/BT)")%> </option>
409                </select>
410            </td>
411
412            <td>
413                <label title="<%=intl._t("Delay Connection")%>"><input value="1000" type="checkbox" name="connectDelay"<%=(editBean.shouldDelay(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
414                (<%=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? %>
415            </td>
416        </tr>
417         <% } // !streamrclient %>
418
419        <tr>
420            <th colspan="2">
421                <%=intl._t("Router I2CP Address")%>
422            </th>
423        </tr>
424
425        <tr>
426            <td>
427                <b><%=intl._t("Host")%>:</b>
428                <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" <% } %> />
429            </td>
430
431
432            <td>
433                <b><%=intl._t("Port")%>:</b>
434                <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" <% } %> />
435            </td>
436        </tr>
437
438         <% if (!"streamrclient".equals(tunnelType)) { // streamr client sends pings so it will never be idle %>
439
440        <tr>
441            <th colspan="2">
442                <%=intl._t("Delay tunnel open until required")%>
443            </th>
444        </tr>
445
446        <tr>
447            <td colspan="2">
448                <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" />
449                <%=intl._t("Delay opening client tunnel until activity is detected on the configured tunnel port")%></label>
450            </td>
451        </tr>
452
453         <% } // !streamrclient %>
454
455        <tr>
456            <th colspan="2">
457                <%=intl._t("Reduce tunnel quantity when idle")%>
458            </th>
459        </tr>
460
461        <tr>
462            <td colspan="2">
463                <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" />
464                <%=intl._t("Reduce tunnel quantity when idle to conserve resources")%></label>
465            </td>
466        </tr>
467
468        <tr>
469            <td>
470                <b><%=intl._t("Reduced tunnel count")%>:</b>
471                <input type="text" id="reducedTunnelCount" name="reduceCount" size="1" maxlength="1" title="<%=intl._t("Reduced tunnel count")%>" value="<%=editBean.getReduceCount(curTunnel)%>" class="freetext quantity" />
472            </td>
473
474            <td>
475                <b><%=intl._t("Idle period")%>:</b>
476                <input type="text" name="reduceTime" size="4" maxlength="4" title="<%=intl._t("Reduced Tunnel Idle Time")%>" value="<%=editBean.getReduceTime(curTunnel)%>" class="freetext period" />
477                minutes
478            </td>
479        </tr>
480
481        <tr>
482            <th colspan="2">
483                <%=intl._t("Close tunnels when idle")%>
484            </th>
485        </tr>
486
487        <tr>
488            <td>
489                <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" />
490                <%=intl._t("Close client tunnels after specified idle period")%></label>
491            </td>
492
493            <td>
494                <b><%=intl._t("Idle period")%>:</b>
495                <input type="text" name="closeTime" size="4" maxlength="4" title="<%=intl._t("Close Tunnel Idle Time")%>" value="<%=editBean.getCloseTime(curTunnel)%>" class="freetext period" />
496                minutes
497            </td>
498        </tr>
499
500        <tr>
501            <td colspan="2">
502                <b><%=intl._t("New Keys on Reopen")%>:</b>
503                <span class="multiOption">
504                    <label title="<%=intl._t("Change tunnel identity (destination) when tunnels reopen")%>"><input value="1" type="radio" name="newDest"
505                        <%=(editBean.getNewDest(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
506                    <%=intl._t("Enable")%></label>
507                </span>
508                <span class="multiOption">
509                    <label title="<%=intl._t("Retain tunnel identity (destination) when tunnels reopen")%>"><input value="0" type="radio" name="newDest"
510                        <%=(editBean.getNewDest(curTunnel) || editBean.getPersistentClientKey(curTunnel) ? "" : " checked=\"checked\"")%> class="tickbox" />
511                    <%=intl._t("Disable")%></label>
512                </span>
513            </td>
514        </tr>
515
516         <% if ("client".equals(tunnelType) || "ircclient".equals(tunnelType) || "socksirctunnel".equals(tunnelType) || "sockstunnel".equals(tunnelType)) { %>
517
518        <tr>
519            <th colspan="2">
520                <%=intl._t("Persistent private key")%>
521            </th>
522        </tr>
523        <tr>
524            <td>
525                <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"
526                     <%=(editBean.getPersistentClientKey(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
527                <%=intl._t("Generate key to enable persistent client tunnel identity")%></label>
528            </td>
529            <td>
530                <b><%=intl._t("File")%>:</b>
531                <input type="text" size="30" id="privKeyFile" name="privKeyFile" title="<%=intl._t("Path to Private Key File")%>" value="<%=editBean.getPrivateKeyFile(curTunnel)%>" class="freetext" />
532            </td>
533        </tr>
534         <%
535            String destb64 = editBean.getDestinationBase64(curTunnel);
536            if (destb64.length() > 0) {
537           %>
538
539        <tr>
540            <td colspan="2">
541                <b><%=intl._t("Local destination")%></b>
542            </td>
543        </tr>
544
545        <tr>
546            <td colspan="2">
547                <div class="displayText" title="<%=intl._t("Read Only: Local Destination (if known)")%>" tabindex="0" onblur="resetScrollLeft(this)"><%=destb64%></div>
548            </td>
549        </tr>
550
551        <tr>
552            <td colspan="2">
553                <b><%=intl._t("Local Base 32")%>:</b>&nbsp;
554                <%=editBean.getDestHashBase32(curTunnel)%>
555            </td>
556        </tr>
557
558         <% } // if destb64  %>
559         <% } %>
560
561         <% if ("httpclient".equals(tunnelType)) { %>
562
563        <tr>
564            <th colspan="2">
565                <%=intl._t("HTTP Filtering")%>
566            </th>
567        </tr>
568
569        <tr>
570            <td>
571                <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" />
572                <%=intl._t("Do not spoof User-Agent header")%></label>
573            </td>
574            <td>
575                <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" />
576                <%=intl._t("Do not block Referer header")%></label>
577            </td>
578        </tr>
579
580        <tr>
581            <td>
582                <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" />
583<%=intl._t("Do not block Accept headers")%></label>
584            </td>
585
586            <td>
587                <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" />
588                <%=intl._t("Allow SSL to I2P addresses")%></label>
589            </td>
590        </tr>
591         <% } // if httpclient %>
592
593         <% if (true /* editBean.isAdvanced() */ ) {
594                int currentSigType = editBean.getSigType(curTunnel, tunnelType);
595           %>
596        <tr>
597            <th colspan="2">
598                <%=intl._t("Signature type")%> (<%=intl._t("Experts only!")%>)
599            </th>
600        </tr>
601
602        <tr>
603            <td colspan="2">
604                <span class="multiOption">
605                    <label title="<%=intl._t("Legacy option (deprecated), provided for backward compatibility")%>"><input value="0" type="radio" name="sigType"<%=(currentSigType==0 ? " checked=\"checked\"" : "")%> class="tickbox" />
606                    DSA-SHA1</label>
607                </span>
608
609           <% if (editBean.isSigTypeAvailable(1)) { %>
610
611                <span class="multiOption">
612                    <label><input value="1" type="radio" name="sigType"<%=(currentSigType==1 ? " checked=\"checked\"" : "")%> class="tickbox" />
613                    ECDSA-P256</label>
614                </span>
615
616           <% }
617
618              if (editBean.isSigTypeAvailable(2)) { %>
619
620                <span class="multiOption">
621                    <label><input value="2" type="radio" name="sigType"<%=(currentSigType==2 ? " checked=\"checked\"" : "")%> class="tickbox" />
622                    ECDSA-P384</label>
623                </span>
624
625           <% }
626              if (editBean.isSigTypeAvailable(3)) { %>
627
628                <span class="multiOption">
629                    <label><input value="3" type="radio" name="sigType"<%=(currentSigType==3 ? " checked=\"checked\"" : "")%> class="tickbox" />
630                    ECDSA-P521</label>
631                </span>
632
633           <% }
634              if (editBean.isSigTypeAvailable(7)) { %>
635
636                <span class="multiOption">
637                    <label title="<%=intl._t("This is the default, recommended option")%>"><input value="7" type="radio" name="sigType"<%=(currentSigType==7 ? " checked=\"checked\"" : "")%> class="tickbox" />
638                    Ed25519-SHA-512</label>
639                </span>
640            </td>
641        </tr>
642           <% }   // isAvailable %>
643
644         <% } // isAdvanced %>
645
646         <% if ("httpclient".equals(tunnelType) || "connectclient".equals(tunnelType) || "sockstunnel".equals(tunnelType) || "socksirctunnel".equals(tunnelType)) { %>
647        <tr>
648            <th colspan="2">
649                <%=intl._t("Local Authorization")%>
650            </th>
651        </tr>
652        <tr>
653            <td colspan="2">
654                <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" />
655                <%=intl._t("Require local authorization for this service")%></label>
656            </td>
657        </tr>
658
659        <tr>
660            <td>
661                <b><%=intl._t("Username")%>:</b>
662                <input type="text" name="proxyUsername" title="<%=intl._t("Set username required to access this service")%>" value="" class="freetext username" />
663            </td>
664            <td>
665                <b><%=intl._t("Password")%>:</b>
666                <input type="password" name="nofilter_proxyPassword" title="<%=intl._t("Set password required to access this service")%>" value="" class="freetext password" />
667            </td>
668        </tr>
669
670        <tr>
671            <th colspan="2">
672                <%=intl._t("Outproxy Authorization")%>
673            </th>
674        </tr>
675        <tr>
676            <td colspan="2">
677                <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" />
678                <%=intl._t("Outproxy requires authorization")%></label>
679            </td>
680        </tr>
681
682        <tr>
683            <td>
684                <b><%=intl._t("Username")%>:</b>
685                <input type="text" name="outproxyUsername" title="<%=intl._t("Enter username required by outproxy")%>" value="<%=editBean.getOutproxyUsername(curTunnel)%>" class="freetext username" />
686            </td>
687
688            <td>
689                <b><%=intl._t("Password")%>:</b>
690                <input type="password" name="nofilter_outproxyPassword" title="<%=intl._t("Enter password required by outproxy")%>" value="<%=editBean.getOutproxyPassword(curTunnel)%>" class="freetext password" />
691            </td>
692        </tr>
693
694         <% } // httpclient || connect || socks || socksirc %>
695
696         <% if ("httpclient".equals(tunnelType)) { %>
697
698        <tr>
699            <th colspan="2">
700                <%=intl._t("Jump URL List")%>
701            </th>
702        </tr>
703        <tr>
704            <td colspan="2">
705                <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>
706            </td>
707        </tr>
708
709         <% } // httpclient %>
710
711        <tr>
712            <th colspan="2">
713                <%=intl._t("Custom options")%>
714            </th>
715        </tr>
716
717        <tr>
718            <td colspan="2">
719                <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"/>
720            </td>
721        </tr>
722
723        <tr>
724            <td class="buttons" colspan="2">
725                    <input type="hidden" value="true" name="removeConfirm" />
726                    <button id="controlCancel" class="control" type="submit" name="action" value=""><%=intl._t("Cancel")%></button>
727                    <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>
728                    <button id="controlSave" class="control" type="submit" name="action" value="Save changes"><%=intl._t("Save")%></button>
729            </td>
730        </tr>
731    </table>
732</div>
733</form>
734
735<%
736
737  } else {
738     %><div id="notReady"><%=intl._t("Tunnels not initialized yet; please retry in a few moments.")%></div><%
739  }  // isInitialized()
740
741%>
742    </body>
743</html>
Note: See TracBrowser for help on using the repository browser.