From 0c3f127c86af818d260966d2292b199757087157 Mon Sep 17 00:00:00 2001 From: Simon Poirier Date: Sat, 11 Jul 2009 21:39:46 +0000 Subject: repackage --- (limited to 'src/sugar/profile.py') diff --git a/src/sugar/profile.py b/src/sugar/profile.py deleted file mode 100644 index cce45a7..0000000 --- a/src/sugar/profile.py +++ /dev/null @@ -1,216 +0,0 @@ -# Copyright (C) 2006-2007, Red Hat, Inc. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the -# Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. - -"""User settings/configuration loading. - -DEPRECATED. We are using GConf now to store preferences. -""" - -import gconf -import os -import logging -from ConfigParser import ConfigParser - -from sugar import env -from sugar import util -from sugar.graphics.xocolor import XoColor - -_profile = None - -class Profile(object): - """Local user's current options/profile information - - User settings were previously stored in an INI-style - configuration file. We moved to gconf now. The deprected - API is kept around to not break activities still using it. - - The profile is also responsible for loading the user's - public and private ssh keys from disk. - - Attributes: - - pubkey -- public ssh key - privkey_hash -- SHA has of the child's public key - """ - def __init__(self, path): - self._pubkey = None - self._privkey_hash = None - - def is_valid(self): - client = gconf.client_get_default() - nick = client.get_string("/desktop/sugar/user/nick") - color = client.get_string("/desktop/sugar/user/color") - - return nick is not '' and \ - color is not '' and \ - self.pubkey is not None and \ - self.privkey_hash is not None - - def _load_pubkey(self): - key_path = os.path.join(env.get_profile_path(), 'owner.key.pub') - try: - f = open(key_path, "r") - lines = f.readlines() - f.close() - except IOError, e: - logging.error("Error reading public key: %s" % e) - return None - - magic = "ssh-dss " - for l in lines: - l = l.strip() - if not l.startswith(magic): - continue - return l[len(magic):] - else: - logging.error("Error parsing public key.") - return None - - def _get_pubkey(self): - # load on-demand. - if not self._pubkey: - self._pubkey = self._load_pubkey() - return self._pubkey - - def _hash_private_key(self): - key_path = os.path.join(env.get_profile_path(), 'owner.key') - try: - f = open(key_path, "r") - lines = f.readlines() - f.close() - except IOError, e: - logging.error("Error reading private key: %s" % e) - return None - - key = "" - for l in lines: - l = l.strip() - if l.startswith("-----BEGIN DSA PRIVATE KEY-----"): - continue - if l.startswith("-----END DSA PRIVATE KEY-----"): - continue - key += l - if not len(key): - logging.error("Error parsing public key.") - return None - - # hash it - key_hash = util.sha_data(key) - return util.printable_hash(key_hash) - - def _get_privkey_hash(self): - # load on-demand. - if not self._privkey_hash: - self._privkey_hash = self._hash_private_key() - return self._privkey_hash - - privkey_hash = property(_get_privkey_hash) - pubkey = property(_get_pubkey) - - def convert_profile(self): - cp = ConfigParser() - path = os.path.join(env.get_profile_path(), 'config') - cp.read([path]) - - client = gconf.client_get_default() - - if cp.has_option('Buddy', 'NickName'): - name = cp.get('Buddy', 'NickName') - # decode nickname from ascii-safe chars to unicode - nick = name.decode("utf-8") - client.set_string("/desktop/sugar/user/nick", nick) - if cp.has_option('Buddy', 'Color'): - color = cp.get('Buddy', 'Color') - client.set_string("/desktop/sugar/user/color", color) - if cp.has_option('Jabber', 'Server'): - server = cp.get('Jabber', 'Server') - client.set_string("/desktop/sugar/collaboration/jabber_server", - server) - if cp.has_option('Date', 'Timezone'): - timezone = cp.get('Date', 'Timezone') - client.set_string("/desktop/sugar/date/timezone", timezone) - if cp.has_option('Frame', 'HotCorners'): - delay = float(cp.get('Frame', 'HotCorners')) - client.set_int("/desktop/sugar/frame/corner_delay", int(delay)) - if cp.has_option('Frame', 'WarmEdges'): - delay = float(cp.get('Frame', 'WarmEdges')) - client.set_int("/desktop/sugar/frame/edge_delay", int(delay)) - if cp.has_option('Server', 'Backup1'): - backup1 = cp.get('Server', 'Backup1') - client.set_string("/desktop/sugar/backup_url", backup1) - if cp.has_option('Sound', 'Volume'): - volume = float(cp.get('Sound', 'Volume')) - client.set_int("/desktop/sugar/sound/volume", int(volume)) - if cp.has_option('Power', 'AutomaticPM'): - state = cp.get('Power', 'AutomaticPM') - if state.lower() == "true": - client.set_bool("/desktop/sugar/power/automatic", True) - if cp.has_option('Power', 'ExtremePM'): - state = cp.get('Power', 'ExtremePM') - if state.lower() == "true": - client.set_bool("/desktop/sugar/power/extreme", True) - if cp.has_option('Shell', 'FavoritesLayout'): - layout = cp.get('Shell', 'FavoritesLayout') - client.set_string("/desktop/sugar/desktop/favorites_layout", - layout) - del cp - try: - os.unlink(path) - except OSError: - logging.error('Error removing old profile.') - - def create_debug_file(self): - path = os.path.join(os.path.expanduser('~/.sugar'), 'debug') - fd = open(path, 'w') - text = '# Uncomment the following lines to turn on many' \ - 'sugar debugging\n'\ - '# log files and features\n'\ - '#export LM_DEBUG=net\n' \ - '#export GABBLE_DEBUG=all\n' \ - '#export' \ - 'GABBLE_LOGFILE=~/.sugar/default/logs/telepathy-gabble.log\n' \ - '#export SALUT_DEBUG=all\n' \ - '#export' \ - 'SALUT_LOGFILE=~/.sugar/default/logs/telepathy-salut.log\n' \ - '#export GIBBER_DEBUG=all\n' \ - '#export PRESENCESERVICE_DEBUG=1\n' \ - '#export SUGAR_LOGGER_LEVEL=debug\n\n' \ - '# Uncomment the following line to enable core dumps\n' \ - '#ulimit -c unlimited\n' - fd.write(text) - fd.close() - -def get_profile(): - global _profile - - if not _profile: - path = os.path.join(env.get_profile_path(), 'config') - _profile = Profile(path) - - return _profile - -def get_nick_name(): - client = gconf.client_get_default() - return client.get_string("/desktop/sugar/user/nick") - -def get_color(): - client = gconf.client_get_default() - color = client.get_string("/desktop/sugar/user/color") - return XoColor(color) - -def get_pubkey(): - return get_profile().pubkey -- cgit v0.9.1