From 8cebf955ad71975a20275a780a67b31099759e3a Mon Sep 17 00:00:00 2001 From: Ruben Pollan Date: Tue, 18 Jul 2017 15:43:35 +0200 Subject: [feat] add a mock mixnet_status call to the API For now we say it will be mixed on every request if the mixnet is enabled. We might want a better mock in the future. - Resolves: #8972 --- src/leap/bitmask/core/configurable.py | 1 + src/leap/bitmask/core/dispatcher.py | 11 +++++++++++ src/leap/bitmask/core/mail_services.py | 11 ++++++++++- src/leap/bitmask/core/service.py | 21 +++++++++++---------- 4 files changed, 33 insertions(+), 11 deletions(-) (limited to 'src/leap/bitmask/core') diff --git a/src/leap/bitmask/core/configurable.py b/src/leap/bitmask/core/configurable.py index 726c541a..262f0300 100644 --- a/src/leap/bitmask/core/configurable.py +++ b/src/leap/bitmask/core/configurable.py @@ -51,6 +51,7 @@ zmq = True web = True onion = False websockets = False +mixnet = False """ __all__ = ["ConfigurableService", DEFAULT_BASEDIR, MissingConfigEntry] diff --git a/src/leap/bitmask/core/dispatcher.py b/src/leap/bitmask/core/dispatcher.py index 7a2d48a2..519ec9df 100644 --- a/src/leap/bitmask/core/dispatcher.py +++ b/src/leap/bitmask/core/dispatcher.py @@ -267,6 +267,17 @@ class MailCmd(SubCommand): d = mail.get_token() return d + @register_method('dict') + def do_MIXNET_STATUS(self, mail, *parts, **kw): + try: + userid = parts[2] + address = parts[3] + except IndexError: + raise DispatchError( + 'wrong number of arguments: expected 2') + d = mail.do_mixnet_status(userid, address) + return d + class WebUICmd(SubCommand): diff --git a/src/leap/bitmask/core/mail_services.py b/src/leap/bitmask/core/mail_services.py index 20d6a342..be84b3cf 100644 --- a/src/leap/bitmask/core/mail_services.py +++ b/src/leap/bitmask/core/mail_services.py @@ -469,13 +469,14 @@ class StandardMailService(service.MultiService, HookableService): # TODO factor out Mail Service to inside mail package. - def __init__(self, basedir): + def __init__(self, basedir, mixnet_enabled=False): self._basedir = basedir self._soledad_sessions = {} self._keymanager_sessions = {} self._sendmail_opts = {} self._service_tokens = {} self._active_user = None + self._mixnet_enabled = mixnet_enabled super(StandardMailService, self).__init__() self.initializeChildrenServices() @@ -603,6 +604,14 @@ class StandardMailService(service.MultiService, HookableService): } defer.returnValue(merge_status(childrenStatus)) + def do_mixnet_status(self, userid, address): + # XXX: for now there is no support in the provider + # we'll mock it if it's enabled + status = 'disabled' + if self._mixnet_enabled: + status = 'ok' + return {'status': status} + def get_token(self): active_user = self._active_user if not active_user: diff --git a/src/leap/bitmask/core/service.py b/src/leap/bitmask/core/service.py index 5b4f5f79..e823d829 100644 --- a/src/leap/bitmask/core/service.py +++ b/src/leap/bitmask/core/service.py @@ -83,9 +83,6 @@ class BitmaskBackend(configurable.ConfigurableService): # top of the global app token, this should be removed. self.tokens = {} - def enabled(service): - return self.get_config('services', service, False, boolean=True) - def with_manhole(): user = self.get_config('manhole', 'user', '') passwd = self.get_config('manhole', 'passwd', '') @@ -101,26 +98,29 @@ class BitmaskBackend(configurable.ConfigurableService): on_start(self.init_bonafide) on_start(self.init_sessions) - if enabled('mail'): + if self._enabled('mail'): on_start(self._init_mail_services) - if enabled('vpn'): + if self._enabled('vpn'): on_start(self._init_vpn) - if enabled('zmq'): + if self._enabled('zmq'): on_start(self._init_zmq) - if enabled('web'): - onion = enabled('onion') + if self._enabled('web'): + onion = self._enabled('onion') on_start(self._init_web, onion=onion) - if enabled('websockets'): + if self._enabled('websockets'): on_start(self._init_websockets) manholecfg = with_manhole() if manholecfg: on_start(self._init_manhole, manholecfg) + def _enabled(self, service): + return self.get_config('services', service, False, boolean=True) + def _touch_token_file(self): path = os.path.join(self.basedir, 'authtoken') with open(path, 'w') as f: @@ -203,7 +203,8 @@ class BitmaskBackend(configurable.ConfigurableService): def _init_mail(self): service = mail_services.StandardMailService - self._maybe_init_service('mail', service, self.basedir) + self._maybe_init_service('mail', service, self.basedir, + self._enabled('mixnet')) def _init_vpn(self): if HAS_VPN: -- cgit v1.2.3