From 6cf0d0cc5fe33aa3b3dfdc460562618279ae7131 Mon Sep 17 00:00:00 2001 From: Aleksey Lim Date: Mon, 01 Oct 2012 10:56:12 +0000 Subject: Use arbitrary path to owner.key file --- 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() -- cgit v0.9.1