forked from I2P_Developers/i2p.i2p
i2ptunnel: Results page after generating LS2 DH key
This commit is contained in:
@@ -1528,11 +1528,11 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
|
||||
' ' + _t("Ask the server operator for help.") +
|
||||
"</p>\n" +
|
||||
|
||||
"<p>" + _t("Enter PSK encryption key") +
|
||||
"</p>\n" +
|
||||
"<p><b>PSK:</b> " + _t("Enter PSK encryption key") +
|
||||
": ]</p>\n" +
|
||||
"<input type=\"text\" size=\"55\" name=\"privkey\" value=\"\">\n" +
|
||||
"<p>" + _t("Generate new DH encryption key") +
|
||||
"<div class=\"formaction\">" +
|
||||
"<p><b>DH:</b> " + _t("Generate new DH encryption key") +
|
||||
": <div class=\"formaction_xx\">" +
|
||||
"<button type=\"submit\" class=\"accept\" name=\"action\" value=\"newdh\">" + label +
|
||||
"</button></div>\n");
|
||||
//"<p>" + _t("Generate new PSK encryption key") +
|
||||
|
||||
@@ -25,8 +25,9 @@ import net.i2p.data.DataFormatException;
|
||||
import net.i2p.data.DataHelper;
|
||||
import net.i2p.data.Destination;
|
||||
import net.i2p.data.PrivateKey;
|
||||
import net.i2p.data.PublicKey;
|
||||
import net.i2p.data.SigningPublicKey;
|
||||
import net.i2p.i2ptunnel.I2PTunnelHTTPClient;
|
||||
import net.i2p.i2ptunnel.I2PTunnelHTTPClientBase;
|
||||
import net.i2p.util.FileUtil;
|
||||
import net.i2p.util.PortMapper;
|
||||
import net.i2p.util.Translate;
|
||||
@@ -78,6 +79,15 @@ public abstract class LocalHTTPServer {
|
||||
"\r\n"+
|
||||
"I2P HTTP proxy OK";
|
||||
|
||||
private final static String NEWKEY =
|
||||
"HTTP/1.1 200 OK\r\n" +
|
||||
"Content-Type: text/html; charset=UTF-8\r\n" +
|
||||
"Referrer-Policy: no-referrer\r\n"+
|
||||
"Cache-Control: no-cache\r\n" +
|
||||
"Connection: close\r\n"+
|
||||
"Proxy-Connection: close\r\n"+
|
||||
"\r\n";
|
||||
|
||||
/**
|
||||
* Very simple web server.
|
||||
*
|
||||
@@ -219,6 +229,7 @@ public abstract class LocalHTTPServer {
|
||||
if (proxyNonce.equals(nonce) && url != null && host != null && code != null) {
|
||||
boolean success = true;
|
||||
PrivateKey privateKey = null;
|
||||
PublicKey publicKey = null;
|
||||
if (!code.equals("2") && !code.equals("4")) {
|
||||
secret = null;
|
||||
} else if (secret == null || secret.length() == 0) {
|
||||
@@ -233,6 +244,7 @@ public abstract class LocalHTTPServer {
|
||||
// newpsk probably not required
|
||||
KeyPair kp = context.keyGenerator().generatePKIKeys(EncType.ECIES_X25519);
|
||||
privateKey = kp.getPrivate();
|
||||
publicKey = kp.getPublic();
|
||||
authType = action.equals("newdh") ? BlindData.AUTH_DH : BlindData.AUTH_PSK;
|
||||
} else if (privkey == null || privkey.length() == 0) {
|
||||
err = _t("Missing private key");
|
||||
@@ -262,7 +274,54 @@ public abstract class LocalHTTPServer {
|
||||
bd.setExpiration(exp);
|
||||
I2PSession sess = sockMgr.getSession();
|
||||
sess.sendBlindingInfo(bd);
|
||||
writeB32RedirectPage(out, host, url);
|
||||
if ("newdh".equals(action) || "newpsk".equals(action)) {
|
||||
String key;
|
||||
if ("newdh".equals(action))
|
||||
key = publicKey.toBase64();
|
||||
else
|
||||
key = privateKey.toBase64();
|
||||
StringBuilder buf = new StringBuilder(1024);
|
||||
PortMapper pm = context.portMapper();
|
||||
String conURL = pm.getConsoleURL();
|
||||
buf.append(NEWKEY)
|
||||
.append("<html><head><title>")
|
||||
.append(_t("Your new encrytpion key"))
|
||||
.append("</title>\n" +
|
||||
"<link rel=\"shortcut icon\" href=\"http://proxy.i2p/themes/console/images/favicon.ico\" >\n" +
|
||||
"<link href=\"http://proxy.i2p/themes/console/default/console.css\" rel=\"stylesheet\" type=\"text/css\" >\n" +
|
||||
"</head><body>\n" +
|
||||
"<div class=logo>\n" +
|
||||
"<a href=\"")
|
||||
.append(conURL).append("\" title=\"").append(_t("Router Console"))
|
||||
.append("\"><img src=\"http://proxy.i2p/themes/console/images/i2plogo.png\" alt=\"I2P Router Console\" border=\"0\"></a><hr>\n" +
|
||||
"<a href=\"")
|
||||
.append(conURL).append("config\">").append(_t("Configuration")).append("</a> <a href=\"")
|
||||
.append(conURL).append("help.jsp\">").append(_t("Help")).append("</a>");
|
||||
if (pm.isRegistered(PortMapper.SVC_SUSIDNS)) {
|
||||
buf.append(" <a href=\"").append(conURL).append("susidns/index\">")
|
||||
.append(_t("Addressbook")).append("</a>\n");
|
||||
}
|
||||
buf.append("</div>" +
|
||||
"<div class=warning id=warning>\n" +
|
||||
"<h3>")
|
||||
.append(_t("Your new encrytpion key"))
|
||||
.append("</h3>\n<p>" +
|
||||
"<textarea rows=\"1\" style=\"min-width: 0; min-height: 0;\" cols=\"70\" wrap=\"off\" readonly=\"readonly\" >")
|
||||
.append(key)
|
||||
.append("</textarea><p>")
|
||||
.append(_t("Copy the key and send it to the server operator."))
|
||||
.append(' ')
|
||||
.append(_t("After you are granted permission, you may proceed to the website."))
|
||||
.append("<p><a href=\"")
|
||||
.append(url)
|
||||
.append("\">")
|
||||
.append(url)
|
||||
.append("</a></div>");
|
||||
out.write(buf.toString().getBytes("UTF-8"));
|
||||
I2PTunnelHTTPClientBase.writeFooter(out);
|
||||
} else {
|
||||
writeB32RedirectPage(out, host, url);
|
||||
}
|
||||
return;
|
||||
} catch (IllegalArgumentException iae) {
|
||||
err = iae.toString();
|
||||
@@ -320,7 +379,7 @@ public abstract class LocalHTTPServer {
|
||||
"</h3>\n<p><a href=\"" + url + "\">" +
|
||||
_t("Click here if you are not redirected automatically.") +
|
||||
"</a></p></div>").getBytes("UTF-8"));
|
||||
I2PTunnelHTTPClient.writeFooter(out);
|
||||
I2PTunnelHTTPClientBase.writeFooter(out);
|
||||
out.flush();
|
||||
}
|
||||
|
||||
@@ -352,7 +411,7 @@ public abstract class LocalHTTPServer {
|
||||
"</h3>\n<p><a href=\"" + url + "\">" +
|
||||
_t("Click here if you are not redirected automatically.") +
|
||||
"</a></p></div>").getBytes("UTF-8"));
|
||||
I2PTunnelHTTPClient.writeFooter(out);
|
||||
I2PTunnelHTTPClientBase.writeFooter(out);
|
||||
out.flush();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user