From: robk-tahoe <robk-tahoe@allmydata.com>
Date: Tue, 8 Jan 2008 01:04:56 +0000 (-0700)
Subject: reinstate creation of node.url files upon startup
X-Git-Tag: allmydata-tahoe-0.7.0~3
X-Git-Url: https://git.rkrishnan.org/%5B/%5D%20/uri/%22doc.html/README.win32?a=commitdiff_plain;h=08c3ee73a21fa88df68494c593fc580b274c4e94;p=tahoe-lafs%2Ftahoe-lafs.git

reinstate creation of node.url files upon startup

a recent purge of the start.html code also took away the logic that wrote
'node.url' into the node root.  this is required for the tahoe cli tool to
find the node.  this puts back a limited fraction of that code, so that the
node writes out a node.url file upon startup.
---

diff --git a/src/allmydata/client.py b/src/allmydata/client.py
index 8c3b028e..f6670d0e 100644
--- a/src/allmydata/client.py
+++ b/src/allmydata/client.py
@@ -97,7 +97,8 @@ class Client(node.Node, Referenceable, testutil.PollMixin):
         self.log("init_web(webport=%s)", args=(webport,))
 
         from allmydata.webish import WebishServer
-        ws = WebishServer(webport)
+        nodeurl_path = os.path.join(self.basedir, "node.url")
+        ws = WebishServer(webport, nodeurl_path)
         if self.get_config("webport_allow_localfile") is not None:
             ws.allow_local_access(True)
         self.add_service(ws)
diff --git a/src/allmydata/webish.py b/src/allmydata/webish.py
index 13fc476c..aa3d0625 100644
--- a/src/allmydata/webish.py
+++ b/src/allmydata/webish.py
@@ -1,7 +1,7 @@
 
 from base64 import b32encode
 import os.path
-from twisted.application import service, strports
+from twisted.application import service, strports, internet
 from twisted.web import static, resource, server, html, http
 from twisted.python import util, log
 from twisted.internet import defer
@@ -1372,7 +1372,7 @@ class LocalAccess:
 class WebishServer(service.MultiService):
     name = "webish"
 
-    def __init__(self, webport):
+    def __init__(self, webport, nodeurl_path):
         service.MultiService.__init__(self)
         self.webport = webport
         self.root = Root()
@@ -1384,6 +1384,8 @@ class WebishServer(service.MultiService):
         s.setServiceParent(self)
         self.listener = s # stash it so the tests can query for the portnum
         self._started = defer.Deferred()
+        if nodeurl_path:
+            self._started.addCallback(self._write_nodeurl_file, nodeurl_path)
 
     def allow_local_access(self, enable=True):
         self.allow_local.local_access = enable
@@ -1399,3 +1401,19 @@ class WebishServer(service.MultiService):
         # apparently 'ISite' does not exist
         #self.site._client = self.parent
         self._started.callback(None)
+
+    def _write_nodeurl_file(self, junk, nodeurl_path):
+        # what is our webport?
+        s = self.listener
+        if isinstance(s, internet.TCPServer):
+            base_url = "http://localhost:%d" % s._port.getHost().port
+        elif isinstance(s, internet.SSLServer):
+            base_url = "https://localhost:%d" % s._port.getHost().port
+        else:
+            base_url = None
+        if base_url:
+            f = open(nodeurl_path, 'wb')
+            # this file is world-readable
+            f.write(base_url + "\n")
+            f.close()
+