summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorBruno Wagner <bwgpro@gmail.com>2015-06-04 19:11:46 -0300
committerBruno Wagner <bwgpro@gmail.com>2015-06-04 19:12:08 -0300
commit7a8e9cc142ad368434031e4e008b40281d68150b (patch)
tree7f789e34c34bfa92d788aecd30e0808907b4a3a3 /service
parent881b2bc3da468a22fc0e11bcfda60a7feec99ab9 (diff)
Config dispatcher and config_ua are now in credentials
Diffstat (limited to 'service')
-rw-r--r--service/pixelated/application.py5
-rw-r--r--service/pixelated/config/args.py5
-rw-r--r--service/pixelated/config/credentials.py (renamed from service/pixelated/config/config_ua.py)40
-rw-r--r--service/pixelated/config/dispatcher.py38
-rw-r--r--service/pixelated/config/initialize_leap.py26
-rw-r--r--service/test/unit/config/test_credentials.py30
-rw-r--r--service/test/unit/config/test_dispatcher.py59
7 files changed, 63 insertions, 140 deletions
diff --git a/service/pixelated/application.py b/service/pixelated/application.py
index 4d183358..6d49b8bf 100644
--- a/service/pixelated/application.py
+++ b/service/pixelated/application.py
@@ -76,9 +76,8 @@ def initialize():
lambda: initialize_leap(
args.leap_provider_cert,
args.leap_provider_cert_fingerprint,
- args.config_file,
- args.dispatcher,
- args.dispatcher_stdin,
+ args.credentials_file,
+ args.organization_mode,
args.leap_home))
deferred.addCallback(
diff --git a/service/pixelated/config/args.py b/service/pixelated/config/args.py
index dd3b715d..2c7470e2 100644
--- a/service/pixelated/config/args.py
+++ b/service/pixelated/config/args.py
@@ -49,9 +49,8 @@ def parse_maintenance_args():
def parser_add_default_arguments(parser):
parser.add_argument('--debug', action='store_true', help='DEBUG mode.')
- parser.add_argument('--dispatcher', help='run in organization mode, the credentials will be read from specified file', metavar='file')
- parser.add_argument('--dispatcher-stdin', help='run in organization mode, the credentials will be read from stdin', default=False, action='store_true', dest='dispatcher_stdin')
- parser.add_argument('-c', '--config', dest='config_file', metavar='<configfile>', default=None, help='use specified file for credentials (for test purposes only)')
+ parser.add_argument('--organization-mode', help='Runs the user agent in organization mode, the credentials will be received from the stdin', default=False, action='store_true', dest='organization_mode')
+ parser.add_argument('-c', '--config', dest='credentials_file', metavar='<credentials_file>', default=None, help='use specified file for credentials (for test purposes only)')
parser.add_argument('--leap-home', help='The folder where the user agent stores its data. Defaults to ~/.leap', dest='leap_home', default=DEFAULT_LEAP_HOME)
parser.add_argument('-lc', '--leap-provider-cert', metavar='<leap-provider.crt>', default=None, help='use specified file for LEAP provider cert authority certificate (url https://<LEAP-provider-domain>/ca.crt)')
parser.add_argument('-lf', '--leap-provider-cert-fingerprint', metavar='<leap provider certificate fingerprint>', default=None, help='use specified fingerprint to validate connection with LEAP provider', dest='leap_provider_cert_fingerprint')
diff --git a/service/pixelated/config/config_ua.py b/service/pixelated/config/credentials.py
index 5afb501b..ae1bc4f3 100644
--- a/service/pixelated/config/config_ua.py
+++ b/service/pixelated/config/credentials.py
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2014 ThoughtWorks, Inc.
+# Copyright (c) 2015 ThoughtWorks, Inc.
#
# Pixelated is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -14,21 +14,20 @@
# You should have received a copy of the GNU Affero General Public License
# along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
-import ConfigParser
import os
import getpass
+import json
+import sys
+import ConfigParser
-def parse_config_from_file(config_file):
- config_parser = ConfigParser.ConfigParser()
- config_file_path = os.path.abspath(os.path.expanduser(config_file))
- config_parser.read(config_file_path)
- provider, user, password = \
- config_parser.get('pixelated', 'leap_server_name'), \
- config_parser.get('pixelated', 'leap_username'), \
- config_parser.get('pixelated', 'leap_password')
-
- return provider, user, password
+def read(organization_mode, credentials_file):
+ if organization_mode:
+ return read_from_dispatcher()
+ else:
+ if credentials_file:
+ return read_from_file(credentials_file)
+ return prompt_for_credentials()
def prompt_for_credentials():
@@ -38,7 +37,18 @@ def prompt_for_credentials():
return provider, username, password
-def config_user_agent(config_file):
- provider, user, password = parse_config_from_file(config_file) if config_file else prompt_for_credentials()
+def read_from_file(credentials_file):
+ config_parser = ConfigParser.ConfigParser()
+ credentials_file_path = os.path.abspath(os.path.expanduser(credentials_file))
+ config_parser.read(credentials_file_path)
+ provider, user, password = \
+ config_parser.get('pixelated', 'leap_server_name'), \
+ config_parser.get('pixelated', 'leap_username'), \
+ config_parser.get('pixelated', 'leap_password')
+ return provider, user, password
+
+
+def read_from_dispatcher():
+ config = json.loads(sys.stdin.read())
- return (provider, user, password)
+ return config['leap_provider_hostname'], config['user'], config['password']
diff --git a/service/pixelated/config/dispatcher.py b/service/pixelated/config/dispatcher.py
deleted file mode 100644
index eb5634ab..00000000
--- a/service/pixelated/config/dispatcher.py
+++ /dev/null
@@ -1,38 +0,0 @@
-#
-# Copyright (c) 2014 ThoughtWorks, Inc.
-#
-# Pixelated is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Pixelated 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 Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
-
-import json
-import sys
-import os
-
-
-def config_dispatcher(dispatcher):
-
- def fetch_credentials_from_dispatcher(filename):
- if not os.path.exists(filename):
- print('The credentials pipe doesn\'t exist')
- sys.exit(1)
- with open(filename, 'r') as fifo:
- return json.loads(fifo.read())
-
- def fetch_credentials_from_dispatcher_stdin():
- return json.loads(sys.stdin.read())
-
- config = fetch_credentials_from_dispatcher(dispatcher) if dispatcher else fetch_credentials_from_dispatcher_stdin()
-
- return (config['leap_provider_hostname'],
- config['user'],
- config['password'])
diff --git a/service/pixelated/config/initialize_leap.py b/service/pixelated/config/initialize_leap.py
index b693fde6..3ddc3a57 100644
--- a/service/pixelated/config/initialize_leap.py
+++ b/service/pixelated/config/initialize_leap.py
@@ -1,6 +1,5 @@
from pixelated.config.config import Config
-from pixelated.config.config_ua import config_user_agent
-from pixelated.config.dispatcher import config_dispatcher
+from pixelated.config import credentials
from leap.common.events import server as events_server
import pixelated.bitmask_libraries.certs as certs
from pixelated.bitmask_libraries.session import open_leap_session
@@ -8,39 +7,22 @@ from pixelated.bitmask_libraries.session import open_leap_session
def initialize_leap(leap_provider_cert,
leap_provider_cert_fingerprint,
- config_file,
- dispatcher,
- dispatcher_stdin,
+ credentials_file,
+ organization_mode,
leap_home):
-
init_monkeypatches()
-
- provider, user, password = gather_credentials(dispatcher,
- dispatcher_stdin,
- config_file)
-
+ provider, user, password = credentials.read(organization_mode, credentials_file)
init_leap_cert(leap_provider_cert, leap_provider_cert_fingerprint)
-
events_server.ensure_server(port=8090)
-
leap_session = create_leap_session(provider, user, password, leap_home)
-
return leap_session
-def gather_credentials(dispatcher, dispatcher_stdin, config_file):
- if dispatcher or dispatcher_stdin:
- return config_dispatcher(dispatcher)
- else:
- return config_user_agent(config_file)
-
-
def create_leap_session(provider, username, password, leap_home):
leap_session = open_leap_session(username,
password,
provider,
leap_home)
-
leap_session.soledad_session.soledad.sync(defer_decryption=False)
leap_session.nicknym.generate_openpgp_key()
return leap_session
diff --git a/service/test/unit/config/test_credentials.py b/service/test/unit/config/test_credentials.py
new file mode 100644
index 00000000..61cfac53
--- /dev/null
+++ b/service/test/unit/config/test_credentials.py
@@ -0,0 +1,30 @@
+import json
+import unittest
+import sys
+from mockito import mock, when
+from pixelated.config.args import parse_user_agent_args
+from pixelated.config import credentials
+
+
+class TestReadCredentials(unittest.TestCase):
+
+ def setUp(self):
+ self.test_data = {'leap_provider_hostname': 'test_provider', 'user': 'test_user', 'password': 'test_password'}
+
+ def test_organization_mode_reads_credentials_from_stdin(self):
+ data = json.dumps({'leap_provider_hostname': 'test_provider', 'user': 'test_user', 'password': 'test_password'})
+ orig_stdin = sys.stdin
+ sys.stdin = mock()
+ when(sys.stdin).read().thenReturn(data)
+
+ try:
+ sys.argv = ['tmp/does_not_exist', '--organization-mode']
+ args = parse_user_agent_args()
+
+ provider, user, password = credentials.read(args.organization_mode, 'not_used')
+
+ self.assertEquals('test_provider', provider)
+ self.assertEquals('test_user', user)
+ self.assertEquals('test_password', password)
+ finally:
+ sys.stdin = orig_stdin
diff --git a/service/test/unit/config/test_dispatcher.py b/service/test/unit/config/test_dispatcher.py
deleted file mode 100644
index e154ac22..00000000
--- a/service/test/unit/config/test_dispatcher.py
+++ /dev/null
@@ -1,59 +0,0 @@
-import json
-import unittest
-import thread
-import sys
-from mockito import mock, when
-import os
-from pixelated.config.config import Config
-from pixelated.config.args import parse_user_agent_args
-
-from pixelated.config.dispatcher import config_dispatcher
-
-
-class TestConfigDispatcher(unittest.TestCase):
-
- def setUp(self):
- self.config = Config()
- self.test_data = {'leap_provider_hostname': 'test_provider', 'user': 'test_user', 'password': 'test_password'}
-
- def test_that_organization_switch_reads_the_credentials_from_pipe(self):
- fifo_path = '/tmp/credentials-pipe'
-
- sys.argv = ['tmp/does_not_exist', '--dispatcher', fifo_path]
- args = parse_user_agent_args()
-
- self._mkfifo(fifo_path)
-
- provider, user, password = config_dispatcher(args.dispatcher)
-
- self.assertEquals('test_provider', provider)
- self.assertEquals('test_user', user)
- self.assertEquals('test_password', password)
-
- def test_that_organization_switch_reads_the_credentials_from_stdin(self):
- data = json.dumps({'leap_provider_hostname': 'test_provider', 'user': 'test_user', 'password': 'test_password'})
- orig_stdin = sys.stdin
- sys.stdin = mock()
- when(sys.stdin).read().thenReturn(data)
-
- try:
- sys.argv = ['tmp/does_not_exist', '--dispatcher-stdin']
- args = parse_user_agent_args()
-
- provider, user, password = config_dispatcher(args.dispatcher)
-
- self.assertEquals('test_provider', provider)
- self.assertEquals('test_user', user)
- self.assertEquals('test_password', password)
- finally:
- sys.stdin = orig_stdin
-
- def _spin_up_fifo(self, test_fifo):
- with open(test_fifo, 'w') as fifo:
- fifo.write(json.dumps(self.test_data))
-
- def _mkfifo(self, fifo_path):
- if os.path.exists(fifo_path):
- os.remove(fifo_path)
- os.mkfifo('/tmp/credentials-pipe')
- thread.start_new_thread(self._spin_up_fifo, (fifo_path,))