From f14602cb34762f02ff483698b73ef963bdcb1da0 Mon Sep 17 00:00:00 2001
From: Brian Warner <warner@lothar.com>
Date: Sun, 14 Apr 2013 14:32:13 -0700
Subject: [PATCH] welcome page: display new nodeid (ed25519-based) instead of
 old tubid

The old tubid is displayed in a tooltip. Also cleaned up the regexps in
the relevant tests.
---
 src/allmydata/client.py           | 10 +++++++++-
 src/allmydata/test/test_system.py |  9 +++++----
 src/allmydata/test/test_web.py    |  5 +++++
 src/allmydata/web/root.py         |  7 ++++---
 src/allmydata/web/welcome.xhtml   |  2 +-
 5 files changed, 24 insertions(+), 9 deletions(-)

diff --git a/src/allmydata/client.py b/src/allmydata/client.py
index 0fd15733..4f4745cc 100644
--- a/src/allmydata/client.py
+++ b/src/allmydata/client.py
@@ -14,7 +14,7 @@ from allmydata.immutable.upload import Uploader
 from allmydata.immutable.offloaded import Helper
 from allmydata.control import ControlServer
 from allmydata.introducer.client import IntroducerClient
-from allmydata.util import hashutil, base32, pollmixin, log, keyutil
+from allmydata.util import hashutil, base32, pollmixin, log, keyutil, idlib
 from allmydata.util.encodingutil import get_filesystem_encoding
 from allmydata.util.abbreviate import parse_abbreviated_size
 from allmydata.util.time_format import parse_duration, parse_date
@@ -220,6 +220,14 @@ class Client(node.Node, pollmixin.PollMixin):
         self.write_config("node.pubkey", vk_vs+"\n")
         self._node_key = sk
 
+    def get_long_nodeid(self):
+        # this matches what IServer.get_longname() says about us elsewhere
+        vk_bytes = self._node_key.get_verifying_key_bytes()
+        return "v0-"+base32.b2a(vk_bytes)
+
+    def get_long_tubid(self):
+        return idlib.nodeid_b2a(self.nodeid)
+
     def _init_permutation_seed(self, ss):
         seed = self.get_config_from_file("permutation-seed")
         if not seed:
diff --git a/src/allmydata/test/test_system.py b/src/allmydata/test/test_system.py
index 472f106d..56abc24e 100644
--- a/src/allmydata/test/test_system.py
+++ b/src/allmydata/test/test_system.py
@@ -1,5 +1,4 @@
 
-from base64 import b32encode
 import os, re, sys, time, simplejson
 from cStringIO import StringIO
 
@@ -1099,10 +1098,12 @@ class SystemTest(SystemTestMixin, RunBinTahoeMixin, unittest.TestCase):
         d = getPage(base)
         def _got_welcome(page):
             html = page.replace('\n', ' ')
-            connected_re = "Connected to <span>%d</span>[ ]*of <span>%d</span> known storage servers" % (self.numclients, self.numclients)
+            connected_re = r'Connected to <span>%d</span>\s*of <span>%d</span> known storage servers' % (self.numclients, self.numclients)
             self.failUnless(re.search(connected_re, html),
                             "I didn't see the right '%s' message in:\n%s" % (connected_re, page))
-            nodeid_re = "<th>Node ID:</th>[ ]*<td>%s</td>" % (re.escape(b32encode(self.clients[0].nodeid).lower()),)
+            # nodeids/tubids don't have any regexp-special characters
+            nodeid_re = r'<th>Node ID:</th>\s*<td title="TubID: %s">%s</td>' % (
+                self.clients[0].get_long_tubid(), self.clients[0].get_long_nodeid())
             self.failUnless(re.search(nodeid_re, html),
                             "I didn't see the right '%s' message in:\n%s" % (nodeid_re, page))
             self.failUnless("Helper: 0 active uploads" in page)
@@ -1113,7 +1114,7 @@ class SystemTest(SystemTestMixin, RunBinTahoeMixin, unittest.TestCase):
         d.addCallback(lambda res: getPage(self.helper_webish_url))
         def _got_welcome_helper(page):
             html = page.replace('\n', ' ')
-            self.failUnless(re.search('<div class="status-indicator connected-yes"></div>[ ]*<div>Helper</div>', html), page)
+            self.failUnless(re.search(r'<div class="status-indicator connected-yes"></div>\s*<div>Helper</div>', html), page)
             self.failUnlessIn("Not running helper", page)
         d.addCallback(_got_welcome_helper)
 
diff --git a/src/allmydata/test/test_web.py b/src/allmydata/test/test_web.py
index 00d05097..3b12549c 100644
--- a/src/allmydata/test/test_web.py
+++ b/src/allmydata/test/test_web.py
@@ -254,6 +254,11 @@ class FakeClient(Client):
         self.mutable_file_default = SDMF_VERSION
         self.addService(FakeStorageServer(self.nodeid, self.nickname))
 
+    def get_long_nodeid(self):
+        return "v0-nodeid"
+    def get_long_tubid(self):
+        return "tubid"
+
     def startService(self):
         return service.MultiService.startService(self)
     def stopService(self):
diff --git a/src/allmydata/web/root.py b/src/allmydata/web/root.py
index 1895d067..b4b7a85c 100644
--- a/src/allmydata/web/root.py
+++ b/src/allmydata/web/root.py
@@ -9,7 +9,7 @@ from nevow.util import resource_filename
 
 import allmydata # to display import path
 from allmydata import get_package_versions_string
-from allmydata.util import idlib, log
+from allmydata.util import log
 from allmydata.interfaces import IFileNode
 from allmydata.web import filenode, directory, unlinked, status, operations
 from allmydata.web import storage
@@ -168,8 +168,9 @@ class Root(rend.Page):
         return get_package_versions_string()
     def data_import_path(self, ctx, data):
         return str(allmydata)
-    def data_my_nodeid(self, ctx, data):
-        return idlib.nodeid_b2a(self.client.nodeid)
+    def render_my_nodeid(self, ctx, data):
+        tubid_s = "TubID: "+self.client.get_long_tubid()
+        return T.td(title=tubid_s)[self.client.get_long_nodeid()]
     def data_my_nickname(self, ctx, data):
         return self.client.nickname
 
diff --git a/src/allmydata/web/welcome.xhtml b/src/allmydata/web/welcome.xhtml
index 1c794e44..9e1228e7 100644
--- a/src/allmydata/web/welcome.xhtml
+++ b/src/allmydata/web/welcome.xhtml
@@ -28,7 +28,7 @@
             </tr>
             <tr>
               <th>Node ID:</th>
-              <td n:render="string" n:data="my_nodeid" />
+              <td n:render="my_nodeid" />
             </tr>
           </table>
         </div>
-- 
2.45.2