Author: nextgens
Date: 2007-05-30 19:12:37 +0000 (Wed, 30 May 2007)
New Revision: 13395
Modified:
trunk/freenet/src/freenet/clients/http/FirstTimeWizardToadlet.java
trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties
Log:
New step for network configuration in the wizard ... I'm not proud of it:
suggestions are welcome.
Modified: trunk/freenet/src/freenet/clients/http/FirstTimeWizardToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/FirstTimeWizardToadlet.java
2007-05-29 22:24:23 UTC (rev 13394)
+++ trunk/freenet/src/freenet/clients/http/FirstTimeWizardToadlet.java
2007-05-30 19:12:37 UTC (rev 13395)
@@ -4,7 +4,10 @@
package freenet.clients.http;
import java.io.IOException;
+import java.net.InetAddress;
+import java.net.NetworkInterface;
import java.net.URI;
+import java.util.Enumeration;
import freenet.client.HighLevelSimpleClient;
import freenet.config.Config;
@@ -45,7 +48,7 @@
int currentStep = request.getIntParam("step");
if(currentStep == 1) {
- HTMLNode pageNode =
ctx.getPageMaker().getPageNode(l10n("step1Title"), ctx);
+ HTMLNode pageNode =
ctx.getPageMaker().getPageNode(l10n("step1Title"), false, ctx);
HTMLNode contentNode =
ctx.getPageMaker().getContentNode(pageNode);
HTMLNode languageInfobox = contentNode.addChild("div",
"class", "infobox infobox-normal");
@@ -70,7 +73,7 @@
this.writeReply(ctx, 200, "text/html; charset=utf-8",
"OK", pageNode.generate());
return;
} else if(currentStep == 2) {
- HTMLNode pageNode =
ctx.getPageMaker().getPageNode(l10n("step2Title"), ctx);
+ HTMLNode pageNode =
ctx.getPageMaker().getPageNode(l10n("step2Title"), false, ctx);
HTMLNode contentNode =
ctx.getPageMaker().getContentNode(pageNode);
HTMLNode bandwidthInfobox = contentNode.addChild("div",
"class", "infobox infobox-normal");
@@ -95,7 +98,7 @@
this.writeReply(ctx, 200, "text/html; charset=utf-8",
"OK", pageNode.generate());
return;
} else if(currentStep == 3) {
- HTMLNode pageNode =
ctx.getPageMaker().getPageNode(l10n("step3Title"), ctx);
+ HTMLNode pageNode =
ctx.getPageMaker().getPageNode(l10n("step3Title"), false, ctx);
HTMLNode contentNode =
ctx.getPageMaker().getContentNode(pageNode);
HTMLNode bandwidthInfobox = contentNode.addChild("div",
"class", "infobox infobox-normal");
@@ -121,17 +124,67 @@
bandwidthForm.addChild("input", new String[] { "type",
"name", "value" }, new String[] { "submit", "cancel",
L10n.getString("Toadlet.cancel")});
this.writeReply(ctx, 200, "text/html; charset=utf-8",
"OK", pageNode.generate());
return;
+ } else if(currentStep == 4) {
+ HTMLNode pageNode =
ctx.getPageMaker().getPageNode(l10n("step4Title"), false, ctx);
+ HTMLNode contentNode =
ctx.getPageMaker().getContentNode(pageNode);
+
+ HTMLNode bandwidthInfobox = contentNode.addChild("div",
"class", "infobox infobox-normal");
+ HTMLNode bandwidthnfoboxHeader =
bandwidthInfobox.addChild("div", "class", "infobox-header");
+ HTMLNode bandwidthInfoboxContent =
bandwidthInfobox.addChild("div", "class", "infobox-content");
+
+ Enumeration interfaces =
NetworkInterface.getNetworkInterfaces();
+ HTMLNode bandwidthForm =
ctx.addFormChild(bandwidthInfoboxContent, ".", "networkForm");
+ // We always want that... don't we ?
+ bandwidthForm.addChild("input", new String[] { "type",
"name", "value"}, new String[] { "hidden", "127.0.0.1", "true" });
+
+ short ifCount = 0;
+ HTMLNode ifList = new HTMLNode("div", "class",
"interface");
+ while(interfaces.hasMoreElements()) {
+ NetworkInterface currentInterface =
(NetworkInterface) interfaces.nextElement();
+ if((currentInterface == null) ||
(currentInterface.isLoopback())) continue;
+
+ Enumeration ipAddresses =
currentInterface.getInetAddresses();
+ while(ipAddresses.hasMoreElements()) {
+ InetAddress ip = (InetAddress)
ipAddresses.nextElement();
+ if(ip == null) continue;
+ ifCount++;
+ HTMLNode ipDiv = ifList.addChild("div",
"class", "ipAddress");
+ ipDiv.addChild("#",
L10n.getString("FirstTimeWizardToadlet.iDoTrust", new String[] { "interface",
"ip" }, new String[] { currentInterface.getName(), ip.getHostAddress() }));
+ ipDiv.addChild("input", new String[] {
"type", "name", "value"}, new String[] { "radio", ip.getHostAddress(), "true"
}, L10n.getString("Toadlet.yes"));
+ ipDiv.addChild("input", new String[] {
"type", "name", "value", "checked"}, new String[] { "radio",
ip.getHostAddress(), "false", "checked" }, L10n.getString("Toadlet.no"));
+ }
+ }
+
+ if(ifCount > 0) {
+ bandwidthnfoboxHeader.addChild("#",
l10n("isNetworkTrusted"));
+ bandwidthInfoboxContent.addChild("#",
l10n("isNetworkTrustedLong"));
+ bandwidthForm.addChild(ifList);
+ } else {
+ bandwidthnfoboxHeader.addChild("#",
l10n("noNetworkIF"));
+ bandwidthInfoboxContent.addChild("#",
l10n("noNetworkIFLong"));
+ }
+
+ bandwidthForm.addChild("input", new String[] { "type",
"name", "value" }, new String[] { "submit", "networkF",
L10n.getString("Toadlet.clickHere")});
+ bandwidthForm.addChild("input", new String[] { "type",
"name", "value" }, new String[] { "submit", "cancel",
L10n.getString("Toadlet.cancel")});
+ this.writeReply(ctx, 200, "text/html; charset=utf-8",
"OK", pageNode.generate());
+ return;
}
- HTMLNode pageNode =
ctx.getPageMaker().getPageNode(l10n("homepageTitle"), ctx);
+ HTMLNode pageNode =
ctx.getPageMaker().getPageNode(l10n("homepageTitle"), false, ctx);
HTMLNode contentNode =
ctx.getPageMaker().getContentNode(pageNode);
HTMLNode welcomeInfobox = contentNode.addChild("div", "class",
"infobox infobox-normal");
HTMLNode welcomeInfoboxHeader = welcomeInfobox.addChild("div",
"class", "infobox-header");
HTMLNode welcomeInfoboxContent = welcomeInfobox.addChild("div",
"class", "infobox-content");
welcomeInfoboxHeader.addChild("#", l10n("welcomeInfoboxTitle"));
- welcomeInfoboxContent.addChild("#",
l10n("welcomeInfoboxContent1"));
- welcomeInfoboxContent.addChild("a", "href",
"?step=1").addChild("#", L10n.getString("Toadlet.clickHere"));
+
+ HTMLNode firstParagraph = welcomeInfoboxContent.addChild("p");
+ firstParagraph.addChild("#", l10n("welcomeInfoboxContent1") + '
');
+ firstParagraph.addChild("a", "href", "?step=1").addChild("#",
L10n.getString("Toadlet.clickHere"));
+
+ HTMLNode secondParagraph = welcomeInfoboxContent.addChild("p");
+ secondParagraph.addChild("a", "href", "/").addChild("#",
l10n("skipWizard"));
+
this.writeReply(ctx, 200, "text/html; charset=utf-8", "OK",
pageNode.generate());
}
@@ -183,8 +236,48 @@
}
super.writeTemporaryRedirect(ctx, "step3",
TOADLET_URL+"?step=4");
return;
+ } else if(request.isPartSet("networkF")) {
+ StringBuffer sb = new StringBuffer();
+ short ifCount = 0;
+
+ Enumeration interfaces =
NetworkInterface.getNetworkInterfaces();
+ while(interfaces.hasMoreElements()) {
+ NetworkInterface currentIF = (NetworkInterface)
interfaces.nextElement();
+ if(currentIF == null) continue;
+
+ Enumeration ipAddresses =
currentIF.getInetAddresses();
+ while(ipAddresses.hasMoreElements()) {
+ InetAddress currentInetAddress =
(InetAddress) ipAddresses.nextElement();
+ if(currentInetAddress == null) continue;
+ String isIFSelected
=request.getPartAsString(currentInetAddress.getHostAddress(), 255);
+ if((isIFSelected != null) &&
(isIFSelected.equals("true"))) {
+
sb.append(currentInetAddress.getHostAddress());
+ sb.append(',');
+ ifCount++;
+ // The trailling comma is going
to be sanitized by the config framework anyway
+ }
+ }
+ }
+
+ if(ifCount > 1) { // One is loopback => default
+ try {
+ // Java doesn't provide a way to get
the netmask : workaround and bind only to trusted if
+ config.get("fcp").set("bindTo",
sb.toString()); // FIXME: Would break ipv6?
+ config.get("fcp").set("allowedHosts",
"*");
+
config.get("fcp").set("allowedHostsFullAccess", "*");
+
+ config.get("fproxy").set("bindTo",
sb.toString()); // FIXME: Would break ipv6?
+
config.get("fproxy").set("allowedHosts", "*");
+
config.get("fproxy").set("allowedHostsFullAccess", "*");
+
+ Logger.normal(this, "Network allowance
list has been set to "+ sb.toString());
+ } catch (InvalidConfigValueException e) {
+ Logger.error(this, "Should not happen,
please report!" + e);
+ }
+ }
+ super.writeTemporaryRedirect(ctx, "step4",
TOADLET_URL+"?step=5");
+ return;
}
-
super.writeTemporaryRedirect(ctx, "invalid/unhandled data",
TOADLET_URL);
}
Modified: trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties
===================================================================
--- trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties 2007-05-29
22:24:23 UTC (rev 13394)
+++ trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties 2007-05-30
19:12:37 UTC (rev 13395)
@@ -172,9 +172,16 @@
FirstTimeWizardToadlet.bandwidthLimitLong=Please select your connection type
from the dropdown menu below.
FirstTimeWizardToadlet.datastoreSize=Datastore size
FirstTimeWizardToadlet.datastoreSizeLong=Please select a size for your
datastore.
+FirstTimeWizardToadlet.isNetworkTrusted=Is your local network trusted ?
+FirstTimeWizardToadlet.isNetworkTrustedLong=Is your local network trusted ? If
you don't answer the default option all the services provided by your node will
be wide open to everyone willing to access them. If you want to do more
selective access controls you can proceed later on from the configuration page.
+FirstTimeWizardToadlet.noNetworkIF=No additionnal network interface found
+FirstTimeWizardToadlet.noNetworkIFLong=Freenet hasn't found any additionnal
network interface. It will assume that you will connect to it from your
computer and only from it.
+FirstTimeWizardToadlet.iDoTrust=Do you trust people connected to ${interface}
(${ip}) ?
FirstTimeWizardToadlet.step1Title=Freenet first time wizard! - Choose your
language
FirstTimeWizardToadlet.step2Title=Freenet first time wizard! - Bandwidth limits
FirstTimeWizardToadlet.step3Title=Freenet first time wizard! - Datastore size
+FirstTimeWizardToadlet.step4Title=Freenet first time wizard! - Network
configuration
+FirstTimeWizardToadlet.skipWizard=I am not a newbie, please skip the wizard!
FProxyToadlet.abortToHomepage=Abort and return to the FProxy home page
FProxyToadlet.backToFProxy=${link}Click here${/link} to go to the FProxy home
page.
FProxyToadlet.backToReferrer=${link}Click here${/link} to go back to the
referring page.
@@ -782,6 +789,8 @@
TextModeClientInterfaceServer.enabledLong=Whether to enable the TMCI
TextModeClientInterfaceServer.telnetPortNumber=Telnet port
TextModeClientInterfaceServer.telnetPortNumberLong=Telnet port number
+Toadlet.yes=Yes
+Toadlet.no=No
Toadlet.cancel=Cancel
Toadlet.clickHere=Click here
Toadlet.internalErrorPleaseReport=Internal error: please report