Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@sugarlabs.org>2012-10-01 10:56:12 (GMT)
committer Aleksey Lim <alsroot@sugarlabs.org>2012-10-01 10:56:12 (GMT)
commit6cf0d0cc5fe33aa3b3dfdc460562618279ae7131 (patch)
tree39ad2867d742946d992ccc33ef7d0f2d6c8b7b59
parentf79720ef2fda49d3ccbc92613ebb75ef4719cafc (diff)
Use arbitrary path to owner.key file
-rwxr-xr-xmisc/aslo-sync22
-rw-r--r--sugar_network/toolkit/http.py7
-rw-r--r--sugar_network/toolkit/sugar.py22
3 files changed, 32 insertions, 19 deletions
diff --git a/misc/aslo-sync b/misc/aslo-sync
index 70c477d..9eb6354 100755
--- a/misc/aslo-sync
+++ b/misc/aslo-sync
@@ -26,7 +26,7 @@ from os.path import join, exists
import MySQLdb as mdb
import active_document as ad
-from sugar_network import Client
+from sugar_network import sugar, Client
from sugar_network.toolkit.collection import PersistentSequence, Sequence
from sugar_network.zerosugar import GOOD_LICENSES, Bundle, parse_version
from sugar_network.resources.volume import Volume
@@ -423,27 +423,27 @@ class Application(application.Application):
def sqlexec(self, text):
if self._my_connection is None:
- self._my_connection = mdb.connect('localhost',
- user.value, getpass.getpass(), database.value)
+ self._my_connection = mdb.connect(mysql_server.value,
+ mysql_user.value, getpass.getpass(), mysql_database.value)
cursor = self._my_connection.cursor()
cursor.execute(text)
return cursor.fetchall()
-server = Option(
+mysql_server = Option(
'MySQL server',
- default='localhost', name='server')
-database = Option(
+ default='localhost', name='mysql_server')
+mysql_database = Option(
'MySQL database',
- default='activities', name='database')
-user = Option(
+ default='activities', name='mysql_database')
+mysql_user = Option(
'MySQL user',
- default='root', name='user')
+ default='root', name='mysql_user')
Option.seek('main', [application.debug])
-Option.seek('aslo', [server, user, database])
+Option.seek('aslo', [mysql_server, mysql_user, mysql_database])
Option.seek('node', [data_root])
-Option.seek('local', [api_url])
+Option.seek('local', [api_url, sugar.keyfile])
ad.index_write_queue.value = 1024 * 10
ad.index_flush_threshold.value = 0
diff --git a/sugar_network/toolkit/http.py b/sugar_network/toolkit/http.py
index d130c2a..cb7028a 100644
--- a/sugar_network/toolkit/http.py
+++ b/sugar_network/toolkit/http.py
@@ -67,9 +67,8 @@ class Client(object):
headers = {'Accept-Language': ad.default_lang()}
if self._sugar_auth:
uid = sugar.uid()
- key_path = sugar.profile_path('owner.key')
headers['sugar_user'] = uid
- headers['sugar_user_signature'] = _sign(key_path, uid)
+ headers['sugar_user_signature'] = _sign(uid)
self._session = Session(headers=headers, verify=verify, prefetch=False)
@@ -288,8 +287,8 @@ class Client(object):
return response
-def _sign(key_path, data):
- key = DSA.load_key(key_path)
+def _sign(data):
+ key = DSA.load_key(sugar.privkey_path())
return key.sign_asn1(hashlib.sha1(data).digest()).encode('hex')
diff --git a/sugar_network/toolkit/sugar.py b/sugar_network/toolkit/sugar.py
index 361cb7a..4f0bac5 100644
--- a/sugar_network/toolkit/sugar.py
+++ b/sugar_network/toolkit/sugar.py
@@ -20,6 +20,7 @@ import random
import hashlib
from os.path import join, exists, dirname
+from active_toolkit.options import Option
from active_toolkit import enforce
@@ -31,6 +32,13 @@ _COLOR_GCONF = '/desktop/sugar/user/color'
_uid = None
+keyfile = Option(
+ 'path to SSH private key file to authenticate user; public key file '
+ 'should have ".pub" suffif; if ommited, use key file generated by '
+ 'Sugar Shell',
+ name='keyfile')
+
+
def logger_level():
"""Current Sugar logger level as --debug value."""
_LEVELS = {
@@ -66,11 +74,17 @@ def profile_path(*args):
return result
-def pubkey():
- pubkey_path = profile_path('owner.key.pub')
- enforce(exists(pubkey_path),
- 'Sugar session was never started, no pubkey')
+def privkey_path():
+ path = keyfile.value
+ if not path:
+ path = profile_path('owner.key')
+ enforce(exists(path),
+ 'Sugar session was never started, no privkey')
+ return path
+
+def pubkey():
+ pubkey_path = privkey_path() + '.pub'
with file(pubkey_path) as f:
for line in f.readlines():
line = line.strip()