Files
i2p.i2p/apps/routerconsole/jsp/exportfamily.jsp

42 lines
1.7 KiB
Plaintext

<%
/*
* USE CAUTION WHEN EDITING
* Trailing whitespace OR NEWLINE on the last line will cause
* IllegalStateExceptions !!!
*
* Do not tag this file for translation.
*/
try {
net.i2p.I2PAppContext ctx = net.i2p.I2PAppContext.getGlobalContext();
String family = ctx.getProperty("netdb.family.name");
String keypw = ctx.getProperty("netdb.family.keyPassword");
String kspw = ctx.getProperty("netdb.family.keystorePassword", net.i2p.crypto.KeyStoreUtil.DEFAULT_KEYSTORE_PASSWORD);
if (family == null || keypw == null) {
response.sendError(404);
return;
}
try {
response.setDateHeader("Expires", 0);
response.setHeader("Accept-Ranges", "none");
response.addHeader("Cache-Control", "no-store, max-age=0, no-cache, must-revalidate");
response.addHeader("Pragma", "no-cache");
String name = "family-" + family + "-secret.crt";
response.setContentType("application/x-x509-ca-cert; name=\"" + name + '"');
response.addHeader("Content-Disposition", "attachment; filename=\"" + name + '"');
java.io.File ks = new java.io.File(ctx.getConfigDir(), "keystore");
ks = new java.io.File(ks, "family-" + family + ".ks");
java.io.OutputStream cout = response.getOutputStream();
net.i2p.crypto.KeyStoreUtil.exportPrivateKey(ks, kspw, family, keypw, cout);
} catch (java.security.GeneralSecurityException gse) {
throw new java.io.IOException("key error", gse);
}
} catch (java.io.IOException ioe) {
// prevent 'Committed' IllegalStateException from Jetty
if (!response.isCommitted()) {
response.sendError(403, ioe.toString());
} else {
// Jetty doesn't log this
throw ioe;
}
}
%>