From 995049a04fb15bd4e1cf27bf11e3be46f84e3bfe Mon Sep 17 00:00:00 2001 From: Folker Bernitt Date: Tue, 19 Jan 2016 13:36:31 +0100 Subject: Add mutli-user mode to user-agent - Issue #576 - To start in multi user, run with --multi-user --provider provider-name.tld --- service/pixelated/config/arguments.py | 3 ++ service/pixelated/config/credentials.py | 1 - service/pixelated/config/leap.py | 61 +++++++++++++++++++++++++-------- service/pixelated/config/services.py | 4 +-- 4 files changed, 52 insertions(+), 17 deletions(-) (limited to 'service/pixelated/config') diff --git a/service/pixelated/config/arguments.py b/service/pixelated/config/arguments.py index 87484b9b..d8a18c16 100644 --- a/service/pixelated/config/arguments.py +++ b/service/pixelated/config/arguments.py @@ -28,8 +28,11 @@ def parse_user_agent_args(): parser.add_argument('--port', type=int, default=3333, help='the port to run the user agent on') parser.add_argument('-sk', '--sslkey', metavar='', default=None, help='use specified file as web server\'s SSL key (when using the user-agent together with the pixelated-dispatcher)') parser.add_argument('-sc', '--sslcert', metavar='', default=None, help='use specified file as web server\'s SSL certificate (when using the user-agent together with the pixelated-dispatcher)') + parser.add_argument('--multi-user', help='Run user agent in multi user mode', action='store_false', default=True, dest='single_user') + parser.add_argument('-p', '--provider', help='specify a provider for mutli-user mode', metavar='', default=None, dest='provider') args = parser.parse_args() + return args diff --git a/service/pixelated/config/credentials.py b/service/pixelated/config/credentials.py index ae1bc4f3..a6da86e6 100644 --- a/service/pixelated/config/credentials.py +++ b/service/pixelated/config/credentials.py @@ -50,5 +50,4 @@ def read_from_file(credentials_file): def read_from_dispatcher(): config = json.loads(sys.stdin.read()) - return config['leap_provider_hostname'], config['user'], config['password'] diff --git a/service/pixelated/config/leap.py b/service/pixelated/config/leap.py index 00723224..b8e5f50d 100644 --- a/service/pixelated/config/leap.py +++ b/service/pixelated/config/leap.py @@ -10,28 +10,61 @@ from twisted.internet import defer import os import logging +import logging +log = logging.getLogger(__name__) + + +def initialize_leap_provider(provider_hostname, provider_cert, provider_fingerprint, leap_home): + LeapCertificate.set_cert_and_fingerprint(provider_cert, + provider_fingerprint) + + config = LeapConfig(leap_home=leap_home, start_background_jobs=True) + provider = LeapProvider(provider_hostname, config) + LeapCertificate(provider).setup_ca_bundle() + + return config, provider + @defer.inlineCallbacks -def initialize_leap(leap_provider_cert, - leap_provider_cert_fingerprint, - credentials_file, - organization_mode, - leap_home, - initial_sync=True): +def initialize_leap_multi_user(provider_hostname, + leap_provider_cert, + leap_provider_cert_fingerprint, + credentials_file, + organization_mode, + leap_home): + + config, provider = initialize_leap_provider(provider_hostname, leap_provider_cert, leap_provider_cert_fingerprint, leap_home) + + defer.returnValue((config, provider)) + + +@defer.inlineCallbacks +def authenticate_user(provider, username, password, initial_sync=True): + leap_session = LeapSessionFactory(provider).create(username, password) + + if initial_sync: + yield leap_session.initial_sync() + + defer.returnValue(leap_session) + + +@defer.inlineCallbacks +def initialize_leap_single_user(leap_provider_cert, + leap_provider_cert_fingerprint, + credentials_file, + organization_mode, + leap_home, + initial_sync=True): + init_monkeypatches() events_server.ensure_server() + provider, username, password = credentials.read(organization_mode, credentials_file) - LeapCertificate.set_cert_and_fingerprint(leap_provider_cert, - leap_provider_cert_fingerprint) - config = LeapConfig(leap_home=leap_home, start_background_jobs=True) - provider = LeapProvider(provider, config) - LeapCertificate(provider).setup_ca_bundle() - leap_session = LeapSessionFactory(provider).create(username, password) + config, provider = initialize_leap_provider(provider, leap_provider_cert, leap_provider_cert_fingerprint, leap_home) - if initial_sync: - leap_session = yield leap_session.initial_sync() + leap_session = yield authenticate_user(provider, username, password) defer.returnValue(leap_session) diff --git a/service/pixelated/config/services.py b/service/pixelated/config/services.py index 1d5d951a..3f254571 100644 --- a/service/pixelated/config/services.py +++ b/service/pixelated/config/services.py @@ -18,8 +18,8 @@ logger = logging.getLogger(__name__) class Services(object): - def __init__(self, leap_home, leap_session): - self._leap_home = leap_home + def __init__(self, leap_session): + self._leap_home = leap_session.config.leap_home self._leap_session = leap_session @defer.inlineCallbacks -- cgit v1.2.3