From e2beb5b566bbe81d29bdb0fd39122334706092ca Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Mon, 30 Jul 2007 15:34:02 +0200 Subject: [PATCH] Start intro if config is absent or corrupted. Cleanups. --- NEWS | 1 + shell/intro/intro.py | 11 +++++++---- shell/sugar-shell | 3 +-- sugar/profile.py | 32 +++++++++++++++++++++----------- 4 files changed, 30 insertions(+), 17 deletions(-) diff --git a/NEWS b/NEWS index e54bde78..df54ca88 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,4 @@ +* #2119 If config is missing start intro. (marco) * #2083 Fix centering of items in the spread box. (marco) * #2486 In the intro screen name page enter goes to next page. (marco) * #2570 Accept correctly image drops from Record. diff --git a/shell/intro/intro.py b/shell/intro/intro.py index 99e1890d..b760c81d 100644 --- a/shell/intro/intro.py +++ b/shell/intro/intro.py @@ -232,10 +232,13 @@ class IntroWindow(gtk.Window): # Generate keypair import commands keypath = os.path.join(env.get_profile_path(), "owner.key") - cmd = "ssh-keygen -q -t dsa -f %s -C '' -N ''" % keypath - (s, o) = commands.getstatusoutput(cmd) - if s != 0: - logging.error("Could not generate key pair: %d" % s) + if not os.path.isfile(keypath): + cmd = "ssh-keygen -q -t dsa -f %s -C '' -N ''" % keypath + (s, o) = commands.getstatusoutput(cmd) + if s != 0: + logging.error("Could not generate key pair: %d" % s) + else: + logging.error("Keypair exists, skip generation.") gtk.main_quit() return False diff --git a/shell/sugar-shell b/shell/sugar-shell index 8bd3dd05..8d9fd2f7 100755 --- a/shell/sugar-shell +++ b/shell/sugar-shell @@ -74,8 +74,7 @@ _start_matchbox() _setup_translations() # Do initial setup if needed -key = profile.get_pubkey() -if not key or not len(key): +if not profile.is_valid(): win = intro.IntroWindow() win.show_all() gtk.main() diff --git a/sugar/profile.py b/sugar/profile.py index b5e5b519..da99f284 100644 --- a/sugar/profile.py +++ b/sugar/profile.py @@ -49,6 +49,7 @@ class _Profile(object): privkey_hash -- SHA has of the child's public key """ def __init__(self): + self.valid = True self.name = None self.color = None self.pubkey = None @@ -56,26 +57,29 @@ class _Profile(object): self.server = None self.server_registered = False self.backup1 = None + + self._config_path = os.path.join(env.get_profile_path(), 'config') + self._load() def update(self): self._load() def _load(self): - cp = ConfigParser() - config_path = os.path.join(env.get_profile_path(), 'config') - parsed = cp.read([config_path]) - self._load_config(cp) - del cp - + self._load_config() self._load_pubkey() self._hash_private_key() - def _load_config(self, cp): + def _load_config(self): + cp = ConfigParser() + parsed = cp.read([self._config_path]) + if cp.has_option('Buddy', 'NickName'): name = cp.get('Buddy', 'NickName') # decode nickname from ascii-safe chars to unicode self.name = name.decode("utf-8") + else: + self.valid = False if cp.has_option('Buddy', 'Color'): self.color = XoColor(cp.get('Buddy', 'Color')) @@ -91,6 +95,8 @@ class _Profile(object): if cp.has_option('Server', 'Backup1'): self.backup1 = cp.get('Server', 'Backup1') + del cp + def _load_pubkey(self): self.pubkey = None @@ -100,6 +106,7 @@ class _Profile(object): lines = f.readlines() f.close() except IOError, e: + self.valid = False logging.error("Error reading public key: %s" % e) return @@ -142,20 +149,23 @@ class _Profile(object): def set_key(self, section, key, value): cp = ConfigParser() - config_path = os.path.join(env.get_profile_path(), 'config') - parsed = cp.read([config_path]) + parsed = cp.read([self._config_path]) if not cp.has_section(section): cp.add_section(section) cp.set(section, key, value) - f = open(config_path, 'w') + f = open(self._config_path, 'w') cp.write(f) f.close() - self._load_config(cp) del cp + self._load_config() + +def is_valid(): + return _profile.valid + def get_nick_name(): return _profile.name