Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--NEWS1
-rw-r--r--shell/intro/intro.py11
-rwxr-xr-xshell/sugar-shell3
-rw-r--r--sugar/profile.py32
4 files changed, 30 insertions, 17 deletions
diff --git a/NEWS b/NEWS
index e54bde7..df54ca8 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 99e1890..b760c81 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 8bd3dd0..8d9fd2f 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 b5e5b51..da99f28 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