* Matthew Toseland <toad at amphibian.dyndns.org> [2007-05-30 20:24:14]:
> Is this safe by default? Are you planning to deal with UP&P based
> on this code too?
Yes binding only to "trusted" interfaces is safe... I don't see any kind
of UI we could use not requiering the user to understand the CIDR
notation and so on... so I just gave up :) Assuming that geeks will find
the way to do it and other users won't need it anyway.
I dunno yet, I'll keep it simple at the beginning and make it evolve
over time depending on feedback given by newbies.
>
> On Wednesday 30 May 2007 20:12, nextgens at freenetproject.org wrote:
> > 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
> >
> > _______________________________________________
> > cvs mailing list
> > cvs at freenetproject.org
> > http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs
> _______________________________________________
> Devl mailing list
> Devl at freenetproject.org
> http://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL:
<https://emu.freenetproject.org/pipermail/devl/attachments/20070530/f4f26a08/attachment.pgp>