Migrate i2ptunnel UI to tables, drop duplicate ids

This commit is contained in:
str4d
2016-07-11 06:54:26 +00:00
parent f1d56a488a
commit c586970128
5 changed files with 1629 additions and 1360 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -28,46 +28,42 @@
<% if (indexBean.allowCSS()) {
%><link rel="icon" href="<%=indexBean.getTheme()%>images/favicon.ico" />
<link href="<%=indexBean.getTheme()%>default.css" rel="stylesheet" type="text/css" />
<link href="<%=indexBean.getTheme()%>i2ptunnel.css" rel="stylesheet" type="text/css" />
<link href="<%=indexBean.getTheme()%>i2ptunnel.css" rel="stylesheet" type="text/css" />
<% }
%>
</head>
<body id="tunnelListPage">
<div id="pageHeader">
</div>
<div id="statusMessagePanel" class="panel">
<div class="header">
<h4><%=intl._t("Status Messages")%></h4>
</div>
<div class="separator">
<hr />
</div>
<div class="panel">
<h2><%=intl._t("Status Messages")%></h2>
<table id="statusMessagesTable">
<tr>
<td id="tunnelMessages">
<textarea id="statusMessages" rows="4" cols="60" readonly="readonly"><jsp:getProperty name="indexBean" property="messages" /></textarea>
</td>
</tr>
<div class="separator">
<hr />
</div>
<div class="footer">
<div class="toolbox">
<tr>
<td class="buttons">
<a class="control" href="list"><%=intl._t("Refresh")%></a>
</div>
</div>
</div>
</td>
</tr>
</table>
</div>
<%
if (indexBean.isInitialized()) {
String nextNonce = net.i2p.i2ptunnel.web.IndexBean.getNextNonce();
%>
<div id="globalOperationsPanel" class="panel">
<div class="header"></div>
<div class="footer">
<div class="toolbox">
<div class="panel" id="globalTunnelControl">
<h2><%=intl._t("Global Tunnel Control")%></h2>
<table>
<tr>
<td class="buttons">
<a class="control" href="wizard"><%=intl._t("Tunnel Wizard")%></a>
<a class="control" href="list?nonce=<%=nextNonce%>&amp;action=Stop%20all"><%=intl._t("Stop All")%></a>
<a class="control" href="list?nonce=<%=nextNonce%>&amp;action=Start%20all"><%=intl._t("Start All")%></a>
@@ -76,52 +72,44 @@
//this is really bad because it stops and restarts all tunnels, which is probably not what you want
<a class="control" href="list?nonce=<%=nextNonce%>&amp;action=Reload%20configuration"><%=intl._t("Reload Config")%></a>
--%>
</div>
</div>
</div>
</td>
</tr>
</table>
</div>
<div class="panel">
<h2><%=intl._t("I2P Hidden Services")%></h2>
<table id="serverTunnels">
<tr>
<th class="tunnelName"><%=intl._t("Name")%></th>
<th class="tunnelType"><%=intl._t("Type")%></th>
<th class="tunnelLocation"><%=intl._t("Points at")%></th>
<th class="tunnelPreview"><%=intl._t("Preview")%></th>
<th class="tunnelStatus"><%=intl._t("Status")%></th>
<th class="tunnelControl"><%=intl._t("Control")%></th>
</tr>
<div id="localServerTunnelList" class="panel">
<div class="header">
<h4><%=intl._t("I2P Hidden Services")%></h4>
</div>
<div class="separator"> </div>
<div class="nameHeaderField rowItem">
<label><%=intl._t("Name")%>:</label>
</div>
<div class="previewHeaderField rowItem">
<label><%=intl._t("Points at")%>:</label>
</div>
<div class="targetHeaderField rowItem">
<label><%=intl._t("Preview")%>:</label>
</div>
<div class="statusHeaderField rowItem">
<label><%=intl._t("Status")%>:</label>
<hr /> </div>
<%
for (int curServer = 0; curServer < indexBean.getTunnelCount(); curServer++) {
if (indexBean.isClient(curServer)) continue;
%>
<div class="nameField rowItem">
<label><%=intl._t("Name")%>:</label>
<span class="text"><a href="edit?tunnel=<%=curServer%>" title="Edit Server Tunnel Settings for <%=indexBean.getTunnelName(curServer)%>"><%=indexBean.getTunnelName(curServer)%></a></span>
</div>
<div class="previewField rowItem">
<label><%=intl._t("Points at")%>:</label>
<span class="text">
<tr class="tunnelProperties">
<td class="tunnelName">
<a href="edit?tunnel=<%=curServer%>" title="<%=intl._t("Edit Server Tunnel Settings for")%>&nbsp;<%=indexBean.getTunnelName(curServer)%>"><%=indexBean.getTunnelName(curServer)%></a>
</td>
<td class="tunnelType"><%=indexBean.getTunnelType(curServer)%></td>
<td class="tunnelLocation">
<%
if (indexBean.isServerTargetLinkValid(curServer)) {
if (indexBean.isSSLEnabled(curServer)) { %>
<a href="https://<%=indexBean.getServerTarget(curServer)%>/" title="Test HTTPS server, bypassing I2P" target="_top"><%=indexBean.getServerTarget(curServer)%> SSL</a>
<a href="https://<%=indexBean.getServerTarget(curServer)%>/" title="<%=intl._t("Test HTTPS server, bypassing I2P")%>" target="_top"><%=indexBean.getServerTarget(curServer)%> SSL</a>
<% } else { %>
<a href="http://<%=indexBean.getServerTarget(curServer)%>/" title="Test HTTP server, bypassing I2P" target="_top"><%=indexBean.getServerTarget(curServer)%></a>
<a href="http://<%=indexBean.getServerTarget(curServer)%>/" title="<%=intl._t("Test HTTP server, bypassing I2P")%>" target="_top"><%=indexBean.getServerTarget(curServer)%></a>
<%
}
} else {
@@ -132,64 +120,66 @@
<%
}
}
%></span>
</div>
<div class="targetField rowItem">
%>
</td>
<td class="tunnelPreview">
<%
if (("httpserver".equals(indexBean.getInternalType(curServer)) || ("httpbidirserver".equals(indexBean.getInternalType(curServer)))) && indexBean.getTunnelStatus(curServer) == IndexBean.RUNNING) {
%><label><%=intl._t("Preview")%>:</label>
<a class="control" title="Test HTTP server through I2P" href="http://<%=indexBean.getDestHashBase32(curServer)%>" target="_top"><%=intl._t("Preview")%></a>
%>
<a class="control" title="<%=intl._t("Test HTTP server through I2P")%>" href="http://<%=indexBean.getDestHashBase32(curServer)%>" target="_top"><%=intl._t("Preview")%></a>
<%
} else if (indexBean.getTunnelStatus(curServer) == IndexBean.RUNNING) {
%><span class="text"><%=intl._t("Base32 Address")%>:<br /><%=indexBean.getDestHashBase32(curServer)%></span>
%><%=intl._t("Base32 Address")%>:<%=indexBean.getDestHashBase32(curServer)%>
<%
} else {
%><span class="comment"><%=intl._t("No Preview")%></span>
%><%=intl._t("No Preview")%>
<%
}
%></div>
<div class="statusField rowItem">
<label><%=intl._t("Status")%>:</label>
%>
</td>
<td class="tunnelStatus">
<%
switch (indexBean.getTunnelStatus(curServer)) {
case IndexBean.STARTING:
%><div class="statusStarting text"><%=intl._t("Starting...")%></div>
<a class="control" title="Stop this Tunnel" href="list?nonce=<%=nextNonce%>&amp;action=stop&amp;tunnel=<%=curServer%>"><%=intl._t("Stop")%></a>
%><div class="statusStarting text" title="<%=intl._t("Starting...")%>"><%=intl._t("Starting...")%></div>
</td>
<td class="tunnelControl">
<a class="control" title="<%=intl._t("Stop this Tunnel")%>" href="list?nonce=<%=nextNonce%>&amp;action=stop&amp;tunnel=<%=curServer%>"><%=intl._t("Stop")%></a>
<%
break;
case IndexBean.RUNNING:
%><div class="statusRunning text"><%=intl._t("Running")%></div>
<a class="control" title="Stop this Tunnel" href="list?nonce=<%=nextNonce%>&amp;action=stop&amp;tunnel=<%=curServer%>"><%=intl._t("Stop")%></a>
%><div class="statusRunning text" title="<%=intl._t("Running")%>"><%=intl._t("Running")%></div>
</td>
<td class="tunnelControl">
<a class="control" title="<%=intl._t("Stop this Tunnel")%>" href="list?nonce=<%=nextNonce%>&amp;action=stop&amp;tunnel=<%=curServer%>"><%=intl._t("Stop")%></a>
<%
break;
case IndexBean.NOT_RUNNING:
%><div class="statusNotRunning text"><%=intl._t("Stopped")%></div>
<a class="control" title="Start this Tunnel" href="list?nonce=<%=nextNonce%>&amp;action=start&amp;tunnel=<%=curServer%>"><%=intl._t("Start")%></a>
%><div class="statusNotRunning text" title="<%=intl._t("Stopped")%>"><%=intl._t("Stopped")%></div>
</td>
<td class="tunnelControl">
<a class="control" title="<%=intl._t("Start this Tunnel")%>" href="list?nonce=<%=nextNonce%>&amp;action=start&amp;tunnel=<%=curServer%>"><%=intl._t("Start")%></a>
<%
break;
}
%></div>
%>
</td>
</tr>
<tr>
<td class="tunnelDescription" colspan="6">
<span class="tunnelDescriptionLabel"><b>Description:</b></span>
<%=indexBean.getTunnelDescription(curServer)%>
</td>
</tr>
<div class="descriptionField rowItem">
<label><%=intl._t("Description")%>:</label>
<div class="text"><%=indexBean.getTunnelDescription(curServer)%></div>
</div>
<div class="subdivider">
<hr />
</div>
<%
}
%>
<div class="separator">
<hr />
</div>
<div class="footer">
<form id="addNewServerTunnelForm" action="edit">
<div class="toolbox">
<label><%=intl._t("New hidden service")%>:</label>
<tr>
<td class="newTunnel" colspan="6">
<form id="addNewServerTunnelForm" action="edit">
<b><%=intl._t("New hidden service")%>:</b>&nbsp;
<select name="type">
<option value="httpserver">HTTP</option>
<option value="server"><%=intl._t("Standard")%></option>
@@ -198,66 +188,36 @@
<option value="streamrserver">Streamr</option>
</select>
<input class="control" type="submit" value="<%=intl._t("Create")%>" />
</div>
</form>
</div>
</div>
</td>
</tr>
</table>
<h2><%=intl._t("I2P Client Tunnels")%></h2>
<table id="clientTunnels">
<tr>
<th class="tunnelName"><%=intl._t("Name")%></th>
<th class="tunnelType"><%=intl._t("Type")%></th>
<th class="tunnelInterface"><%=intl._t("Interface")%></th>
<th class="tunnelPort"><%=intl._t("Port")%></th>
<th class="tunnelStatus"><%=intl._t("Status")%></th>
<th class="tunnelControl"><%=intl._t("Control")%></th>
</tr>
<div id="localClientTunnelList" class="panel">
<div class="header">
<h4><%=intl._t("I2P Client Tunnels")%></h4>
</div>
<div class="separator"> </div>
<div class="nameHeaderField rowItem">
<label><%=intl._t("Name")%>:</label>
</div>
<div class="portHeaderField rowItem">
<label><%=intl._t("Port")%>:</label>
</div>
<div class="typeHeaderField rowItem">
<label><%=intl._t("Type")%>:</label>
</div>
<div class="interfaceHeaderField rowItem">
<label><%=intl._t("Interface")%>:</label>
</div>
<div class="statusHeaderField rowItem">
<label><%=intl._t("Status")%>:</label>
</div>
<div class="separator">
<hr />
</div>
<%
for (int curClient = 0; curClient < indexBean.getTunnelCount(); curClient++) {
if (!indexBean.isClient(curClient)) continue;
%>
<div class="nameField rowItem">
<label><%=intl._t("Name")%>:</label>
<span class="text"><a href="edit?tunnel=<%=curClient%>" title="Edit Tunnel Settings for <%=indexBean.getTunnelName(curClient)%>"><%=indexBean.getTunnelName(curClient)%></a></span>
</div>
<div class="portField rowItem">
<label><%=intl._t("Port")%>:</label>
<span class="text">
<%
String cPort= indexBean.getClientPort2(curClient);
out.write(cPort);
if (indexBean.isSSLEnabled(curClient))
out.write(" SSL");
%>
</span>
</div>
<div class="typeField rowItem">
<label><%=intl._t("Type")%>:</label>
<span class="text"><%=indexBean.getTunnelType(curClient)%></span>
</div>
<div class="interfaceField rowItem">
<label><%=intl._t("Interface")%>:</label>
<span class="text">
%>
<tr class="tunnelProperties">
<td class="tunnelName">
<a href="edit?tunnel=<%=curClient%>" title="<%=intl._t("Edit Tunnel Settings for")%>&nbsp;<%=indexBean.getTunnelName(curClient)%>"><%=indexBean.getTunnelName(curClient)%></a>
</td>
<td class="tunnelType"><%=indexBean.getTunnelType(curClient)%></td>
<td class="tunnelInterface">
<%
/* should only happen for streamr client */
String cHost= indexBean.getClientInterface(curClient);
@@ -269,45 +229,60 @@
out.write(cHost);
}
%>
</span>
</div>
<div class="statusField rowItem">
<label><%=intl._t("Status")%>:</label>
</td>
<td class="tunnelPort">
<%
String cPort= indexBean.getClientPort2(curClient);
out.write(cPort);
if (indexBean.isSSLEnabled(curClient))
out.write(" SSL");
%>
</td>
<td class="tunnelStatus">
<%
switch (indexBean.getTunnelStatus(curClient)) {
case IndexBean.STARTING:
%><div class="statusStarting text"><%=intl._t("Starting...")%></div>
<a class="control" title="Stop this Tunnel" href="list?nonce=<%=nextNonce%>&amp;action=stop&amp;tunnel=<%=curClient%>"><%=intl._t("Stop")%></a>
%><div class="statusStarting text" title="<%=intl._t("Starting...")%>"><%=intl._t("Starting...")%></div>
</td>
<td class="tunnelControl">
<a class="control" title="<%=intl._t("Stop this Tunnel")%>" href="list?nonce=<%=nextNonce%>&amp;action=stop&amp;tunnel=<%=curClient%>"><%=intl._t("Stop")%></a>
<%
break;
case IndexBean.STANDBY:
%><div class="statusStarting text"><%=intl._t("Standby")%></div>
%><div class="statusStarting text" title="<%=intl._t("Standby")%>"><%=intl._t("Standby")%></div>
</td>
<td class="tunnelControl">
<a class="control" title="Stop this Tunnel" href="list?nonce=<%=nextNonce%>&amp;action=stop&amp;tunnel=<%=curClient%>"><%=intl._t("Stop")%></a>
<%
break;
case IndexBean.RUNNING:
%><div class="statusRunning text"><%=intl._t("Running")%></div>
%><div class="statusRunning text" title="<%=intl._t("Running")%>"><%=intl._t("Running")%></div>
</td>
<td class="tunnelControl">
<a class="control" title="Stop this Tunnel" href="list?nonce=<%=nextNonce%>&amp;action=stop&amp;tunnel=<%=curClient%>"><%=intl._t("Stop")%></a>
<%
break;
case IndexBean.NOT_RUNNING:
%><div class="statusNotRunning text"><%=intl._t("Stopped")%></div>
<a class="control" title="Start this Tunnel" href="list?nonce=<%=nextNonce%>&amp;action=start&amp;tunnel=<%=curClient%>"><%=intl._t("Start")%></a>
%><div class="statusNotRunning text" title="<%=intl._t("Stopped")%>"><%=intl._t("Stopped")%></div>
</td>
<td class="tunnelControl">
<a class="control" title="<%=intl._t("Start this Tunnel")%>" href="list?nonce=<%=nextNonce%>&amp;action=start&amp;tunnel=<%=curClient%>"><%=intl._t("Start")%></a>
<%
break;
}
%></div>
<div class="destinationField rowItem">
<label>
%>
</td>
</tr>
<tr>
<td class="tunnelDestination" colspan="6">
<span class="tunnelDestinationLabel">
<% if ("httpclient".equals(indexBean.getInternalType(curClient)) || "connectclient".equals(indexBean.getInternalType(curClient)) ||
"sockstunnel".equals(indexBean.getInternalType(curClient)) || "socksirctunnel".equals(indexBean.getInternalType(curClient))) { %>
<%=intl._t("Outproxy")%>:
<b><%=intl._t("Outproxy")%>:</b>
<% } else { %>
<%=intl._t("Destination")%>:
<b><%=intl._t("Destination")%>:</b>
<% } %>
</label>
<div class="text">
</span>
<%
if (indexBean.getIsUsingOutproxyPlugin(curClient)) {
%><%=intl._t("internal plugin")%><%
@@ -321,30 +296,22 @@
%><i><%=intl._t("none")%></i><%
}
} %>
</div>
</div>
</td>
</tr>
<% /* TODO SSL outproxy for httpclient if plugin not present */ %>
<div class="descriptionField rowItem">
<label><%=intl._t("Description")%>:</label>
<div class="text"><%=indexBean.getTunnelDescription(curClient)%></div>
</div>
<div class="subdivider">
<hr />
</div>
<tr>
<td class="tunnelDescription" colspan="6">
<span class="tunnelDescriptionLabel"><b><%=intl._t("Description")%>:</b></span>
<%=indexBean.getTunnelDescription(curClient)%>
</td>
</tr>
<%
}
%>
<div class="separator">
<hr />
</div>
<div class="footer">
%>
<tr>
<td class="newTunnel" colspan="6">
<form id="addNewClientTunnelForm" action="edit">
<div class="toolbox">
<label><%=intl._t("New client tunnel")%>:</label>
<b><%=intl._t("New client tunnel")%>:</b>&nbsp;
<select name="type">
<option value="client"><%=intl._t("Standard")%></option>
<option value="httpclient">HTTP/CONNECT</option>
@@ -355,16 +322,17 @@
<option value="streamrclient">Streamr</option>
</select>
<input class="control" type="submit" value="<%=intl._t("Create")%>" />
</div>
</form>
</div>
</div>
</td>
</tr>
</table>
</div>
<%
} // isInitialized()
%>
<div id="pageFooter">
</div>
</body>
</html>

View File

@@ -29,25 +29,22 @@
<% if (editBean.allowCSS()) {
%><link rel="icon" href="<%=editBean.getTheme()%>images/favicon.ico" />
<link href="<%=editBean.getTheme()%>default.css" rel="stylesheet" type="text/css" />
<link href="<%=editBean.getTheme()%>i2ptunnel.css" rel="stylesheet" type="text/css" />
<link href="<%=editBean.getTheme()%>i2ptunnel.css" rel="stylesheet" type="text/css" />
<% }
%>
<style type='text/css'>
input.default { width: 1px; height: 1px; visibility: hidden; }
</style>
</head>
<body id="tunnelEditPage">
<div id="pageHeader">
</div>
<body id="tunnelRegistration">
<%
if (editBean.isInitialized()) {
%>
<form method="post" enctype="multipart/form-data" action="register" accept-charset="UTF-8">
<div id="tunnelEditPanel" class="panel">
<div class="header">
<div class="panel" id="registration">
<%
String tunnelTypeName;
String tunnelType;
@@ -55,11 +52,11 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
if (curTunnel >= 0) {
tunnelTypeName = editBean.getTunnelType(curTunnel);
tunnelType = editBean.getInternalType(curTunnel);
%><h4><%=intl._t("Registration Helper")%></h4><%
%><h2><%=intl._t("Registration Helper")%> (<%=editBean.getTunnelName(curTunnel)%>)</h2><%
} else {
tunnelTypeName = "new";
tunnelType = "new";
%><h4>Fail</h4><p>Tunnel not found</p><%
%><h2>Fail</h2><p>Tunnel not found</p><%
}
String b64 = editBean.getDestinationBase64(curTunnel);
String name = editBean.getSpoofedHost(curTunnel);
@@ -70,85 +67,93 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<input type="hidden" name="nonce" value="<%=net.i2p.i2ptunnel.web.IndexBean.getNextNonce()%>" />
<input type="hidden" name="type" value="<%=tunnelType%>" />
<input type="submit" class="default" name="action" value="Save changes" />
</div>
<%
if (!"new".equals(tunnelType)) {
%>
<span class="comment">
<table>
<tr>
<td class="infohelp">
<%=intl._t("Please be sure to select, copy, and paste the entire contents of the appropriate authentication data into the form of your favorite registration site")%>
</span>
<div class="separator">
<hr />
</div>
<div id="nameField" class="rowItem">
<label for="name" accesskey="N">
<%=intl._t("Name")%>
</label>
<span class="text"><%=editBean.getTunnelName(curTunnel)%></span>
</div>
</td>
</tr>
<tr>
<td>
<b><%=intl._t("Tunnel Name")%>:</b> <%=editBean.getTunnelName(curTunnel)%>
</td>
</tr>
<%
if (("httpserver".equals(tunnelType)) || ("httpbidirserver".equals(tunnelType))) {
%><div id="websiteField" class="rowItem">
<label for="spoofedHost" accesskey="W">
<%=intl._t("Website name")%>
</label>
<span class="text"><%=editBean.getSpoofedHost(curTunnel)%></span>
</div>
%>
<tr><td><b><%=intl._t("Website Name")%>:</b> <%=editBean.getSpoofedHost(curTunnel)%></td></tr>
<%
}
%>
<div id="destinationField" class="rowItem">
<label for="localDestination" accesskey="L">
<%=intl._t("Local destination")%>
</label>
<textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Read Only: Local Destination (if known)" wrap="off" spellcheck="false"><%=editBean.getDestinationBase64(curTunnel)%></textarea>
</div>
<div class="subdivider">
<hr />
</div>
<tr>
<th>
<b><%=intl._t("Local Destination")%></b>
</th>
</tr>
<tr>
<td>
<textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Read Only: Local Destination (if known)" wrap="off" spellcheck="false"><%=editBean.getDestinationBase64(curTunnel)%></textarea>
</td>
</tr>
<%
if (b64 == null || b64.length() < 516) {
%><%=intl._t("Local destination is not available. Start the tunnel.")%><%
%><tr><td class="infohelp"><%=intl._t("Local destination is not available. Start the tunnel.")%></td></tr><%
} else if (name == null || name.equals("") || name.contains(" ") || !name.endsWith(".i2p")) {
if (("httpserver".equals(tunnelType)) || ("httpbidirserver".equals(tunnelType))) {
%><%=intl._t("To enable registration verification, edit tunnel and set name (or website name) to a valid host name ending in '.i2p'")%><%
%><tr><td class="infohelp"><%=intl._t("To enable registration verification, edit tunnel and set name (or website name) to a valid host name ending in '.i2p'")%></td></tr><%
} else {
%><%=intl._t("To enable registration verification, edit tunnel and set name to a valid host name ending in '.i2p'")%><%
%><tr><td class="infohelp"><%=intl._t("To enable registration verification, edit tunnel and set name to a valid host name ending in '.i2p'")%></td></tr><%
}
} else {
SigningPrivateKey spk = editBean.getSigningPrivateKey(curTunnel);
if (spk == null) {
%><%=intl._t("Destination signing key is not available. Start the tunnel.")%><%
%><tr><td class="infohelp"><%=intl._t("Destination signing key is not available. Start the tunnel.")%></td></tr><%
} else {
valid = true;
OrderedProperties props = new OrderedProperties();
HostTxtEntry he = new HostTxtEntry(name, b64, props);
he.sign(spk);
%><div id="sigField" class="rowItem">
<label for="signature">
<%=intl._t("Authentication for adding host")%>
</label>
<textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.write(out); %></textarea>
</div>
</div>
<div id="tunnelAdvancedNetworking" class="panel">
<div class="header">
<h4><%=intl._t("Advanced authentication strings")%></h4>
</div>
%>
<tr>
<th>
<%=intl._t("Authentication for adding host {0}", name)%>
</th>
</tr>
<tr>
<td>
<textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.write(out); %></textarea>
</td>
</tr>
</table>
<h3><%=intl._t("Advanced authentication strings")%></h3>
<%
props.remove(HostTxtEntry.PROP_SIG);
props.setProperty(HostTxtEntry.PROP_ACTION, HostTxtEntry.ACTION_REMOVE);
he.signRemove(spk);
%><div id="sigField" class="rowItem">
<label for="signature">
<%=intl._t("Authentication for removing host")%>
</label>
<textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.writeRemove(out); %></textarea>
<span class="comment"><%=intl._t("This will remove the entry for {0}", name)%></span>
</div>
<div class="separator">
<hr />
</div>
%>
<table>
<tr>
<th>
<%=intl._t("Authentication for removing host {0}", name)%>
</th>
</tr>
<tr>
<td>
<textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.writeRemove(out); %></textarea>
</td>
</tr>
<%
String oldname = wrequest.getParameter("oldname");
String olddestfile = wrequest.getFilename("olddestfile");
@@ -171,106 +176,154 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
}
}
props.remove(HostTxtEntry.PROP_SIG);
%><div id="sigField" class="rowItem">
<label for="signature">
%>
<tr>
<th>
<%=intl._t("Authentication for changing name")%>
</label>
</th>
</tr>
<%
if (oldname != null && oldname.length() > 0 && !oldname.equals(name)) {
props.setProperty(HostTxtEntry.PROP_ACTION, HostTxtEntry.ACTION_CHANGENAME);
props.setProperty(HostTxtEntry.PROP_OLDNAME, oldname);
he.sign(spk);
%><textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.write(out); %></textarea>
<span class="comment"><%=intl._t("This will change the name from {0} to {1}, using the same destination", oldname, name)%></span>
%>
<tr>
<td>
<textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.write(out); %></textarea>
</td>
</tr>
<tr>
<td class="infohelp">
<%=intl._t("This will change the name from {0} to {1}, using the same destination", oldname, name)%>
</td>
</tr>
<%
} else {
%><span class="comment"><%=intl._t("This tunnel must be configured with the new host name.")%></span>
<span class="comment"><%=intl._t("Enter old host name below.")%></span>
%><tr><td class="infohelp"><%=intl._t("This tunnel must be configured with the new host name.")%>
&nbsp;<%=intl._t("Enter old hostname below.")%></td></tr>
<%
}
%></div>
<div class="separator">
<hr />
</div>
%>
<%
props.remove(HostTxtEntry.PROP_SIG);
%><div id="sigField" class="rowItem">
<label for="signature">
%>
<tr>
<th>
<%=intl._t("Authentication for adding alias")%>
</label>
</th>
</tr>
<%
if (oldname != null && oldname.length() > 0 && !oldname.equals(name)) {
props.setProperty(HostTxtEntry.PROP_ACTION, HostTxtEntry.ACTION_ADDNAME);
props.setProperty(HostTxtEntry.PROP_OLDNAME, oldname);
he.sign(spk);
%><textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.write(out); %></textarea>
<span class="comment"><%=intl._t("This will add an alias {0} for {1}, using the same destination", name, oldname)%></span>
%>
<tr>
<td>
<textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.write(out); %></textarea>
</td>
</tr>
<tr>
<td class="infohelp">
<%=intl._t("This will add an alias {0} for {1}, using the same destination", name, oldname)%>
</td>
</tr>
<%
} else {
%><span class="comment"><%=intl._t("This tunnel must be configured with the new host name.")%></span>
<span class="comment"><%=intl._t("Enter old host name below.")%></span>
%><tr> <td class="infohelp"><%=intl._t("This tunnel must be configured with the new host name.")%>
&nbsp;<%=intl._t("Enter old hostname below.")%></td></tr>
<%
}
%></div>
<div class="separator">
<hr />
</div>
%>
<%
props.remove(HostTxtEntry.PROP_SIG);
%><div id="sigField" class="rowItem">
<label for="signature">
%>
<tr>
<th>
<%=intl._t("Authentication for changing destination")%>
</label>
</th>
</tr>
<%
if (spk2 != null) {
props.setProperty(HostTxtEntry.PROP_ACTION, HostTxtEntry.ACTION_CHANGEDEST);
props.setProperty(HostTxtEntry.PROP_OLDDEST, olddest);
he.signInner(spk2);
he.sign(spk);
%><textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.write(out); %></textarea>
<span class="comment"><%=intl._t("This will change the destination for {0}", name)%></span>
%>
<tr>
<td>
<textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.write(out); %></textarea>
</td>
</tr>
<tr>
<td class="infohelp">
<%=intl._t("This will change the destination for {0}", name)%>
</td>
</tr>
<%
} else {
%><span class="comment"><%=intl._t("This tunnel must be configured with the new destination.")%></span>
<span class="comment"><%=intl._t("Enter old destination below.")%></span>
%><tr><td class="infohelp"><%=intl._t("This tunnel must be configured with the new destination.")%>
&nbsp;<%=intl._t("Enter old destination below.")%></td></tr>
<%
}
%></div>
<div class="separator">
<hr />
</div>
%>
<%
props.remove(HostTxtEntry.PROP_SIG);
props.remove(HostTxtEntry.PROP_OLDSIG);
%><div id="sigField" class="rowItem">
<label for="signature">
%>
<tr>
<th>
<%=intl._t("Authentication for adding alternate destination")%>
</label>
</th>
</tr>
<%
if (spk2 != null) {
props.setProperty(HostTxtEntry.PROP_ACTION, HostTxtEntry.ACTION_ADDDEST);
props.setProperty(HostTxtEntry.PROP_OLDDEST, olddest);
he.signInner(spk2);
he.sign(spk);
%><textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.write(out); %></textarea>
<span class="comment"><%=intl._t("This will add an alternate destination for {0}", name)%></span>
%>
<tr>
<td>
<textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.write(out); %></textarea>
</td>
</tr>
<tr>
<td class="infohelp">
<%=intl._t("This will add an alternate destination for {0}", name)%>
</td>
</tr>
<%
} else {
%><span class="comment"><%=intl._t("This tunnel must be configured with the new destination.")%></span>
<span class="comment"><%=intl._t("Enter old destination below.")%></span>
%><tr><td class="infohelp"><%=intl._t("This tunnel must be configured with the new destination.")%>
&nbsp;<%=intl._t("Enter old destination below.")%></td></tr>
<%
}
%></div>
<div class="separator">
<hr />
</div>
%>
<%
props.remove(HostTxtEntry.PROP_SIG);
props.remove(HostTxtEntry.PROP_OLDSIG);
%><div id="sigField" class="rowItem">
<label for="signature">
%>
<tr>
<th>
<%=intl._t("Authentication for adding subdomain")%>
</label>
</th>
</tr>
<%
if (oldname != null && oldname.length() > 0 && !oldname.equals(name) && spk2 != null) {
props.setProperty(HostTxtEntry.PROP_ACTION, HostTxtEntry.ACTION_ADDSUBDOMAIN);
@@ -278,73 +331,98 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
props.setProperty(HostTxtEntry.PROP_OLDDEST, olddest);
he.signInner(spk2);
he.sign(spk);
%><textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.write(out); %></textarea>
<span class="comment"><%=intl._t("This will add a subdomain {0} of {1}, with a different destination", name, oldname)%></span>
%>
<tr>
<td>
<textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.write(out); %></textarea>
</td>
</tr>
<tr>
<td class="infohelp">
<%=intl._t("This will add a subdomain {0} of {1}, with a different destination", name, oldname)%>
</td>
</tr>
<%
} else {
%><span class="comment"><%=intl._t("This tunnel must be configured with the new subdomain and destination.")%></span>
<span class="comment"><%=intl._t("Enter higher-level domain and destination below.")%></span>
%>
<tr>
<td class="infohelp">
<%=intl._t("This tunnel must be configured with the new subdomain and destination.")%>
&nbsp;<%=intl._t("Enter higher-level domain and destination below.")%>
</td>
</tr>
<%
}
%></div>
%>
<div class="footer">
</div>
<%
} // spk != null
} // valid b64 and name
} // !"new".equals(tunnelType)
if (!valid && curTunnel >= 0) {
%><a href="edit?tunnel=<%=curTunnel%>"><%=intl._t("Go back and edit the tunnel")%></a><%
%>
<tr>
<td>
<a href="edit?tunnel=<%=curTunnel%>"><%=intl._t("Go back and edit the tunnel")%></a>
</td>
</tr>
<%
}
%>
</div>
<%
if (valid) {
%>
<div id="globalOperationsPanel" class="panel">
<div class="header">
<h4><%=intl._t("Specify old name and destination")%></h4>
</div>
<span class="comment">
<%=intl._t("This is only required for advanced authentication.")%>
<%=intl._t("See above for required items.")%>
</span>
<tr>
<th>
<%=intl._t("Specify old name and destination")%>
</th>
</tr>
<tr>
<td class="infohelp">
<%=intl._t("This is only required for advanced authentication.")%>
&nbsp;<%=intl._t("See above for required items.")%>
</td>
</tr>
<%
String oldname = wrequest.getParameter("oldname");
if (oldname == null) oldname = "";
%><div id="sigField" class="rowItem">
<label for="signature">
<%=intl._t("Old Host Name")%>
</label>
<input type="text" size="30" maxlength="50" name="oldname" id="name" title="Old Host Name" value="<%=oldname%>" class="freetext" />
</div>
<div id="sigField" class="rowItem">
<label for="signature">
<%=intl._t("Private Key File for old Destination")%>
</label>
<input type="file" size="50%" name="olddestfile" id="name" value="" />
</div>
<div class="footer">
<div class="toolbox">
%>
<tr>
<td>
<b><%=intl._t("Old Hostname")%>:</b>
<input type="text" size="30" maxlength="50" name="oldname" id="oldName" title="Old Hostname" value="<%=oldname%>" class="freetext" />
</td>
</tr>
<tr>
<td>
<b><%=intl._t("Private Key File for old Destination")%>:</b>
<input type="file" name="olddestfile" id="oldDestFile" value="" />
</td>
</tr>
<tr>
<td class="buttons">
<input type="hidden" value="true" name="removeConfirm" />
<button id="controlCancel" class="control" type="submit" name="action" value="" title="Cancel"><%=intl._t("Cancel")%></button>
<button id="controlSave" accesskey="S" class="control" type="submit" name="action" value="authenticate" title="Generate Authentication"><%=intl._t("Generate")%></button>
</div>
</div>
</div>
</td>
</tr>
<%
} // valid
%>
</table>
</div>
</form>
<div id="pageFooter">
</div>
<%
} else {
%>Tunnels are not initialized yet, please reload in two minutes.<%
%><div id="notReady"><%=intl._t("Tunnels are not initialized yet, please reload in two minutes.")%></div><%
} // isInitialized()
%>

View File

@@ -62,48 +62,45 @@
<% if (editBean.allowCSS()) {
%><link rel="icon" href="<%=editBean.getTheme()%>images/favicon.ico" />
<link href="<%=editBean.getTheme()%>default.css" rel="stylesheet" type="text/css" />
<link href="<%=editBean.getTheme()%>i2ptunnel.css" rel="stylesheet" type="text/css" />
<% }
%>
</head>
<body id="tunnelWizardPage">
<div id="pageHeader">
</div>
<form method="post" action="<%=(curPage == 7 ? "list" : "wizard") %>">
<div id="wizardPanel" class="panel">
<div class="header">
<%
if (curPage == 1) {
%><h4><%=intl._t("Server or client tunnel?")%></h4><%
%><h2><%=intl._t("Server or client tunnel?")%></h2><%
} else if (curPage == 2) {
%><h4><%=intl._t("Tunnel type")%></h4><%
%><h2><%=intl._t("Tunnel type")%></h2><%
} else if (curPage == 3) {
%><h4><%=intl._t("Tunnel name and description")%></h4><%
%><h2><%=intl._t("Tunnel name and description")%></h2><%
} else if (curPage == 4 && tunnelIsClient) {
%><h4><%=intl._t("Tunnel destination")%></h4><%
%><h2><%=intl._t("Tunnel destination")%></h2><%
} else if (curPage == 5) {
%><h4><%=intl._t("Binding address and port")%></h4><%
%><h2><%=intl._t("Binding address and port")%></h2><%
} else if (curPage == 6) {
%><h4><%=intl._t("Tunnel auto-start")%></h4><%
%><h2><%=intl._t("Tunnel auto-start")%></h2><%
} else if (curPage == 7) {
%><h4><%=intl._t("Wizard completed")%></h4><%
%><h2><%=intl._t("Wizard completed")%></h2><%
} %>
<input type="hidden" name="page" value="<%=curPage%>" />
<input type="hidden" name="tunnel" value="null" />
<input type="hidden" name="nonce" value="<%=net.i2p.i2ptunnel.web.IndexBean.getNextNonce()%>" />
</div>
<div class="separator">
<hr />
</div>
<table>
<% /* Page 1 - Whether to make a client or server tunnel */
if (curPage == 1) {
%><p>
%>
<tr>
<td>
<p>
<%=intl._t("This wizard will take you through the various options available for creating tunnels in I2P.")%>
</p>
<p>
@@ -111,12 +108,22 @@
<%=intl._t("If you need to connect to a remote service, such as an IRC server inside I2P or a code repository, then you will require a CLIENT tunnel.")%>
<%=intl._t("On the other hand, if you wish to host a service for others to connect to you'll need to create a SERVER tunnel.")%>
</p>
<div id="typeField" class="rowItem">
<label><%=intl._t("Server Tunnel")%></label>
</td>
</tr>
<tr>
<td class="options">
<span class="multiOption" id="isServer">
<input value="false" type="radio" id="baseType" name="isClient" class="tickbox" />
<label><%=intl._t("Client Tunnel")%></label>
&nbsp;<%=intl._t("Server Tunnel")%>
</span>
<span class="multiOption" id="isClient">
<input value="true" type="radio" id="baseType" name="isClient" class="tickbox" checked="checked" />
</div><%
&nbsp;<%=intl._t("Client Tunnel")%>
</span>
</td>
</tr>
<%
} else {
%><input type="hidden" name="isClient" value="<%=tunnelIsClient%>" /><%
} /* curPage 1 */
@@ -126,10 +133,18 @@
<% /* Page 2 - Tunnel type */
if (curPage == 2) {
%><p>
%>
<tr>
<td>
<p>
<%=intl._t("There are several types of tunnels to choose from:")%>
</p>
<table><%
</td>
</tr>
<tr>
<td id="wizardTable">
<table id="wizardTunnelTypes">
<%
if (tunnelIsClient) {
%>
<tr><td><%=intl._t("Standard")%></td><td>
@@ -188,8 +203,12 @@
</td></tr><%
}
%>
</table>
<div id="typeField" class="rowItem">
<tr>
<td>
<%=intl._t("Select tunnel type")%>:
</td>
<td>
<%
if (tunnelIsClient) {
%><select name="type">
@@ -210,7 +229,12 @@
<option value="streamrserver">Streamr</option>
</select><%
} /* tunnelIsClient */ %>
</div><%
</td>
</tr>
</table>
</td>
</tr>
<%
} else {
%><input type="hidden" name="type" value="<%=tunnelType%>" /><%
} /* curPage 2 */
@@ -220,22 +244,28 @@
<% /* Page 3 - Name and description */
if (curPage == 3) {
%><p>
%>
<tr>
<td>
<p>
<%=intl._t("Choose a name and description for your tunnel.")%>
<%=intl._t("These can be anything you want - they are just for ease of identifying the tunnel in the routerconsole.")%>
</p>
<div id="nameField" class="rowItem">
<label for="name" accesskey="N">
<%=intl._t("Name")%>:(<span class="accessKey">N</span>)
</label>
<input type="text" size="30" maxlength="50" name="name" id="name" title="Tunnel Name" value="<%=(!"null".equals(request.getParameter("name")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("name")) : "" ) %>" class="freetext" />
</div>
<div id="descriptionField" class="rowItem">
<label for="description" accesskey="e">
<%=intl._t("Description")%>:(<span class="accessKey">E</span>)
</label>
</td>
</tr>
<tr>
<td>
<span class="tag"><%=intl._t("Name")%>:</span>
<input type="text" size="30" maxlength="50" name="name" id="name" placeholder="New Tunnel" title="Tunnel Name" value="<%=(!"null".equals(request.getParameter("name")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("name")) : "" ) %>" class="freetext" />
</td>
</tr>
<tr>
<td>
<span class="tag"><%=intl._t("Description")%>:</span>
<input type="text" size="60" maxlength="80" name="nofilter_description" id="description" title="Tunnel Description" value="<%=(!"null".equals(request.getParameter("nofilter_description")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("nofilter_description")) : "" ) %>" class="freetext" />
</div><%
</td>
</tr>
<%
} else {
%><input type="hidden" name="name" value="<%=net.i2p.data.DataHelper.stripHTML(request.getParameter("name"))%>" />
<input type="hidden" name="nofilter_description" value="<%=net.i2p.data.DataHelper.stripHTML(request.getParameter("nofilter_description"))%>" /><%
@@ -248,36 +278,47 @@
if (tunnelIsClient) {
if ("httpclient".equals(tunnelType) || "connectclient".equals(tunnelType) || "sockstunnel".equals(tunnelType) || "socksirctunnel".equals(tunnelType)) {
if (curPage == 4) {
%><p>
%>
<tr>
<td>
<p>
<%=intl._t("If you know of any outproxies for this type of tunnel (either HTTP or SOCKS), fill them in below.")%>
<%=intl._t("Separate multiple proxies with commas.")%>
</p>
<div id="destinationField" class="rowItem">
<label for="proxyList" accesskey="x">
<%=intl._t("Outproxies")%>(<span class="accessKey">x</span>):
</label>
</td>
</tr>
<tr>
<td>
<span class="tag"><%=intl._t("Outproxies")%>:</span>
<input type="text" size="30" id="proxyList" name="proxyList" title="List of Outproxy I2P destinations" value="<%=(!"null".equals(request.getParameter("proxyList")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("proxyList")) : "" ) %>" class="freetext" />
</div><%
</td>
</tr>
<%
} else {
%><input type="hidden" name="proxyList" value="<%=net.i2p.data.DataHelper.stripHTML(request.getParameter("proxyList"))%>" /><%
} /* curPage 4 */
} else if ("client".equals(tunnelType) || "ircclient".equals(tunnelType) || "streamrclient".equals(tunnelType)) {
if (curPage == 4) {
%><p>
%>
<tr>
<td>
<p>
<%=intl._t("Type in the I2P destination of the service that this client tunnel should connect to.")%>
<%=intl._t("This could be the full base 64 destination key, or an I2P URL from your address book.")%>
</p>
<div id="destinationField" class="rowItem">
<label for="targetDestination" accesskey="T">
<%=intl._t("Tunnel Destination")%>(<span class="accessKey">T</span>):
</label>
</td>
</tr>
<tr>
<td>
<span class="tag"><%=intl._t("Tunnel Destination")%>:</span>
<input type="text" size="30" id="targetDestination" name="targetDestination" title="Destination of the Tunnel" value="<%=(!"null".equals(request.getParameter("targetDestination")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("targetDestination")) : "" ) %>" class="freetext" />
<span class="comment">(<%=intl._t("name, name:port, or destination")%>
&nbsp;(<%=intl._t("name, name:port, or destination")%>
<% if ("streamrclient".equals(tunnelType)) { /* deferred resolution unimplemented in streamr client */ %>
- <%=intl._t("b32 not recommended")%>
<% } %> )
</span>
</div><%
</td>
</tr>
<%
} else {
%><input type="hidden" name="targetDestination" value="<%=net.i2p.data.DataHelper.stripHTML(request.getParameter("targetDestination"))%>" /><%
} /* curPage 4 */
@@ -290,16 +331,22 @@
if ((tunnelIsClient && "streamrclient".equals(tunnelType)) || (!tunnelIsClient && !"streamrserver".equals(tunnelType))) {
if (curPage == 5) {
%><p>
<%=intl._t("This is the IP that your service is running on, this is usually on the same machine so 127.0.0.1 is autofilled.")%><%
//XXX TODO<%=intl._t("For some reason streamrclient also uses this.")%>
%>
<tr>
<td>
<p>
<%=intl._t("This is the IP that your service is running on, this is usually on the same machine so 127.0.0.1 is autofilled.")%>
<% //TODO For some reason streamrclient also uses this. %>
</p>
<div id="hostField" class="rowItem">
<label for="targetHost" accesskey="H">
<%=intl._t("Host")%>(<span class="accessKey">H</span>):
</label>
<input type="text" size="20" id="targetHost" name="targetHost" title="Target Hostname or IP" value="<%=(!"null".equals(request.getParameter("targetHost")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("targetHost")) : "127.0.0.1" ) %>" class="freetext" />
</div><%
</td>
</tr>
<tr>
<td>
<span class="tag"><%=intl._t("Host")%>:</span>
<input type="text" size="20" id="targetHost" name="targetHost" title="Target Hostname or IP" placeholder="127.0.0.1" value="<%=(!"null".equals(request.getParameter("targetHost")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("targetHost")) : "127.0.0.1" ) %>" class="freetext" />
</td>
</tr>
<%
} else {
%><input type="hidden" name="targetHost" value="<%=net.i2p.data.DataHelper.stripHTML(request.getParameter("targetHost"))%>" /><%
} /* curPage 5 */
@@ -307,15 +354,21 @@
<%
if (!tunnelIsClient) {
if (curPage == 5) {
%><p>
%>
<tr>
<td>
<p>
<%=intl._t("This is the port that the service is accepting connections on.")%>
</p>
<div id="portField" class="rowItem">
<label for="targetPort" accesskey="P">
<%=intl._t("Port")%>(<span class="accessKey">P</span>):
</label>
</td>
</tr>
<tr>
<td>
<span class="tag"><%=intl._t("Port")%>:</span>
<input type="text" size="6" maxlength="5" id="targetPort" name="targetPort" title="Target Port Number" value="<%=(!"null".equals(request.getParameter("targetPort")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("targetPort")) : "" ) %>" class="freetext" />
</div><%
</td>
</tr>
<%
} else {
%><input type="hidden" name="targetPort" value="<%=net.i2p.data.DataHelper.stripHTML(request.getParameter("targetPort"))%>" /><%
} /* curPage 5 */
@@ -323,16 +376,22 @@
<%
if (tunnelIsClient || "httpbidirserver".equals(tunnelType)) {
if (curPage == 5) {
%><p>
%>
<tr>
<td>
<p>
<%=intl._t("This is the port that the client tunnel will be accessed from locally.")%>
<%=intl._t("This is also the client port for the HTTPBidir server tunnel.")%>
</p>
<div id="portField" class="rowItem">
<label for="port" accesskey="P">
<span class="accessKey">P</span>ort:
</label>
</td>
</tr>
<tr>
<td>
<span class="tag"><%=intl._t("Port")%>:</span>
<input type="text" size="6" maxlength="5" id="port" name="port" title="Access Port Number" value="<%=(!"null".equals(request.getParameter("port")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("port")) : "" ) %>" class="freetext" />
</div><%
</td>
</tr>
<%
} else {
%><input type="hidden" name="port" value="<%=net.i2p.data.DataHelper.stripHTML(request.getParameter("port"))%>" /><%
} /* curPage 5 */
@@ -340,16 +399,20 @@
<%
if ((tunnelIsClient && !"streamrclient".equals(tunnelType)) || "httpbidirserver".equals(tunnelType) || "streamrserver".equals(tunnelType)) {
if (curPage == 5) {
%><p>
%>
<tr>
<td>
<p>
<%=intl._t("How do you want this tunnel to be accessed? By just this machine, your entire subnet, or external internet?")%>
<%=intl._t("You will most likely want to just allow 127.0.0.1")%><%
//XXX TODO<%=intl._t("Note that it is relevant to most Client tunnels, and httpbidirserver and streamrserver tunnels.")%><%
//XXX TODO<%=intl._t("So the wording may need to change slightly for the client vs. server tunnels.")%>
//TODO Note that it is relevant to most Client tunnels, and httpbidirserver and streamrserver tunnels.
//TODO So the wording may need to change slightly for the client vs. server tunnels. %>
</p>
<div id="reachField" class="rowItem">
<label for="reachableBy" accesskey="r">
<%=intl._t("Reachable by")%>(<span class="accessKey">R</span>):
</label>
</td>
</tr>
<tr>
<td>
<span class="tag"><%=intl._t("Reachable by")%>:</span>
<select id="reachableBy" name="reachableBy" title="IP for Client Access" class="selectbox">
<%
String clientInterface = request.getParameter("reachableBy");
@@ -368,7 +431,9 @@
}
%>
</select>
</div><%
</td>
</tr>
<%
} else {
%><input type="hidden" name="reachableBy" value="<%=net.i2p.data.DataHelper.stripHTML(request.getParameter("reachableBy"))%>" /><%
} /* curPage 5 */
@@ -379,17 +444,22 @@
<% /* Page 6 - Automatic start */
if (curPage == 6) {
%><p>
%>
<tr>
<td>
<p>
<%=intl._t("The I2P router can automatically start this tunnel for you when the router is started.")%>
<%=intl._t("This can be useful for frequently-used tunnels (especially server tunnels), but for tunnels that are only used occassionally it would mean that the I2P router is creating and maintaining unnecessary tunnels.")%>
</p>
<div id="startupField" class="rowItem">
<label for="startOnLoad" accesskey="a">
<%=intl._t("Auto Start")%>(<span class="accessKey">A</span>):
</label>
</td>
</tr>
<tr>
<td class="options">
<input value="1" type="checkbox" id="startOnLoad" name="startOnLoad" title="Start Tunnel Automatically"<%=("1".equals(request.getParameter("startOnLoad")) ? " checked=\"checked\"" : "")%> class="tickbox" />
<span class="comment"><%=intl._t("(Check the Box for 'YES')")%></span>
</div><%
&nbsp;<%=intl._t("Automatically start tunnel when router starts")%>
</td>
</tr>
<%
} else {
if ("1".equals(request.getParameter("startOnLoad"))) {
%><input type="hidden" name="startOnLoad" value="<%=net.i2p.data.DataHelper.stripHTML(request.getParameter("startOnLoad"))%>" /><%
@@ -401,7 +471,10 @@
<% /* Page 7 - Wizard complete */
if (curPage == 7) {
%><p>
%>
<tr>
<td>
<p>
<%=intl._t("The wizard has now collected enough information to create your tunnel.")%>
<%=intl._t("Upon clicking the Save button below, the wizard will set up the tunnel, and take you back to the main I2PTunnel page.")%>
<%
@@ -416,7 +489,11 @@
<p>
<%=intl._t("Below is a summary of the options you chose:")%>
</p>
<table>
</td>
</tr>
<tr>
<td id="wizardTable">
<table id="wizardSummary">
<tr><td><%=intl._t("Server or client tunnel?")%></td><td>
<%=(tunnelIsClient ? "Client" : "Server")%>
</td></tr>
@@ -439,10 +516,11 @@
Streamr<%
} %>
</td></tr>
<tr><td><%=intl._t("Tunnel name and description")%></td><td>
<%=net.i2p.data.DataHelper.stripHTML(request.getParameter("name"))%><br />
<%=net.i2p.data.DataHelper.stripHTML(request.getParameter("nofilter_description"))%>
</td></tr><%
<tr><td><%=intl._t("Tunnel name")%></td>
<td><%=net.i2p.data.DataHelper.stripHTML(request.getParameter("name"))%></td></tr>
<tr><td><%=intl._t("Tunnel description")%></td>
<td><%=net.i2p.data.DataHelper.stripHTML(request.getParameter("nofilter_description"))%></td></tr>
<%
if (tunnelIsClient) { %>
<tr><td><%=intl._t("Tunnel destination")%></td><td><%
if ("httpclient".equals(tunnelType) || "connectclient".equals(tunnelType) || "sockstunnel".equals(tunnelType) || "socksirctunnel".equals(tunnelType)) { %>
@@ -452,20 +530,20 @@
} %>
</td></tr><%
} %>
<tr><td><%=intl._t("Binding address and port")%></td><td><%
<%
if ((tunnelIsClient && "streamrclient".equals(tunnelType)) || (!tunnelIsClient && !"streamrserver".equals(tunnelType))) { %>
<%=net.i2p.data.DataHelper.stripHTML(request.getParameter("targetHost"))%><br /><%
<tr><td><%=intl._t("Binding address")%></td><td>
<%=net.i2p.data.DataHelper.stripHTML(request.getParameter("targetHost"))%></td></tr><%
}
if (!tunnelIsClient) { %>
<%=net.i2p.data.DataHelper.stripHTML(request.getParameter("targetPort"))%><br /><%
<tr><td><%=intl._t("Tunnel port")%></td><td><%=net.i2p.data.DataHelper.stripHTML(request.getParameter("targetPort"))%></td></tr><%
}
if (tunnelIsClient || "httpbidirserver".equals(tunnelType)) { %>
<br /><%=net.i2p.data.DataHelper.stripHTML(request.getParameter("port"))%><%
<tr><td><%=intl._t("Port")%></td><td><%=net.i2p.data.DataHelper.stripHTML(request.getParameter("port"))%></td></tr><%
}
if ((tunnelIsClient && !"streamrclient".equals(tunnelType)) || "httpbidirserver".equals(tunnelType) || "streamrserver".equals(tunnelType)) { %>
<br /><%=net.i2p.data.DataHelper.stripHTML(request.getParameter("reachableBy"))%><%
<tr><td><%=intl._t("Reachable by")%></td><td><%=net.i2p.data.DataHelper.stripHTML(request.getParameter("reachableBy"))%></td></tr><%
} %>
</td></tr>
<tr><td><%=intl._t("Tunnel auto-start")%></td><td><%
if ("1".equals(request.getParameter("startOnLoad"))) { %>
Yes<%
@@ -474,6 +552,10 @@
} %>
</td></tr>
</table>
</td>
</tr>
<tr>
<td class="infohelp">
<p>
<%=intl._t("Alongside these basic settings, there are a number of advanced options for tunnel configuration.")%>
<%=intl._t("The wizard will set reasonably sensible default values for these, but you can view and/or edit these by clicking on the tunnel's name in the main I2PTunnel page.")%>
@@ -523,35 +605,33 @@ http://stats.i2p/cgi-bin/jump.cgi?a=" /><%
<input type="hidden" name="totalHour" value="0" />
<input type="hidden" name="totalDay" value="0" />
<input type="hidden" name="maxStreams" value="0" />
<input type="hidden" name="cert" value="0" /><%
<input type="hidden" name="cert" value="0" />
</td>
</tr>
<%
} /* tunnelIsClient */
} /* curPage 7 */
/* End page 7 */ %>
</div>
<div id="globalOperationsPanel" class="panel">
<div class="header"></div>
<div class="footer">
<div class="toolbox">
<tr>
<td class="buttons">
<a class="control" href="list"><%=intl._t("Cancel")%></a>
<% if (curPage != 1 && curPage != 7) {
%><button id="controlPrevious" accesskey="P" class="control" type="submit" name="action" value="Previous page" title="Previous Page"><%=intl._t("Previous")%>(<span class="accessKey">P</span>)</button><%
%><button id="controlPrevious" class="control" type="submit" name="action" value="Previous page" title="Previous Page"><%=intl._t("Previous")%></button><%
} %>
<% if (curPage == 7) {
%><button id="controlSave" accesskey="S" class="control" type="submit" name="action" value="Save changes" title="Save Tunnel"><%=intl._t("Save Tunnel")%>(<span class="accessKey">S</span>)</button><%
%><button id="controlSave" class="control" type="submit" name="action" value="Save changes" title="Save Tunnel"><%=intl._t("Save Tunnel")%></button><%
} else if (curPage == 6) {
%><button id="controlFinish" accesskey="F" class="control" type="submit" name="action" value="Next page" title="Finish Wizard"><%=intl._t("Finish")%>(<span class="accessKey">F</span>)</button><%
%><button id="controlFinish" class="control" type="submit" name="action" value="Next page" title="Finish Wizard"><%=intl._t("Finish")%></button><%
} else {
%><button id="controlNext" accesskey="N" class="control" type="submit" name="action" value="Next page" title="Next Page"><%=intl._t("Next")%>(<span class="accessKey">N</span>)</button><%
%><button id="controlNext" class="control" type="submit" name="action" value="Next page" title="Next Page"><%=intl._t("Next")%></button><%
} %>
</div>
</div>
</td>
</tr>
</table>
</div>
</form>
<div id="pageFooter">
</div>
</body>
</html>