source: apps/i2ptunnel/jsp/editServer.jsi @ dd5f8b45

Last change on this file since dd5f8b45 was dd5f8b45, checked in by zzz <zzz@…>, 14 months ago

i2ptunnel: jsp whitespace removal

  • Property mode set to 100644
File size: 49.2 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<%          } /* !streamrserver */ %>
408        <tr>
409            <th colspan="2">
410                <%=intl._t("Router I2CP Address")%>
411            </th>
412        </tr><tr>
413            <td>
414                <b><%=intl._t("Host")%>:</b>
415                <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" <% } %> />
416            </td><td>
417                <b><%=intl._t("Port")%>:</b>
418                <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" <% } %> />
419            </td>
420        </tr><tr>
421            <th colspan="2">
422                <%=intl._t("Encrypt Leaseset")%>
423            </th>
424        </tr><tr>
425            <td colspan="2">
426<%
427                   String curEncryptMode = editBean.getEncryptMode(curTunnel);
428%>
429                <span class="multiOption"><label title="<%=intl._t("Allow all clients to connect to this service")%>"><input value="0" type="radio" name="encryptMode"<%=(curEncryptMode.equals("0") ? " checked=\"checked\"" : "")%> class="tickbox" />
430                    <%=intl._t("Disable")%></label></span>
431                <span class="multiOption"><label title="<%=intl._t("Only clients with the encryption key will be able to connect")%>"><input value="1" type="radio" name="encryptMode"<%=(curEncryptMode.equals("1") ? " checked=\"checked\"" : "")%> class="tickbox" />
432                    <%=intl._t("Encrypted")%></label></span>
433<%
434                    int curSigType = editBean.getSigType(curTunnel, tunnelType);
435                    if (curSigType == 7 || curSigType == 11) {
436%>
437                <span class="multiOption"><label title="<%=intl._t("Prevents server discovery by floodfills")%>"><input value="2" type="radio" name="encryptMode"<%=(curEncryptMode.equals("2") ? " checked=\"checked\"" : "")%> class="tickbox" />
438                    <%=intl._t("Blinded")%></label></span>
439                <span class="multiOption"><label title="<%=intl._t("Only clients with the password will be able to connect")%>"><input value="3" type="radio" name="encryptMode"<%=(curEncryptMode.equals("3") ? " checked=\"checked\"" : "")%> class="tickbox" />
440                    <%=intl._t("Blinded with lookup password")%></label></span>
441<%
442                     if (editBean.isAdvanced()) {
443                         // TODO, unimplemented
444%>
445                <span class="multiOption"><label title="<%=intl._t("Only clients with the encryption key will be able to connect")%>"><input value="4" type="radio" name="encryptMode"<%=(curEncryptMode.equals("4") ? " checked=\"checked\"" : "")%> class="tickbox" />
446                    <%=intl._t("Blinded with shared key")%></label></span>
447                <span class="multiOption"><label title="<%=intl._t("Only clients with the password and key will be able to connect")%>"><input value="5" type="radio" name="encryptMode"<%=(curEncryptMode.equals("5") ? " checked=\"checked\"" : "")%> class="tickbox" />
448                    <%=intl._t("Blinded with lookup password and shared key")%></label></span>
449                <span class="multiOption"><label title="<%=intl._t("Only clients with the encryption key will be able to connect")%>"><input value="6" type="radio" name="encryptMode"<%=(curEncryptMode.equals("6") ? " checked=\"checked\"" : "")%> class="tickbox" />
450                    <%=intl._t("Blinded with per-user key")%></label></span>
451                <span class="multiOption"><label title="<%=intl._t("Only clients with the password and key will be able to connect")%>"><input value="7" type="radio" name="encryptMode"<%=(curEncryptMode.equals("7") ? " checked=\"checked\"" : "")%> class="tickbox" />
452                    <%=intl._t("Blinded with lookup password and per-user key")%></label></span>
453<%
454                        } // isAdvanced()
455                    } // curSigType
456%>
457            </td>
458        </tr><tr>
459            <td>
460                <b><%=intl._t("Encryption Key")%></b>
461            </td><td>
462                <b><%=intl._t("Generate New Key")%></b> (<%=intl._t("Tunnel must be stopped first")%>)
463            </td>
464        </tr><tr>
465            <td>
466                <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>
467            </td><td>
468                <button class="control" type="submit" name="action" value="Generate" title="<%=intl._t("Generate new encryption key")%>"><%=intl._t("Generate")%></button>
469            </td>
470        </tr>
471<%
472            if (curSigType == 7 || curSigType == 11) {
473%>
474        <tr>
475            <td>
476                <b><%=intl._t("Optional lookup password")%>:</b>
477                <input type="password" name="nofilter_blindedPassword" title="<%=intl._t("Set password required to access this service")%>" value="<%=editBean.getBlindedPassword(curTunnel)%>" class="freetext password" />
478            </td><td> </td>
479        </tr>
480<%
481            } // curSigType
482%>
483        <tr>
484            <th colspan="2">
485                <%=intl._t("Restricted Access List")%>
486            </th>
487        </tr><tr>
488            <td colspan="2">
489                <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" />
490                    <%=intl._t("Disable")%></label></span>
491                <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" />
492                    <%=intl._t("Blacklist")%></label></span>
493                <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" />
494                    <%=intl._t("Whitelist")%></label></span>
495            </td>
496        </tr><tr>
497            <td colspan="2">
498                <b><%=intl._t("Access List Description")%></b> (<%=intl._t("Specify clients, 1 per line")%>)
499            </td>
500        </tr><tr>
501            <td colspan="2">
502                <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>
503            </td>
504        </tr><tr>
505            <td colspan="2">
506                <b><%=intl._t("Filter Definition File")%></b>
507            </td>
508        </tr><tr>
509            <td colspan="2">
510                <%=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>) 
511            </td>
512        </tr><tr>
513            <td colspan="2">
514                <label for="filterDefinition"><%=intl._t("Absolute path to file containing filter definition")%></label>
515                <input type="text" id="filterDefinition" name="filterDefinition" value="<%=editBean.getFilterDefinition(curTunnel)%>" size="80"/>
516            </td>
517        </tr><tr>
518            <th colspan="2">
519                <%=intl._t("Server Access Options")%>
520            </th>
521        </tr>
522<%
523               if (("httpserver".equals(tunnelType)) || ("httpbidirserver".equals(tunnelType))) {
524%>
525        <tr>
526            <td>
527                <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" />
528                <%=intl._t("Block Access via Inproxies")%></label>
529            </td><td>
530                <label><input value="1" type="checkbox" name="rejectReferer"<%=(editBean.isRejectReferer(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
531                <%=intl._t("Block Accesses containing Referers")%></label>
532            </td>
533        </tr><tr>
534            <td>
535                <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" />
536                <%=intl._t("Block these User-Agents")%></label>
537            </td><td>
538                <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" />
539            </td>
540        </tr>
541<%             } // httpserver
542%>
543        <tr>
544            <td>
545                <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" />
546                <%=intl._t("Unique Local Address per Client")%></label>
547            </td><td>
548                <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" />
549                <%=intl._t("Optimize for Multihoming")%></label>
550            </td>
551        </tr><tr>
552            <th colspan="2">
553                <%=intl._t("Server Throttling")%>
554            </th>
555        </tr><tr>
556            <td id="throttle" colspan="4">
557                <table id="throttler">
558                    <tr>
559                        <th colspan="5">
560                            <%=intl._t("Inbound connection limits (0=unlimited)")%>
561                        </th>
562                    </tr><tr>
563                        <td></td>
564                        <td><b><%=intl._t("Per Minute")%></b></td>
565                        <td><b><%=intl._t("Per Hour")%></b></td>
566                        <td><b><%=intl._t("Per Day")%></b></td>
567                        <td class="blankColumn"></td>
568                    </tr><tr>
569                        <td><b><%=intl._t("Per Client")%></b></td>
570                        <td>
571                            <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" />
572                        </td><td>
573                            <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" />
574                        </td><td>
575                            <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" />
576                        </td><td class="blankColumn"></td>
577                    </tr><tr>
578                        <td><b><%=intl._t("Total")%></b></td>
579                        <td>
580                            <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" />
581                        </td><td>
582                            <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" />
583                        </td><td>
584                            <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" />
585                        </td><td class="blankColumn"></td>
586                    </tr><tr>
587                        <th colspan="5"><%=intl._t("Max concurrent connections (0=unlimited)")%></th>
588                    </tr><tr>
589                        <td></td><td>
590                            <input type="text" name="maxStreams" title="<%=intl._t("Maximum number of simultaneous client connections")%>" value="<%=editBean.getMaxStreams(curTunnel)%>" class="freetext" />
591                        </td><td></td><td></td><td class="blankColumn"></td>
592                    </tr>
593<%
594               if (("httpserver".equals(tunnelType)) || ("httpbidirserver".equals(tunnelType))) {
595%>
596                    <tr>
597                        <th colspan="5">
598                            <%=intl._t("POST limits (0=unlimited)")%>
599                        </th>
600                    </tr><tr>
601                        <td></td><td>
602                            <b><%=intl._t("Per Period")%></b>
603                        </td><td>
604                            <b><%=intl._t("Ban Duration")%></b>
605                        </td><td></td><td class="blankColumn"></td>
606                    </tr><tr>
607                        <td>
608                            <b><%=intl._t("Per Client")%>
609                            </b>
610                        </td><td>
611                            <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"/>
612                        </td><td colspan="2">
613                            <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"/>
614                            <%=intl._t("minutes")%>
615                        </td><td class="blankColumn"></td>
616                    </tr><tr>
617                        <td>
618                            <b><%=intl._t("Total")%>
619                            </b>
620                        </td><td>
621                            <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"/>
622                        </td><td colspan="2">
623                            <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"/>
624                            <%=intl._t("minutes")%>
625                        </td><td class="blankColumn"></td>
626                    </tr><tr>
627                        <td>
628                            <b><%=intl._t("POST limit period")%>
629                            </b>
630                        </td><td colspan="2">
631                            <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"/>
632                            <%=intl._t("minutes")%>
633                        </td><td></td><td class="blankColumn"></td>
634                    </tr>
635<%             } // httpserver
636%>
637
638                </table>
639            </td>
640        </tr><tr>
641            <th colspan="2">
642                <%=intl._t("Reduce tunnel quantity when idle")%>
643            </th>
644        </tr><tr>
645            <td colspan="2">
646                <label><input value="1" type="checkbox" id="startOnLoad" name="reduce" <%=(editBean.getReduce(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
647                <%=intl._t("Reduce tunnel quantity when idle to conserve resources")%></label>
648            </td>
649        </tr><tr>
650            <td>
651                <b><%=intl._t("Reduced tunnel count")%>:</b>
652                <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" />
653            </td>
654
655            <td>
656                <b><%=intl._t("Idle period")%>:</b>
657                <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" />
658                <%=intl._t("minutes")%>
659            </td>
660        </tr>
661<% /***************** %>
662        <tr>
663            <th colspan="2">
664                <%=intl._t("New Certificate type")%>
665            </th>
666        </tr><tr>
667            <td colspan="2">
668                <span class="multiOption"><label title="<%=intl._t("No Certificate")%>"><%=intl._t("None")%>
669                <input value="0" type="radio" id="startOnLoad" name="cert"<%=(editBean.getCert(curTunnel)==0 ? " checked=\"checked\"" : "")%> class="tickbox" /></label></span>
670                <span class="multiOption"><label title="<%=intl._t("Hashcash Certificate")%>"><%=intl._t("Hashcash (effort)")%>
671                <input value="1" type="radio" id="startOnLoad" name="cert"<%=(editBean.getCert(curTunnel)==1 ? " checked=\"checked\"" : "")%> class="tickbox" /></label>
672                <input type="text" id="port" name="effort" size="2" maxlength="2" title="<%=intl._t("Hashcash Effort")%>" value="<%=editBean.getEffort(curTunnel)%>" class="freetext" /></span>
673            </td>
674        </tr><tr>
675            <th>
676                <%=intl._t("Hashcash Calc Time")%>
677            </th><th>
678                <%=intl._t("Hidden")%>
679            </th>
680        </tr><tr>
681            <td>
682                <button class="control" type="submit" name="action" value="Estimate" title="<%=intl._t("Estimate Calculation Time")%>"><%=intl._t("Estimate")%></button>
683            </td><td>
684                <input value="2" type="radio" id="startOnLoad" name="cert" title="<%=intl._t("Hidden Certificate")%>"<%=(editBean.getCert(curTunnel)==2 ? " checked=\"checked\"" : "")%> class="tickbox" />
685            </td>
686        </tr><tr>
687            <th colspan="2">
688                <%=intl._t("Signed Certificate")%>
689            </th>
690        </tr><tr>
691            <td colspan="2">
692                <label title="<%=intl._t("Signed Certificate")%>"><%=intl._t("Signed (signed by)")%>:
693                <input value="3" type="radio" id="startOnLoad" name="cert"<%=(editBean.getCert(curTunnel)==3 ? " checked=\"checked\"" : "")%> class="tickbox" /></label>
694                <input type="text" id="port" name="signer" size="50" title="<%=intl._t("Cert Signer")%>" value="<%=editBean.getSigner(curTunnel)%>" class="freetext" />
695            </td>
696        </tr><tr>
697            <th colspan="2">
698                <%=intl._t("Modify Certificate")%>&nbsp;<%=intl._t("(Tunnel must be stopped first)")%>
699            </th>
700        </tr><tr>
701            <td colspan="2">
702                <button class="control" type="submit" name="action" value="Modify" title="<%=intl._t("Force new Certificate now")%>"><%=intl._t("Modify")%></button>
703            </td>
704        </tr>
705<%
706   **********************/
707            int currentSigType = editBean.getSigType(curTunnel, tunnelType);
708            if (true /* editBean.isAdvanced() */ ) {
709                String disabled = editBean.canChangeSigType(curTunnel) ? "" : " disabled=\"disabled\" ";
710%>
711        <tr>
712            <th colspan="2">
713                <%=intl._t("Signature type")%> <%-- (<%=intl._t("Experts only! Changes B32!")%>) --%>
714            </th>
715        </tr><tr>
716            <td colspan="2">
717                <span class="multiOption">
718                    <label title="<%=intl._t("Legacy option (deprecated), provided for backward compatibility")%>"><input value="0" type="radio" id="startOnLoad" name="sigType" <%=disabled%> <%=(currentSigType==0 ? " checked=\"checked\"" : "")%> class="tickbox" />
719                    DSA-SHA1</label>
720                </span>
721<%           if (editBean.isSigTypeAvailable(1)) { %>
722                <span class="multiOption">
723                    <label><input value="1" type="radio" id="startOnLoad" name="sigType" <%=disabled%> <%=(currentSigType==1 ? " checked=\"checked\"" : "")%> class="tickbox" />
724                    ECDSA-P256</label>
725                </span>
726<%            }
727              if (editBean.isSigTypeAvailable(2)) { %>
728                <span class="multiOption">
729                    <label><input value="2" type="radio" id="startOnLoad" name="sigType" <%=disabled%> <%=(currentSigType==2 ? " checked=\"checked\"" : "")%> class="tickbox" />
730                    ECDSA-P384</label>
731                </span>
732<%            }
733              if (editBean.isSigTypeAvailable(3)) { %>
734                <span class="multiOption">
735                    <label><input value="3" type="radio" id="startOnLoad" name="sigType" <%=disabled%> <%=(currentSigType==3 ? " checked=\"checked\"" : "")%> class="tickbox" />
736                    ECDSA-P521</label>
737                </span>
738<%            }
739              if (editBean.isSigTypeAvailable(7)) { %>
740                <span class="multiOption">
741                    <label title="<%=intl._t("This is the default, recommended option")%>"><input value="7" type="radio" id="startOnLoad" name="sigType" <%=disabled%> <%=(currentSigType==7 ? " checked=\"checked\"" : "")%> class="tickbox" />
742                    Ed25519-SHA-512</label>
743                </span>
744<%            }   // isAvailable
745%>
746            </td>
747        </tr>
748<%          } // isAdvanced
749
750            /* alternate dest, only if current dest is set and is DSA_SHA1 */
751
752            if (currentSigType == 0 && !"".equals(b64) && !"streamrserver".equals(tunnelType)) {
753%>
754        <tr>
755            <th colspan="2">
756                <%=intl._t("Alternate private key file")%> (Ed25519-SHA-512)
757            </th>
758        </tr><tr>
759            <td colspan="2">
760                <input type="text" class="freetext" size="30" id="altPrivKeyFile" name="altPrivKeyFile" title="<%=intl._t("Path to Private Key File")%>" value="<%=editBean.getAltPrivateKeyFile(curTunnel)%>" />
761            </td>
762        </tr>
763<%
764              String ab64 = editBean.getAltDestinationBase64(curTunnel);
765              if (!"".equals(ab64)) {
766%>
767        <tr>
768            <th colspan="2">
769                <%=intl._t("Alternate local destination")%>
770            </th>
771        </tr><tr>
772            <td colspan="2">
773                <div class="displayText" title="<%=intl._t("Read Only: Alternate Local Destination")%>" onblur="resetScrollLeft(this)"><%=ab64%></div>
774            </td>
775        </tr><tr>
776            <td colspan="2">
777                <%=editBean.getAltDestHashBase32(curTunnel)%>
778            </td>
779        </tr>
780<%
781                ab64 = ab64.replace("=", "%3d");
782                String name = editBean.getSpoofedHost(curTunnel);
783                if (name == null || name.equals(""))
784                    name = editBean.getTunnelName(curTunnel);
785                // mysite.i2p is set in the installed i2ptunnel.config
786                if (name != null && !name.equals("") && !name.equals("mysite.i2p") && !name.contains(" ") && name.endsWith(".i2p")) {
787%>
788        <tr>
789            <td class="buttons" colspan="2">
790<%
791                    if (hasImagegen) {
792%>
793              <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>
794<%
795                    }
796                    if (hasSusiDNS) {
797%>
798              <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>
799<%
800                    }
801                } else {
802%>
803        <tr>
804            <td colspan="2">
805                <%=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")%>
806            </td>
807        </tr>
808<%
809                }  // name
810              }  // ab64
811           } // currentSigType
812%>
813        <tr>
814            <th colspan="2">
815                <%=intl._t("Custom options")%>
816            </th>
817        </tr><tr>
818            <td colspan="2">
819                <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)%>" />
820            </td>
821        </tr><tr>
822            <td class="buttons" colspan="2">
823                    <input type="hidden" value="true" name="removeConfirm" />
824                    <button id="controlCancel" class="control" type="submit" name="action" value=""><%=intl._t("Cancel")%></button>
825                    <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>
826                    <button id="controlSave" class="control" type="submit" name="action" value="Save changes"><%=intl._t("Save")%></button>
827            </td>
828        </tr>
829</table>
Note: See TracBrowser for help on using the repository browser.