diff options
-rw-r--r-- | service/pixelated/runserver.py | 26 | ||||
-rw-r--r-- | service/test/unit/runserver_test.py | 25 |
2 files changed, 43 insertions, 8 deletions
diff --git a/service/pixelated/runserver.py b/service/pixelated/runserver.py index 75b6d2a9..314a5d71 100644 --- a/service/pixelated/runserver.py +++ b/service/pixelated/runserver.py @@ -15,6 +15,7 @@ # along with Pixelated. If not, see <http://www.gnu.org/licenses/>. import os +import sys import logging from flask import Flask from leap.common.events import server as events_server @@ -29,6 +30,7 @@ import pixelated.support.ext_sqlcipher # monkey patch for sqlcipher in debian app = Flask(__name__, static_url_path='', static_folder=app_factory.get_static_folder()) +credentials_pipe = os.path.join('/', 'data', 'credentials-fifo') def setup(): @@ -42,10 +44,13 @@ def setup(): register(*args.register[::-1]) else: if args.dispatcher: - raise Exception('Dispatcher mode not implemented yet') + provider, user, password = fetch_credentials_from_dispatcher() + app.config['LEAP_SERVER_NAME'] = provider + app.config['LEAP_USERNAME'] = user + app.config['LEAP_PASSWORD'] = password else: - configuration_setup(app, args.config) - start_services(app, debugger) + configuration_setup(args.config) + start_services(debugger) finally: reactor_manager.stop_reactor_on_exit() @@ -57,6 +62,17 @@ def register(username, server_name): print('User already exists') +def fetch_credentials_from_dispatcher(): + if not os.path.exists(credentials_pipe): + print('The credentials pipe doesn\'t exist') + sys.exit(1) + with open(credentials_pipe, 'r') as cred_file: + provider = cred_file.read() + username = cred_file.read() + password = cred_file.read() + return provider, username, password + + def setup_debugger(enabled): debug_enabled = enabled or os.environ.get('DEBUG', False) if not debug_enabled: @@ -66,7 +82,7 @@ def setup_debugger(enabled): return debug_enabled -def configuration_setup(app, config): +def configuration_setup(config): if config is not None: config_file = os.path.abspath(os.path.expanduser(config)) app.config.from_pyfile(config_file) @@ -77,7 +93,7 @@ def configuration_setup(app, config): app.config['LEAP_PASSWORD'] = password -def start_services(app, debug): +def start_services(debug): reactor_manager.start_reactor(logging=debug) events_server.ensure_server(port=8090) app_factory.create_app(app, debug) diff --git a/service/test/unit/runserver_test.py b/service/test/unit/runserver_test.py index 80cbf543..57e211c9 100644 --- a/service/test/unit/runserver_test.py +++ b/service/test/unit/runserver_test.py @@ -16,21 +16,24 @@ import unittest import sys +import os +import thread import pixelated.runserver from mockito import * import pixelated.config.reactor_manager as reactor_manager -import pixelated.adapter.mail import pixelated.config.app_factory as app_factory class RunserverTest(unittest.TestCase): + def setUp(self): + when(reactor_manager).start_reactor().thenReturn(None) + when(app_factory).create_app().thenReturn(None) + def test_that_config_file_can_be_specified_on_command_line(self): orig_config = pixelated.runserver.app.config try: - when(reactor_manager).start_reactor().thenReturn(None) - when(app_factory).create_app().thenReturn(None) pixelated.runserver.app.config = mock(dict) pixelated.runserver.app.config.__setitem__ = mock() @@ -40,3 +43,19 @@ class RunserverTest(unittest.TestCase): verify(pixelated.runserver.app.config).from_pyfile('/tmp/some/config/file') finally: pixelated.runserver.app.config = orig_config + + def test_that_organization_switch_reads_the_credentials_from_pipe(self): + fifo_path = '/tmp/credentials-pipe' + if os.path.exists(fifo_path): + os.remove(fifo_path) + test_fifo = os.mkfifo('/tmp/credentials-pipe') + thread.start_new_thread(self.spin_up_fifo, (fifo_path,)) + sys.argv = ['tmp/does_not_exist', '--dispatcher'] + pixelated.runserver.credentials_pipe = fifo_path + pixelated.runserver.setup() + + def spin_up_fifo(self, test_fifo): + with open(test_fifo, 'w') as fifo: + fifo.write('test_provider') + fifo.write('test_user') + fifo.write('test_password') |