package freenet.clients.http;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import freenet.client.HighLevelSimpleClient;
import freenet.l10n.NodeL10n;
import freenet.node.Node;
import freenet.node.updater.NodeUpdateManager;
import freenet.support.HTMLNode;
import freenet.support.SimpleFieldSet;
import freenet.support.api.HTTPRequest;
import freenet.support.io.FileBucket;
public class DarknetAddRefToadlet extends Toadlet {
private final Node node;
private final DarknetConnectionsToadlet friendsToadlet;
protected DarknetAddRefToadlet(Node n, HighLevelSimpleClient client, DarknetConnectionsToadlet friendsToadlet) {
super(client);
this.node = n;
this.friendsToadlet = friendsToadlet;
}
public void handleMethodGET(URI uri, final HTTPRequest request, ToadletContext ctx) throws ToadletContextClosedException, IOException, RedirectException {
if(!ctx.checkFullAccess(this))
return;
String path = uri.getPath();
if(path.endsWith(NodeUpdateManager.WINDOWS_FILENAME)) {
File installer = node.nodeUpdater.getInstallerWindows();
if(installer != null) {
FileBucket bucket = new FileBucket(installer, true, false, false, false);
this.writeReply(ctx, 200, "application/x-msdownload", "OK", bucket);
return;
}
}
if(path.endsWith(NodeUpdateManager.NON_WINDOWS_FILENAME)) {
File installer = node.nodeUpdater.getInstallerNonWindows();
if(installer != null) {
FileBucket bucket = new FileBucket(installer, true, false, false, false);
this.writeReply(ctx, 200, "application/x-java-archive", "OK", bucket);
return;
}
}
PageMaker pageMaker = ctx.getPageMaker();
PageNode page = pageMaker.getPageNode(l10n("title"), ctx);
HTMLNode pageNode = page.outer;
HTMLNode contentNode = page.content;
contentNode.addChild(ctx.getAlertManager().createSummary());
HTMLNode boxContent = pageMaker.getInfobox("infobox-information", l10n("explainBoxTitle"), contentNode, "darknet-explanations", true);
boxContent.addChild("p", l10n("explainBox1"));
boxContent.addChild("p", l10n("explainBox2"));
File installer = node.nodeUpdater.getInstallerWindows();
String shortFilename = NodeUpdateManager.WINDOWS_FILENAME;
HTMLNode p = boxContent.addChild("p");
if(installer != null)
NodeL10n.getBase().addL10nSubstitution(p, "DarknetAddRefToadlet.explainInstallerWindows", new String[] { "filename", "get-windows" },
new HTMLNode[] { HTMLNode.text(installer.getCanonicalPath()), HTMLNode.link(path()+shortFilename) });
else
NodeL10n.getBase().addL10nSubstitution(p, "DarknetAddRefToadlet.explainInstallerWindowsNotYet", new String[] { "link" }, new HTMLNode[] { HTMLNode.link("/"+node.nodeUpdater.getInstallerWindowsURI().toString()) });
installer = node.nodeUpdater.getInstallerNonWindows();
shortFilename = NodeUpdateManager.NON_WINDOWS_FILENAME;
boxContent.addChild("#", " ");
p = boxContent.addChild("p");
if(installer != null)
NodeL10n.getBase().addL10nSubstitution(p, "DarknetAddRefToadlet.explainInstallerNonWindows", new String[] { "filename", "get-nonwindows", "shortfilename" },
new HTMLNode[] { HTMLNode.text(installer.getCanonicalPath()), HTMLNode.link(path()+shortFilename), HTMLNode.text(shortFilename) });
else
NodeL10n.getBase().addL10nSubstitution(p, "DarknetAddRefToadlet.explainInstallerNonWindowsNotYet", new String[] { "link", "shortfilename" }, new HTMLNode[] { HTMLNode.link("/"+node.nodeUpdater.getInstallerNonWindowsURI().toString()), HTMLNode.text(shortFilename) });
ConnectionsToadlet.drawAddPeerBox(contentNode, ctx, false, friendsToadlet.path());
friendsToadlet.drawNoderefBox(contentNode, getNoderef(), pageMaker.advancedMode(request, this.container));
this.writeHTMLReply(ctx, 200, "OK", pageNode.generate());
}
protected SimpleFieldSet getNoderef() {
return node.exportDarknetPublicFieldSet();
}
private static String l10n(String string) {
return NodeL10n.getBase().getString("DarknetAddRefToadlet."+string);
}
static final String PATH = "/addfriend/";
@Override
public String path() {
return PATH;
}
}