From 7f14b933411ff43bb9dc8b2cc837777c8cc4b29e Mon Sep 17 00:00:00 2001
From: robk-tahoe <robk-tahoe@allmydata.com>
Date: Mon, 24 Mar 2008 15:47:12 -0700
Subject: [PATCH] confwiz: set a convergence domain based on root_dir upon
 config

when the confwiz configures a node (i.e. typically once on mac, once per
install on windows) in addition to writing the root_dir.cap retrieved from
the native_client backend into a config file, it additionally writes a hash
thereof into the 'convergence' config file.

this causes uploads from this node to use a consistent 'convergence' hashing
value matching any other nodes with the same configured root_dir, i.e. for
the most part other systems installed and configured on the same account.
---
 src/allmydata/gui/confwiz.py | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/allmydata/gui/confwiz.py b/src/allmydata/gui/confwiz.py
index b4c21c46..e389b1ac 100644
--- a/src/allmydata/gui/confwiz.py
+++ b/src/allmydata/gui/confwiz.py
@@ -7,6 +7,8 @@ WELCOME_PAGE = 'welcome_install'
 TAHOESVC_NAME = 'Tahoe'
 WINFUSESVC_NAME = 'Allmydata SMB'
 
+CONVERGENCE_DOMAIN_TAG = "allmydata_root_cap_to_convergence_domain_tag_v1"
+
 import os
 import re
 import socket
@@ -19,6 +21,7 @@ import webbrowser
 import wx
 
 from allmydata.util.assertutil import precondition
+from allmydata.util import hashutil, base32
 from allmydata import uri
 import allmydata
 
@@ -113,6 +116,11 @@ def write_config_file(filename, contents):
     iff.write(contents)
     iff.close()
 
+def write_root_cap(root_cap):
+    write_config_file('private/root_dir.cap', root_cap+'\n')
+    convergence = base32.b2a(hashutil.tagged_hash(CONVERGENCE_DOMAIN_TAG, root_cap))
+    write_config_file('private/convergence', convergence+'\n')
+
 def get_nodeid():
     CERTFILE = "node.pem"
     certfile = os.path.join(get_basedir(), "private", CERTFILE)
@@ -350,7 +358,7 @@ class LoginPanel(wx.Panel):
 
         try:
             root_cap = get_root_cap(backend, user, passwd)
-            write_config_file('private/root_dir.cap', root_cap+'\n')
+            write_root_cap(root_cap)
         except AuthError:
             self.warning_label.SetLabel('Your email and/or password is incorrect')
             self.user_field.SetFocus()
@@ -474,7 +482,7 @@ class RegisterPanel(wx.Panel):
             try:
                 #print 'calling get_root_cap (ae)', time.asctime()
                 root_cap = get_root_cap(backend, user, passwd)
-                write_config_file('private/root_dir.cap', root_cap+'\n')
+                write_root_cap(root_cap)
             except AuthError:
                 self.warning_label.SetLabel('That email address is already registered')
                 self.user_field.SetFocus()
@@ -488,7 +496,7 @@ class RegisterPanel(wx.Panel):
         elif result_code == 'ok':
             #print 'calling get_root_cap (ok)', time.asctime()
             root_cap = get_root_cap(backend, user, passwd)
-            write_config_file('private/root_dir.cap', root_cap+'\n')
+            write_root_cap(root_cap)
         else:
             self.warning_label.SetLabel('an unexpected error occurred ("%s")' % (result_code,))
             self.user_field.SetFocus()
-- 
2.45.2