source: apps/i2ptunnel/jsp/editServer.jsi @ 071e702

Last change on this file since 071e702 was 071e702, checked in by zzz <zzz@…>, 20 months ago

i2ptunnel: Hide I2CP config in router context

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