source: apps/i2ptunnel/jsp/editServer.jsi @ 7bdfd07

Last change on this file since 7bdfd07 was 7bdfd07, checked in by zzz <zzz@…>, 18 months ago

i2ptunnel: select box for sig type

  • Property mode set to 100644
File size: 49.4 KB
Line 
1<%
2                String tunnelTypeName;
3                String tunnelType;
4                if (curTunnel >= 0) {
5                    tunnelTypeName = editBean.getTunnelType(curTunnel);
6                    tunnelType = editBean.getInternalType(curTunnel);
7                  %><h2><%=intl._t("Edit Server Settings")%> (<%=editBean.getTunnelName(curTunnel)%>)</h2><%
8                } else {
9                    tunnelTypeName = editBean.getTypeName(request.getParameter("type"));
10                    tunnelType = net.i2p.data.DataHelper.stripHTML(request.getParameter("type"));
11                  %><h2><%=intl._t("New Server Settings")%></h2><%
12                } %>
13                <input type="hidden" name="tunnel" value="<%=curTunnel%>" />
14                <input type="hidden" name="nonce" value="<%=net.i2p.i2ptunnel.web.IndexBean.getNextNonce()%>" />
15                <input type="hidden" name="type" value="<%=tunnelType%>" />
16<%
17                // these are four keys that are generated automatically on first save,
18                // and we want to persist in i2ptunnel.config, but don't want to
19                // show clogging up the custom options form.
20                String key = editBean.getKey1(curTunnel);
21                if (key != null && key.length() > 0) { %>
22                    <input type="hidden" name="key1" value="<%=key%>" />
23<%              }
24                key = editBean.getKey2(curTunnel);
25                if (key != null && key.length() > 0) { %>
26                    <input type="hidden" name="key2" value="<%=key%>" />
27<%              }
28                key = editBean.getKey3(curTunnel);
29                if (key != null && key.length() > 0) { %>
30                    <input type="hidden" name="key3" value="<%=key%>" />
31<%              }
32                key = editBean.getKey4(curTunnel);
33                if (key != null && key.length() > 0) { %>
34                    <input type="hidden" name="key4" value="<%=key%>" />
35<%              } %>
36                <input type="submit" class="default" name="action" value="Save changes" />
37    <table id="serverTunnelEdit" class="tunnelConfig">
38        <tr>
39            <th>
40                <%=intl._t("Name")%>
41            </th><th>
42                <%=intl._t("Type")%>
43            </th>
44        </tr><tr>
45            <td>
46                <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" />
47            </td><td>
48                <%=tunnelTypeName%>
49            </td>
50        </tr><tr>
51            <th>
52                <%=intl._t("Description")%>
53            </th><th>
54                <%=intl._t("Auto Start Tunnel")%>
55            </th>
56        </tr><tr>
57            <td>
58                <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 tunnelDescriptionText" />
59            </td><td>
60                <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" />
61                <%=intl._t("Automatically start tunnel when router starts")%></label>
62            </td>
63        </tr><tr>
64            <th colspan="2">
65         <% if ("streamrserver".equals(tunnelType)) { %>
66                <%=intl._t("Access Point")%>
67         <% } else { %>
68                <%=intl._t("Target")%>
69         <% } %>
70            </th>
71        </tr><tr>
72         <% if (!"streamrserver".equals(tunnelType)) { %>
73            <td>
74                <b><%=intl._t("Host")%>:</b>
75                <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" />
76            </td>
77<%          } /* !streamrserver */ %>
78            <td>
79                <b><%=intl._t("Port")%>:</b>
80                    <% String value = editBean.getTargetPort(curTunnel);
81                       if (value == null || "".equals(value.trim())) {
82                           out.write(" <span class=\"required\"><font color=\"red\">(");
83                           out.write(intl._t("required"));
84                           out.write(")</font></span>");
85                       }
86%>
87                <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" />
88<%          if (!"streamrserver".equals(tunnelType)) { %>
89                <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" />
90                <%=intl._t("Use SSL to connect to target")%></label>
91<%          } /* !streamrserver */ %>
92            </td>
93<%          if ("httpbidirserver".equals(tunnelType)) { %>
94        </tr><tr>
95            <th colspan="2">
96                <%=intl._t("Access Point")%>
97            </th>
98        </tr><tr>
99            <td>
100                <b><%=intl._t("Port")%>:</b>
101
102<%                      String value4 = editBean.getClientPort(curTunnel);
103                        if (value4 == null || "".equals(value4.trim())) {
104                            out.write(" <span class=\"required\"><font color=\"red\">(");
105                            out.write(intl._t("required"));
106                            out.write(")</font></span>");
107                        }
108%>
109                 <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" />
110            </td>
111<%          } /* httpbidirserver */
112            if ("httpbidirserver".equals(tunnelType) || "streamrserver".equals(tunnelType)) {
113%>
114            <td>
115                <b><%=intl._t("Reachable by")%>:</b>
116
117                <select id="reachableBy" name="reachableBy" title="<%=intl._t("Listening interface (IP address) for client access (normally 127.0.0.1)")%>" class="selectbox">
118<%
119                    String clientInterface = editBean.getClientInterface(curTunnel);
120                    for (String ifc : editBean.interfaceSet()) {
121                        out.write("<option value=\"");
122                        out.write(ifc);
123                        out.write('\"');
124                        if (ifc.equals(clientInterface))
125                            out.write(" selected=\"selected\"");
126                        out.write('>');
127                        out.write(ifc);
128                        out.write("</option>\n");
129                    }
130%>
131                </select>
132            </td>
133         <% } /* httpbidirserver || streamrserver */ %>
134        </tr>
135<%          if (("httpserver".equals(tunnelType)) || ("httpbidirserver".equals(tunnelType))) {
136%>
137        <tr>
138            <th>
139                <%=intl._t("Website Hostname")%>
140            </th>
141            <th></th>
142        </tr><tr>
143            <td colspan="2">
144                <input type="text" size="20" id="websiteName" name="spoofedHost" title="<%=intl._t("Website Hostname e.g. mysite.i2p")%>" value="<%=editBean.getSpoofedHost(curTunnel)%>" class="freetext" />
145                <%=intl._t("(leave blank for outproxies)")%>
146            </td>
147        </tr>
148            <% }
149          %>
150        <tr>
151            <th>
152                <%=intl._t("Local destination")%>
153            </th><th>
154                <%=intl._t("Private key file")%>
155            </th>
156        </tr><tr>
157            <td>
158                <div class="displayText" title="<%=intl._t("Read Only: Local Destination (if known)")%>" tabindex="0" onblur="resetScrollLeft(this)"><%=editBean.getDestinationBase64(curTunnel)%></div>
159            </td><td>
160                    <% String value3 = editBean.getPrivateKeyFile(curTunnel);
161                       if (value3 == null || "".equals(value3.trim())) {
162                           out.write(" <span class=\"required\"><font color=\"red\">(");
163                           out.write(intl._t("required"));
164                           out.write(")</font></span>");
165                       }
166                     %>
167                <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" />
168            </td>
169        </tr>
170<%
171  /******
172               if (("httpserver".equals(tunnelType)) || ("httpbidirserver".equals(tunnelType))) {
173                   String sig = editBean.getNameSignature(curTunnel);
174                   if (sig.length() > 0) {
175          %><div id="sigField" class="rowItem">
176                    <%=intl._t("Hostname Signature")%>
177                <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" />
178            </div>
179         <%
180                   }  // sig
181               }  // type
182  ****/
183
184            String b64 = editBean.getDestinationBase64(curTunnel);
185            net.i2p.util.PortMapper pm = net.i2p.I2PAppContext.getGlobalContext().portMapper();
186            boolean hasImagegen = pm.getPort(net.i2p.util.PortMapper.SVC_IMAGEGEN) > 0;
187            boolean hasSusiDNS = pm.getPort(net.i2p.util.PortMapper.SVC_SUSIDNS) > 0;
188            if (!"".equals(b64)) {
189%>
190        <tr>
191<%
192                b64 = b64.replace("=", "%3d");
193                String name = editBean.getSpoofedHost(curTunnel);
194                if (name == null || name.equals(""))
195                    name = editBean.getTunnelName(curTunnel);
196                // mysite.i2p is set in the installed i2ptunnel.config
197                if (name != null && !name.equals("") && !name.equals("mysite.i2p") && !name.contains(" ") && name.endsWith(".i2p")) {
198%>
199
200            <td class="buttons" colspan="2">
201<%
202                    if (hasImagegen) {
203%>
204              <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>
205<%
206                    }
207                    if (hasSusiDNS) {
208%>
209              <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>
210<%
211                    }
212%>
213              <a class="control" title="<%=intl._t("Register, unregister or change details for hostname")%>" href="register?tunnel=<%=curTunnel%>"><%=intl._t("Registration Authentication")%></a>
214<%
215                    if (("httpserver".equals(tunnelType)) || ("httpbidirserver".equals(tunnelType))) {
216%>
217              <a class="control" title="<%=intl._t("HTTPS configuration")%>" href="ssl?tunnel=<%=curTunnel%>"><%=intl._t("SSL Wizard")%></a>
218<%
219                    }
220%>
221            </td>
222<%
223                } else {
224%>
225            <td class="infohelp" colspan="2">
226                <%=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")%>
227            </td>
228<%
229                }  // name
230%>
231        </tr>
232<%
233            }  // b64
234
235%>
236    </table>
237
238    <h3><%=intl._t("Advanced networking options")%></h3>
239
240    <table id="#advancedServerTunnelOptions" class="tunnelConfig">
241        <tr>
242            <th colspan="2">
243                <%=intl._t("Tunnel Options")%>
244            </th>
245        </tr>
246
247<%     if (editBean.isAdvanced()) {
248      %><tr>
249            <th colspan="2">
250                <%=intl._t("Inbound")%>
251            </th>
252        </tr><%
253      }  // isAdvanced()
254%>
255
256        <tr>
257            <td>
258                <b><%=intl._t("Length")%></b>
259            </td><td>
260                <b><%=intl._t("Variance")%></b>
261            </td>
262        </tr><tr>
263            <td>
264                <select id="tunnelDepth" name="tunnelDepth" title="<%=intl._t("Length of each Tunnel")%>" class="selectbox">
265                    <% int tunnelDepth = editBean.getTunnelDepth(curTunnel, 3);
266                  %><option value="0"<%=(tunnelDepth == 0 ? " selected=\"selected\"" : "") %>><%=intl._t("0 hop tunnel (no anonymity)")%></option>
267                    <option value="1"<%=(tunnelDepth == 1 ? " selected=\"selected\"" : "") %>><%=intl._t("1 hop tunnel (low anonymity)")%></option>
268                    <option value="2"<%=(tunnelDepth == 2 ? " selected=\"selected\"" : "") %>><%=intl._t("2 hop tunnel (medium anonymity)")%></option>
269                    <option value="3"<%=(tunnelDepth == 3 ? " selected=\"selected\"" : "") %>><%=intl._t("3 hop tunnel (high anonymity)")%></option>
270<%                 if (editBean.isAdvanced()) {
271                  %><option value="4"<%=(tunnelDepth == 4 ? " selected=\"selected\"" : "") %>>4 hop tunnel</option>
272                    <option value="5"<%=(tunnelDepth == 5 ? " selected=\"selected\"" : "") %>>5 hop tunnel</option>
273                    <option value="6"<%=(tunnelDepth == 6 ? " selected=\"selected\"" : "") %>>6 hop tunnel</option>
274                    <option value="7"<%=(tunnelDepth == 7 ? " selected=\"selected\"" : "") %>>7 hop tunnel</option>
275<%                 } else if (tunnelDepth > 3) {
276                %>    <option value="<%=tunnelDepth%>" selected="selected"><%=tunnelDepth%> <%=intl._t("hop tunnel (very poor performance)")%></option>
277<%                 }
278              %></select>
279            </td><td>
280                <select id="tunnelVariance" name="tunnelVariance" title="<%=intl._t("Level of Randomization for Tunnel Depth")%>" class="selectbox">
281                    <% int tunnelVariance = editBean.getTunnelVariance(curTunnel, 0);
282                  %><option value="0"<%=(tunnelVariance  ==  0 ? " selected=\"selected\"" : "") %>><%=intl._t("0 hop variance (no randomization, consistent performance)")%></option>
283                    <option value="1"<%=(tunnelVariance  ==  1 ? " selected=\"selected\"" : "") %>><%=intl._t("+ 0-1 hop variance (medium additive randomization, subtractive performance)")%></option>
284                    <option value="2"<%=(tunnelVariance  ==  2 ? " selected=\"selected\"" : "") %>><%=intl._t("+ 0-2 hop variance (high additive randomization, subtractive performance)")%></option>
285                    <option value="-1"<%=(tunnelVariance == -1 ? " selected=\"selected\"" : "") %>><%=intl._t("+/- 0-1 hop variance (standard randomization, standard performance)")%></option>
286                    <option value="-2"<%=(tunnelVariance == -2 ? " selected=\"selected\"" : "") %>><%=intl._t("+/- 0-2 hop variance (not recommended)")%></option>
287<%                 if (tunnelVariance > 2 || tunnelVariance < -2) {
288                %>    <option value="<%=tunnelVariance%>" selected="selected"><%= (tunnelVariance > 2 ? "+ " : "+/- ") %>0-<%=tunnelVariance%> <%=intl._t("hop variance")%></option>
289<%                 }
290              %></select>
291            </td>
292        </tr><tr>
293            <td>
294                <b><%=intl._t("Count")%></b>
295            </td><td>
296                <b><%=intl._t("Backup Count")%></b>
297            </td>
298        </tr><tr>
299            <td>
300                <select id="tunnelQuantity" name="tunnelQuantity" title="<%=intl._t("Number of Tunnels in Group")%>" class="selectbox">
301                    <%=editBean.getQuantityOptions(curTunnel, editBean.isAdvanced() ? 1 : 0)%>
302                </select>
303            </td><td>
304                <select id="tunnelBackupQuantity" name="tunnelBackupQuantity" title="<%=intl._t("Number of Reserve Tunnels")%>" class="selectbox">
305<%                 int tunnelBackupQuantity = editBean.getTunnelBackupQuantity(curTunnel, 0);
306                   if (editBean.isAdvanced()) {
307                       // TODO ngettext
308                  %><option value="0"<%=(tunnelBackupQuantity == 0 ? " selected=\"selected\"" : "") %>>0 <%=intl._t("backup tunnels")%></option>
309                    <option value="1"<%=(tunnelBackupQuantity == 1 ? " selected=\"selected\"" : "") %>>1 <%=intl._t("backup tunnels")%></option>
310                    <option value="2"<%=(tunnelBackupQuantity == 2 ? " selected=\"selected\"" : "") %>>2 <%=intl._t("backup tunnels")%></option>
311                    <option value="3"<%=(tunnelBackupQuantity == 3 ? " selected=\"selected\"" : "") %>>3 <%=intl._t("backup tunnels")%></option>
312<%
313                   } else {
314                  %><option value="0"<%=(tunnelBackupQuantity == 0 ? " selected=\"selected\"" : "") %>><%=intl._t("0 backup tunnels (0 redundancy, no added resource usage)")%></option>
315                    <option value="1"<%=(tunnelBackupQuantity == 1 ? " selected=\"selected\"" : "") %>><%=intl._t("1 backup tunnel each direction (low redundancy, low resource usage)")%></option>
316                    <option value="2"<%=(tunnelBackupQuantity == 2 ? " selected=\"selected\"" : "") %>><%=intl._t("2 backup tunnels each direction (medium redundancy, medium resource usage)")%></option>
317                    <option value="3"<%=(tunnelBackupQuantity == 3 ? " selected=\"selected\"" : "") %>><%=intl._t("3 backup tunnels each direction (high redundancy, high resource usage)")%></option>
318<%                 } // isAdvanced()
319                   if (tunnelBackupQuantity > 3) {
320                %>    <option value="<%=tunnelBackupQuantity%>" selected="selected"><%=tunnelBackupQuantity%> <%=intl._t("backup tunnels")%></option>
321<%                 }
322              %></select>
323            </td>
324        </tr>
325
326<%     if (editBean.isAdvanced()) {
327       // repeat four options above for outbound
328      %><tr>
329            <th colspan="2">
330                <%=intl._t("Outbound")%>
331            </th>
332        </tr><tr>
333            <td>
334                <b><%=intl._t("Length")%></b>
335            </td><td>
336                <b><%=intl._t("Variance")%></b>
337            </td>
338        </tr><tr>
339            <td>
340                <select id="tunnelDepthOut" name="tunnelDepthOut" title="<%=intl._t("Length of each Tunnel")%>" class="selectbox">
341                    <% int tunnelDepthOut = editBean.getTunnelDepthOut(curTunnel, 3);
342                  %><option value="0"<%=(tunnelDepthOut == 0 ? " selected=\"selected\"" : "") %>><%=intl._t("0 hop tunnel (no anonymity)")%></option>
343                    <option value="1"<%=(tunnelDepthOut == 1 ? " selected=\"selected\"" : "") %>><%=intl._t("1 hop tunnel (low anonymity)")%></option>
344                    <option value="2"<%=(tunnelDepthOut == 2 ? " selected=\"selected\"" : "") %>><%=intl._t("2 hop tunnel (medium anonymity)")%></option>
345                    <option value="3"<%=(tunnelDepthOut == 3 ? " selected=\"selected\"" : "") %>><%=intl._t("3 hop tunnel (high anonymity)")%></option>
346                    <option value="4"<%=(tunnelDepthOut == 4 ? " selected=\"selected\"" : "") %>>4 hop tunnel</option>
347                    <option value="5"<%=(tunnelDepthOut == 5 ? " selected=\"selected\"" : "") %>>5 hop tunnel</option>
348                    <option value="6"<%=(tunnelDepthOut == 6 ? " selected=\"selected\"" : "") %>>6 hop tunnel</option>
349                    <option value="7"<%=(tunnelDepthOut == 7 ? " selected=\"selected\"" : "") %>>7 hop tunnel</option>
350                </select>
351            </td><td>
352                <select id="tunnelVarianceOut" name="tunnelVarianceOut" title="<%=intl._t("Level of Randomization for Tunnel Depth")%>" class="selectbox">
353<%                 int tunnelVarianceOut = editBean.getTunnelVarianceOut(curTunnel, 0);
354                  %><option value="0"<%=(tunnelVarianceOut  ==  0 ? " selected=\"selected\"" : "") %>><%=intl._t("0 hop variance (no randomization, consistent performance)")%></option>
355                    <option value="1"<%=(tunnelVarianceOut  ==  1 ? " selected=\"selected\"" : "") %>><%=intl._t("+ 0-1 hop variance (medium additive randomization, subtractive performance)")%></option>
356                    <option value="2"<%=(tunnelVarianceOut  ==  2 ? " selected=\"selected\"" : "") %>><%=intl._t("+ 0-2 hop variance (high additive randomization, subtractive performance)")%></option>
357                    <option value="-1"<%=(tunnelVarianceOut == -1 ? " selected=\"selected\"" : "") %>><%=intl._t("+/- 0-1 hop variance (standard randomization, standard performance)")%></option>
358                    <option value="-2"<%=(tunnelVarianceOut == -2 ? " selected=\"selected\"" : "") %>><%=intl._t("+/- 0-2 hop variance (not recommended)")%></option>
359<%                 if (tunnelVarianceOut > 2 || tunnelVarianceOut < -2) {
360                %>    <option value="<%=tunnelVarianceOut%>" selected="selected"><%= (tunnelVarianceOut > 2 ? "+ " : "+/- ") %>0-<%=tunnelVarianceOut%> <%=intl._t("hop variance")%></option>
361<%                 }
362              %></select>
363            </td>
364        </tr><tr>
365            <td>
366                <b><%=intl._t("Count")%></b>
367            </td><td>
368                <b><%=intl._t("Backup Count")%></b>
369            </td>
370        </tr><tr>
371            <td>
372                <select id="tunnelQuantityOut" name="tunnelQuantityOut" title="<%=intl._t("Number of Tunnels in Group")%>" class="selectbox">
373                    <%=editBean.getQuantityOptions(curTunnel, 2)%>
374                </select>
375            </td><td>
376                <select id="tunnelBackupQuantityOut" name="tunnelBackupQuantityOut" title="<%=intl._t("Number of Reserve Tunnels")%>" class="selectbox">
377<%                     int tunnelBackupQuantityOut = editBean.getTunnelBackupQuantityOut(curTunnel, 0);
378                       // TODO ngettext
379                  %><option value="0"<%=(tunnelBackupQuantityOut == 0 ? " selected=\"selected\"" : "") %>>0 <%=intl._t("backup tunnels")%></option>
380                    <option value="1"<%=(tunnelBackupQuantityOut == 1 ? " selected=\"selected\"" : "") %>>1 <%=intl._t("backup tunnels")%></option>
381                    <option value="2"<%=(tunnelBackupQuantityOut == 2 ? " selected=\"selected\"" : "") %>>2 <%=intl._t("backup tunnels")%></option>
382                    <option value="3"<%=(tunnelBackupQuantityOut == 3 ? " selected=\"selected\"" : "") %>>3 <%=intl._t("backup tunnels")%></option>
383<%                 if (tunnelBackupQuantityOut > 3) {
384                %>    <option value="<%=tunnelBackupQuantityOut%>" selected="selected"><%=tunnelBackupQuantityOut%> <%=intl._t("backup tunnels")%></option>
385<%                 }
386              %></select>
387            </td>
388        </tr>
389<%
390      }  // isAdvanced() End outbound config section
391
392            if (!"streamrserver".equals(tunnelType)) {
393%>
394        <tr>
395            <th colspan="2">
396                <%=intl._t("Profile")%>
397            </th>
398        </tr><tr>
399            <td colspan="2">
400                <select id="profile" name="profile" title="<%=intl._t("Connection Profile")%>" class="selectbox">
401                    <% boolean interactiveProfile = editBean.isInteractive(curTunnel);
402                  %><option <%=(interactiveProfile == true  ? "selected=\"selected\" " : "")%>value="interactive"><%=intl._t("interactive connection")%> </option>
403                    <option <%=(interactiveProfile == false ? "selected=\"selected\" " : "")%>value="bulk"><%=intl._t("bulk connection (downloads/websites/BT)")%> </option>
404                </select>
405            </td>
406        </tr>
407<%
408            } /* !streamrserver */
409
410            if (!editBean.isRouterContext()) {
411%>
412        <tr>
413            <th colspan="2">
414                <%=intl._t("Router I2CP Address")%>
415            </th>
416        </tr><tr>
417            <td>
418                <b><%=intl._t("Host")%>:</b>
419                <input type="text" id="clientHost" name="clientHost" size="20" title="<%=intl._t("I2CP Hostname or IP")%>" value="<%=editBean.getI2CPHost(curTunnel)%>" class="freetext" />
420            </td><td>
421                <b><%=intl._t("Port")%>:</b>
422                <input type="text" id="clientPort" name="clientport" size="20" title="<%=intl._t("I2CP Port Number")%>" value="<%=editBean.getI2CPPort(curTunnel)%>" class="freetext" />
423            </td>
424        </tr>
425<%
426            } // !isRouterContext
427
428            // TODO, encrypted + offline is unimplemented
429            if (!editBean.getIsOfflineKeys(curTunnel)) {
430%>
431        <tr>
432            <th colspan="2">
433                <%=intl._t("Encrypt Leaseset")%>
434            </th>
435        </tr><tr>
436            <td colspan="2">
437<%
438                   String curEncryptMode = editBean.getEncryptMode(curTunnel);
439%>
440                <select id="encryptMode" name="encryptMode" class="selectbox">
441                <option title="<%=intl._t("Allow all clients to connect to this service")%>" value="0" <%=(curEncryptMode.equals("0") ? " selected=\"selected\"" : "")%> >
442                    <%=intl._t("Disable")%></option>
443<%
444                if (editBean.isAdvanced() || curEncryptMode.equals("10")) {
445%>
446                <option title="<%=intl._t("Allow all clients to connect to this service")%>" value="10" <%=(curEncryptMode.equals("10") ? " selected=\"selected\"" : "")%> >
447                    <%=intl._t("Disable")%> (LS2)</option>
448<%
449                } // isAdvanced()
450%>
451                <option title="<%=intl._t("Only clients with the encryption key will be able to connect")%>" value="1" <%=(curEncryptMode.equals("1") ? " selected=\"selected\"" : "")%> >
452                    <%=intl._t("Encrypted")%></option>
453<%
454                int curSigType = editBean.getSigType(curTunnel, tunnelType);
455                boolean allowBlinding = (curSigType == 7 || curSigType == 11);
456                if (allowBlinding) {
457%>
458                <option title="<%=intl._t("Prevents server discovery by floodfills")%>" value="2" <%=(curEncryptMode.equals("2") ? " selected=\"selected\"" : "")%> >
459                    <%=intl._t("Blinded")%></option>
460<%
461                     if (editBean.isAdvanced()) {
462%>
463                <option title="<%=intl._t("Only clients with the password will be able to connect")%>" value="3" <%=(curEncryptMode.equals("3") ? " selected=\"selected\"" : "")%> >
464                    <%=intl._t("Blinded with lookup password")%></option>
465<%
466                         // TODO, unimplemented
467%>
468                <option title="<%=intl._t("Only clients with the encryption key will be able to connect")%>" value="4" <%=(curEncryptMode.equals("4") ? " selected=\"selected\"" : "")%> >
469                    <%=intl._t("Blinded with shared key")%></option>
470                <option title="<%=intl._t("Only clients with the password and key will be able to connect")%>" value="5" <%=(curEncryptMode.equals("5") ? " selected=\"selected\"" : "")%> >
471                    <%=intl._t("Blinded with lookup password and shared key")%></option>
472                <option title="<%=intl._t("Only clients with the encryption key will be able to connect")%>" value="6" <%=(curEncryptMode.equals("6") ? " selected=\"selected\"" : "")%> >
473                    <%=intl._t("Blinded with per-user key")%> (PSK)</option>
474                <option title="<%=intl._t("Only clients with the password and key will be able to connect")%>" value="7" <%=(curEncryptMode.equals("7") ? " selected=\"selected\"" : "")%> >
475                    <%=intl._t("Blinded with lookup password and per-user key")%> (PSK)</option>
476                <option title="<%=intl._t("Only clients with the encryption key will be able to connect")%>" value="8" <%=(curEncryptMode.equals("8") ? " selected=\"selected\"" : "")%> >
477                    <%=intl._t("Blinded with per-user key")%> (DH)</option>
478                <option title="<%=intl._t("Only clients with the password and key will be able to connect")%>" value="9" <%=(curEncryptMode.equals("9") ? " selected=\"selected\"" : "")%> >
479                    <%=intl._t("Blinded with lookup password and per-user key")%> (DH)</option>
480<%
481                     } // isAdvanced()
482                } // allowBlinding
483%>
484                </select>
485            </td>
486        </tr><tr>
487            <td>
488                <b><%=intl._t("Encryption Key")%></b>
489            </td><td>
490                <b><%=intl._t("Generate New Key")%></b> (<%=intl._t("Tunnel must be stopped first")%>)
491            </td>
492        </tr><tr>
493            <td>
494                <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>
495            </td><td>
496                <button class="control" type="submit" name="action" value="Generate" title="<%=intl._t("Generate new encryption key")%>"><%=intl._t("Generate")%></button>
497            </td>
498        </tr>
499<%
500                if (allowBlinding && editBean.isAdvanced()) {
501%>
502        <tr>
503            <td>
504                <b><%=intl._t("Optional lookup password")%>:</b>
505                <input type="password" name="nofilter_blindedPassword" title="<%=intl._t("Set password required to access this service")%>" value="<%=editBean.getBlindedPassword(curTunnel)%>" class="freetext password" />
506            </td><td> </td>
507        </tr>
508<%
509                } // allowBlinding
510            } // !isOffline
511%>
512        <tr>
513            <th colspan="2">
514                <%=intl._t("Restricted Access List")%>
515            </th>
516        </tr><tr>
517            <td colspan="2">
518                <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" />
519                    <%=intl._t("Disable")%></label></span>
520                <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" />
521                    <%=intl._t("Blacklist")%></label></span>
522                <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" />
523                    <%=intl._t("Whitelist")%></label></span>
524            </td>
525        </tr><tr>
526            <td colspan="2">
527                <b><%=intl._t("Access List Description")%></b> (<%=intl._t("Specify clients, 1 per line")%>)
528            </td>
529        </tr><tr>
530            <td colspan="2">
531                <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>
532            </td>
533        </tr><tr>
534            <td colspan="2">
535                <b><%=intl._t("Filter Definition File")%></b>
536            </td>
537        </tr><tr>
538            <td colspan="2">
539                <%=intl._t("You can define an advanced filter for this tunnel.")%> (<a href="http://i2p-projekt.i2p/spec/filter-format" target="_blank"><%=intl._t("Format Specification")%></a>) 
540            </td>
541        </tr><tr>
542            <td colspan="2">
543                <label for="filterDefinition"><%=intl._t("Absolute path to file containing filter definition")%></label>
544                <input type="text" id="filterDefinition" name="filterDefinition" value="<%=editBean.getFilterDefinition(curTunnel)%>" size="80"/>
545            </td>
546        </tr><tr>
547            <th colspan="2">
548                <%=intl._t("Server Access Options")%>
549            </th>
550        </tr>
551<%
552               if (("httpserver".equals(tunnelType)) || ("httpbidirserver".equals(tunnelType))) {
553%>
554        <tr>
555            <td>
556                <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" />
557                <%=intl._t("Block Access via Inproxies")%></label>
558            </td><td>
559                <label><input value="1" type="checkbox" name="rejectReferer"<%=(editBean.isRejectReferer(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
560                <%=intl._t("Block Accesses containing Referers")%></label>
561            </td>
562        </tr><tr>
563            <td>
564                <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" />
565                <%=intl._t("Block these User-Agents")%></label>
566            </td><td>
567                <input type="text" id="userAgents" name="userAgents" size="20" title="<%=intl._t("comma separated, e.g. Mozilla,Opera (case-sensitive)")%>" value="<%=editBean.getUserAgents(curTunnel)%>" class="freetext" />
568            </td>
569        </tr>
570<%             } // httpserver
571%>
572        <tr>
573            <td>
574                <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" />
575                <%=intl._t("Unique Local Address per Client")%></label>
576            </td><td>
577                <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" />
578                <%=intl._t("Optimize for Multihoming")%></label>
579            </td>
580        </tr><tr>
581            <th colspan="2">
582                <%=intl._t("Server Throttling")%>
583            </th>
584        </tr><tr>
585            <td id="throttle" colspan="4">
586                <table id="throttler">
587                    <tr>
588                        <th colspan="5">
589                            <%=intl._t("Inbound connection limits (0=unlimited)")%>
590                        </th>
591                    </tr><tr>
592                        <td></td>
593                        <td><b><%=intl._t("Per Minute")%></b></td>
594                        <td><b><%=intl._t("Per Hour")%></b></td>
595                        <td><b><%=intl._t("Per Day")%></b></td>
596                        <td class="blankColumn"></td>
597                    </tr><tr>
598                        <td><b><%=intl._t("Per Client")%></b></td>
599                        <td>
600                            <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" />
601                        </td><td>
602                            <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" />
603                        </td><td>
604                            <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" />
605                        </td><td class="blankColumn"></td>
606                    </tr><tr>
607                        <td><b><%=intl._t("Total")%></b></td>
608                        <td>
609                            <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" />
610                        </td><td>
611                            <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" />
612                        </td><td>
613                            <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" />
614                        </td><td class="blankColumn"></td>
615                    </tr><tr>
616                        <th colspan="5"><%=intl._t("Max concurrent connections (0=unlimited)")%></th>
617                    </tr><tr>
618                        <td></td><td>
619                            <input type="text" name="maxStreams" title="<%=intl._t("Maximum number of simultaneous client connections")%>" value="<%=editBean.getMaxStreams(curTunnel)%>" class="freetext" />
620                        </td><td></td><td></td><td class="blankColumn"></td>
621                    </tr>
622<%
623               if (("httpserver".equals(tunnelType)) || ("httpbidirserver".equals(tunnelType))) {
624%>
625                    <tr>
626                        <th colspan="5">
627                            <%=intl._t("POST limits (0=unlimited)")%>
628                        </th>
629                    </tr><tr>
630                        <td></td><td>
631                            <b><%=intl._t("Per Period")%></b>
632                        </td><td>
633                            <b><%=intl._t("Ban Duration")%></b>
634                        </td><td></td><td class="blankColumn"></td>
635                    </tr><tr>
636                        <td>
637                            <b><%=intl._t("Per Client")%>
638                            </b>
639                        </td><td>
640                            <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"/>
641                        </td><td colspan="2">
642                            <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"/>
643                            <%=intl._t("minutes")%>
644                        </td><td class="blankColumn"></td>
645                    </tr><tr>
646                        <td>
647                            <b><%=intl._t("Total")%>
648                            </b>
649                        </td><td>
650                            <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"/>
651                        </td><td colspan="2">
652                            <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"/>
653                            <%=intl._t("minutes")%>
654                        </td><td class="blankColumn"></td>
655                    </tr><tr>
656                        <td>
657                            <b><%=intl._t("POST limit period")%>
658                            </b>
659                        </td><td colspan="2">
660                            <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"/>
661                            <%=intl._t("minutes")%>
662                        </td><td></td><td class="blankColumn"></td>
663                    </tr>
664<%             } // httpserver
665%>
666
667                </table>
668            </td>
669        </tr><tr>
670            <th colspan="2">
671                <%=intl._t("Reduce tunnel quantity when idle")%>
672            </th>
673        </tr><tr>
674            <td colspan="2">
675                <label><input value="1" type="checkbox" id="startOnLoad" name="reduce" <%=(editBean.getReduce(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
676                <%=intl._t("Reduce tunnel quantity when idle to conserve resources")%></label>
677            </td>
678        </tr><tr>
679            <td>
680                <b><%=intl._t("Reduced tunnel count")%>:</b>
681                <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" />
682            </td>
683
684            <td>
685                <b><%=intl._t("Idle period")%>:</b>
686                <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" />
687                <%=intl._t("minutes")%>
688            </td>
689        </tr>
690<% /***************** %>
691        <tr>
692            <th colspan="2">
693                <%=intl._t("New Certificate type")%>
694            </th>
695        </tr><tr>
696            <td colspan="2">
697                <span class="multiOption"><label title="<%=intl._t("No Certificate")%>"><%=intl._t("None")%>
698                <input value="0" type="radio" id="startOnLoad" name="cert"<%=(editBean.getCert(curTunnel)==0 ? " checked=\"checked\"" : "")%> class="tickbox" /></label></span>
699                <span class="multiOption"><label title="<%=intl._t("Hashcash Certificate")%>"><%=intl._t("Hashcash (effort)")%>
700                <input value="1" type="radio" id="startOnLoad" name="cert"<%=(editBean.getCert(curTunnel)==1 ? " checked=\"checked\"" : "")%> class="tickbox" /></label>
701                <input type="text" id="port" name="effort" size="2" maxlength="2" title="<%=intl._t("Hashcash Effort")%>" value="<%=editBean.getEffort(curTunnel)%>" class="freetext" /></span>
702            </td>
703        </tr><tr>
704            <th>
705                <%=intl._t("Hashcash Calc Time")%>
706            </th><th>
707                <%=intl._t("Hidden")%>
708            </th>
709        </tr><tr>
710            <td>
711                <button class="control" type="submit" name="action" value="Estimate" title="<%=intl._t("Estimate Calculation Time")%>"><%=intl._t("Estimate")%></button>
712            </td><td>
713                <input value="2" type="radio" id="startOnLoad" name="cert" title="<%=intl._t("Hidden Certificate")%>"<%=(editBean.getCert(curTunnel)==2 ? " checked=\"checked\"" : "")%> class="tickbox" />
714            </td>
715        </tr><tr>
716            <th colspan="2">
717                <%=intl._t("Signed Certificate")%>
718            </th>
719        </tr><tr>
720            <td colspan="2">
721                <label title="<%=intl._t("Signed Certificate")%>"><%=intl._t("Signed (signed by)")%>:
722                <input value="3" type="radio" id="startOnLoad" name="cert"<%=(editBean.getCert(curTunnel)==3 ? " checked=\"checked\"" : "")%> class="tickbox" /></label>
723                <input type="text" id="port" name="signer" size="50" title="<%=intl._t("Cert Signer")%>" value="<%=editBean.getSigner(curTunnel)%>" class="freetext" />
724            </td>
725        </tr><tr>
726            <th colspan="2">
727                <%=intl._t("Modify Certificate")%>&nbsp;<%=intl._t("(Tunnel must be stopped first)")%>
728            </th>
729        </tr><tr>
730            <td colspan="2">
731                <button class="control" type="submit" name="action" value="Modify" title="<%=intl._t("Force new Certificate now")%>"><%=intl._t("Modify")%></button>
732            </td>
733        </tr>
734<%
735   **********************/
736            int currentSigType = editBean.getSigType(curTunnel, tunnelType);
737            if (true /* editBean.isAdvanced() */ ) {
738                String disabled = editBean.canChangeSigType(curTunnel) ? "" : " disabled=\"disabled\" ";
739%>
740        <tr>
741            <th colspan="2">
742                <%=intl._t("Signature type")%> <%-- (<%=intl._t("Experts only! Changes B32!")%>) --%>
743            </th>
744        </tr><tr>
745            <td colspan="2">
746                <select id="sigType" name="sigType" class="selectbox">
747                    <option title="<%=intl._t("Legacy option (deprecated), provided for backward compatibility")%>" value="0" <%=(currentSigType==0 ? " selected=\"selected\"" : disabled)%> >
748                    DSA-SHA1</option>
749<%           if (editBean.isSigTypeAvailable(1)) { %>
750                    <option value="1" <%=(currentSigType==1 ? " selected=\"selected\"" : disabled)%> >
751                    ECDSA-P256</option>
752<%            }
753              if (editBean.isSigTypeAvailable(2)) { %>
754                    <option value="2" <%=(currentSigType==2 ? " selected=\"selected\"" : disabled)%> >
755                    ECDSA-P384</option>
756<%            }
757              if (editBean.isSigTypeAvailable(3)) { %>
758                    <option value="3" <%=(currentSigType==3 ? " selected=\"selected\"" : disabled)%> >
759                    ECDSA-P521</option>
760<%            }
761              if (editBean.isSigTypeAvailable(7)) { %>
762                    <option title="<%=intl._t("This is the default, recommended option")%>" value="7" <%=(currentSigType==7 ? " selected=\"selected\"" : disabled)%> >
763                    Ed25519-SHA-512</option>
764<%            }
765              if (editBean.isSigTypeAvailable(11)) { %>
766                    <option title="<%=intl._t("Experimental")%>" value="11" <%=(currentSigType==11 ? " selected=\"selected\"" : disabled)%> >
767                    Red25519-SHA-512</option>
768<%            }   // isAvailable
769%>
770                </select>
771            </td>
772        </tr>
773<%          } // isAdvanced
774
775            /* alternate dest, only if current dest is set and is DSA_SHA1 */
776
777            if (currentSigType == 0 && !"".equals(b64) && !"streamrserver".equals(tunnelType)) {
778%>
779        <tr>
780            <th colspan="2">
781                <%=intl._t("Alternate private key file")%> (Ed25519-SHA-512)
782            </th>
783        </tr><tr>
784            <td colspan="2">
785                <input type="text" class="freetext" size="30" id="altPrivKeyFile" name="altPrivKeyFile" title="<%=intl._t("Path to Private Key File")%>" value="<%=editBean.getAltPrivateKeyFile(curTunnel)%>" />
786            </td>
787        </tr>
788<%
789              String ab64 = editBean.getAltDestinationBase64(curTunnel);
790              if (!"".equals(ab64)) {
791%>
792        <tr>
793            <th colspan="2">
794                <%=intl._t("Alternate local destination")%>
795            </th>
796        </tr><tr>
797            <td colspan="2">
798                <div class="displayText" title="<%=intl._t("Read Only: Alternate Local Destination")%>" onblur="resetScrollLeft(this)"><%=ab64%></div>
799            </td>
800        </tr><tr>
801            <td colspan="2">
802                <%=editBean.getAltDestHashBase32(curTunnel)%>
803            </td>
804        </tr>
805<%
806                ab64 = ab64.replace("=", "%3d");
807                String name = editBean.getSpoofedHost(curTunnel);
808                if (name == null || name.equals(""))
809                    name = editBean.getTunnelName(curTunnel);
810                // mysite.i2p is set in the installed i2ptunnel.config
811                if (name != null && !name.equals("") && !name.equals("mysite.i2p") && !name.contains(" ") && name.endsWith(".i2p")) {
812%>
813        <tr>
814            <td class="buttons" colspan="2">
815<%
816                    if (hasImagegen) {
817%>
818              <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>
819<%
820                    }
821                    if (hasSusiDNS) {
822%>
823              <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>
824<%
825                    }
826                } else {
827%>
828        <tr>
829            <td colspan="2">
830                <%=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")%>
831            </td>
832        </tr>
833<%
834                }  // name
835              }  // ab64
836           } // currentSigType
837%>
838        <tr>
839            <th colspan="2">
840                <%=intl._t("Custom options")%>
841            </th>
842        </tr><tr>
843            <td colspan="2">
844                <input type="text" class="freetext" id="customOptions" name="nofilter_customOptions" size="60" title="<%=intl._t("Advanced tunnel, streaming, and I2CP options")%>" value="<%=editBean.getCustomOptions(curTunnel)%>" />
845            </td>
846        </tr><tr>
847            <td class="buttons" colspan="2">
848                    <input type="hidden" value="true" name="removeConfirm" />
849                    <button id="controlCancel" class="control" type="submit" name="action" value=""><%=intl._t("Cancel")%></button>
850                    <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>
851                    <button id="controlSave" class="control" type="submit" name="action" value="Save changes"><%=intl._t("Save")%></button>
852            </td>
853        </tr>
854</table>
Note: See TracBrowser for help on using the repository browser.