source: apps/i2ptunnel/jsp/editServer.jsi @ 64c7625

Last change on this file since 64c7625 was 64c7625, checked in by zzz <zzz@…>, 15 months ago

i2ptunnel: Hide blinded-with-password config

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