diff options
| -rw-r--r-- | changes/bug-4986_error-joining-string | 1 | ||||
| -rw-r--r-- | src/leap/bitmask/backend.py | 6 | ||||
| -rw-r--r-- | src/leap/bitmask/config/providerconfig.py | 10 | ||||
| -rw-r--r-- | src/leap/bitmask/gui/preferenceswindow.py | 7 | ||||
| -rw-r--r-- | src/leap/bitmask/gui/wizard.py | 58 | ||||
| -rw-r--r-- | src/leap/bitmask/provider/providerbootstrapper.py | 15 | ||||
| -rw-r--r-- | src/leap/bitmask/services/mail/plumber.py | 11 | 
7 files changed, 49 insertions, 59 deletions
diff --git a/changes/bug-4986_error-joining-string b/changes/bug-4986_error-joining-string new file mode 100644 index 00000000..935ba6db --- /dev/null +++ b/changes/bug-4986_error-joining-string @@ -0,0 +1 @@ +- Handle wizard close correctly. Closes #4986. diff --git a/src/leap/bitmask/backend.py b/src/leap/bitmask/backend.py index 6b29d4b3..df79381c 100644 --- a/src/leap/bitmask/backend.py +++ b/src/leap/bitmask/backend.py @@ -18,7 +18,6 @@  Backend for everything  """  import logging -import os  from Queue import Queue, Empty @@ -29,6 +28,7 @@ from twisted.python import log  import zope.interface  from leap.bitmask.config.providerconfig import ProviderConfig +from leap.bitmask.provider import get_provider_path  from leap.bitmask.provider.providerbootstrapper import ProviderBootstrapper  # Frontend side @@ -155,9 +155,7 @@ class Provider(object):          # we want to connect to other provider...          if (not self._provider_config.loaded() or                  self._provider_config.get_domain() != provider): -            self._provider_config.load( -                os.path.join("leap", "providers", -                             provider, "provider.json")) +            self._provider_config.load(get_provider_path(provider))          if self._provider_config.loaded():              d = self._provider_bootstrapper.run_provider_setup_checks( diff --git a/src/leap/bitmask/config/providerconfig.py b/src/leap/bitmask/config/providerconfig.py index e80b2337..2ebe05ce 100644 --- a/src/leap/bitmask/config/providerconfig.py +++ b/src/leap/bitmask/config/providerconfig.py @@ -21,11 +21,12 @@ Provider configuration  import logging  import os -from leap.common.check import leap_check -from leap.common.config.baseconfig import BaseConfig, LocalizedKey +from leap.bitmask import provider  from leap.bitmask.config.provider_spec import leap_provider_spec  from leap.bitmask.services import get_service_display_name  from leap.bitmask.util import get_path_prefix +from leap.common.check import leap_check +from leap.common.config.baseconfig import BaseConfig, LocalizedKey  logger = logging.getLogger(__name__) @@ -55,10 +56,7 @@ class ProviderConfig(BaseConfig):          :rtype: ProviderConfig or None if there is a problem loading the config          """          provider_config = ProviderConfig() -        provider_config_path = os.path.join( -            "leap", "providers", domain, "provider.json") - -        if not provider_config.load(provider_config_path): +        if not provider_config.load(provider.get_provider_path(domain)):              provider_config = None          return provider_config diff --git a/src/leap/bitmask/gui/preferenceswindow.py b/src/leap/bitmask/gui/preferenceswindow.py index 517a90c4..b2cc2236 100644 --- a/src/leap/bitmask/gui/preferenceswindow.py +++ b/src/leap/bitmask/gui/preferenceswindow.py @@ -18,7 +18,6 @@  """  Preferences window  """ -import os  import logging  from functools import partial @@ -26,6 +25,7 @@ from functools import partial  from PySide import QtCore, QtGui  from zope.proxy import sameProxiedObjects +from leap.bitmask.provider import get_provider_path  from leap.bitmask.config.leapsettings import LeapSettings  from leap.bitmask.gui.ui_preferences import Ui_Preferences  from leap.soledad.client import NoStorageSecret @@ -383,10 +383,7 @@ class PreferencesWindow(QtGui.QDialog):          :rtype: ProviderConfig or None if there is a problem loading the config          """          provider_config = ProviderConfig() -        provider_config_path = os.path.join( -            "leap", "providers", domain, "provider.json") - -        if not provider_config.load(provider_config_path): +        if not provider_config.load(get_provider_path(domain)):              provider_config = None          return provider_config diff --git a/src/leap/bitmask/gui/wizard.py b/src/leap/bitmask/gui/wizard.py index d5940c52..e1bed6b8 100644 --- a/src/leap/bitmask/gui/wizard.py +++ b/src/leap/bitmask/gui/wizard.py @@ -17,7 +17,6 @@  """  First run wizard  """ -import os  import logging  import json  import random @@ -30,10 +29,11 @@ from twisted.internet import threads  from leap.bitmask.config.leapsettings import LeapSettings  from leap.bitmask.config.providerconfig import ProviderConfig  from leap.bitmask.crypto.srpregister import SRPRegister +from leap.bitmask.provider import get_provider_path  from leap.bitmask.services import get_service_display_name, get_supported -from leap.bitmask.util.request_helpers import get_content  from leap.bitmask.util.keyring_helpers import has_keyring  from leap.bitmask.util.password import basic_password_checks +from leap.bitmask.util.request_helpers import get_content  from ui_wizard import Ui_Wizard @@ -70,8 +70,6 @@ class Wizard(QtGui.QWizard):          self.ui = Ui_Wizard()          self.ui.setupUi(self) -        self._backend = backend -          self.setPixmap(QtGui.QWizard.LogoPixmap,                         QtGui.QPixmap(":/images/mask-icon.png")) @@ -90,19 +88,8 @@ class Wizard(QtGui.QWizard):          self.ui.btnCheck.clicked.connect(self._check_provider)          self.ui.lnProvider.returnPressed.connect(self._check_provider) -        self._backend.signaler.prov_name_resolution.connect( -            self._name_resolution) -        self._backend.signaler.prov_https_connection.connect( -            self._https_connection) -        self._backend.signaler.prov_download_provider_info.connect( -            self._download_provider_info) - -        self._backend.signaler.prov_download_ca_cert.connect( -            self._download_ca_cert) -        self._backend.signaler.prov_check_ca_fingerprint.connect( -            self._check_ca_fingerprint) -        self._backend.signaler.prov_check_api_certificate.connect( -            self._check_api_certificate) +        self._backend = backend +        self._backend_connect()          self._domain = None          # HACK!! We need provider_config for the time being, it'll be @@ -172,6 +159,7 @@ class Wizard(QtGui.QWizard):          self._provider_setup_ok = False          self.ui.lnProvider.setText('')          self.ui.grpCheckProvider.setVisible(False) +        self._backend_disconnect()      def _load_configured_providers(self):          """ @@ -491,10 +479,7 @@ class Wizard(QtGui.QWizard):          check. Since this check is the last of this set, it also          completes the page if passed          """ -        if self._provider_config.load(os.path.join("leap", -                                                   "providers", -                                                   self._domain, -                                                   "provider.json")): +        if self._provider_config.load(get_provider_path(self._domain)):              self._complete_task(data, self.ui.lblProviderInfo,                                  True, self.SELECT_PROVIDER_PAGE)              self._provider_checks_ok = True @@ -691,25 +676,36 @@ class Wizard(QtGui.QWizard):          self.ui.lblPassword.setText("")          self.ui.lblPassword2.setText("") -    def closeEvent(self, event): +    def _backend_connect(self): +        """ +        Connects all the backend signals with the wizard. +        """ +        sig = self._backend.signaler +        sig.prov_name_resolution.connect(self._name_resolution) +        sig.prov_https_connection.connect(self._https_connection) +        sig.prov_download_provider_info.connect(self._download_provider_info) + +        sig.prov_download_ca_cert.connect(self._download_ca_cert) +        sig.prov_check_ca_fingerprint.connect(self._check_ca_fingerprint) +        sig.prov_check_api_certificate.connect(self._check_api_certificate) + +    def _backend_disconnect(self):          """          This method is called when the wizard dialog is closed.          We disconnect all the backend signals in here.          """ +        sig = self._backend.signaler          try:              # disconnect backend signals -            self._backend.signaler.prov_name_resolution.disconnect( -                self._name_resolution) -            self._backend.signaler.prov_https_connection.disconnect( -                self._https_connection) -            self._backend.signaler.prov_download_provider_info.disconnect( +            sig.prov_name_resolution.disconnect(self._name_resolution) +            sig.prov_https_connection.disconnect(self._https_connection) +            sig.prov_download_provider_info.disconnect(                  self._download_provider_info) -            self._backend.signaler.prov_download_ca_cert.disconnect( -                self._download_ca_cert) -            self._backend.signaler.prov_check_ca_fingerprint.disconnect( +            sig.prov_download_ca_cert.disconnect(self._download_ca_cert) +            sig.prov_check_ca_fingerprint.disconnect(                  self._check_ca_fingerprint) -            self._backend.signaler.prov_check_api_certificate.disconnect( +            sig.prov_check_api_certificate.disconnect(                  self._check_api_certificate)          except RuntimeError:              pass  # Signal was not connected diff --git a/src/leap/bitmask/provider/providerbootstrapper.py b/src/leap/bitmask/provider/providerbootstrapper.py index 2a66b78c..654d1790 100644 --- a/src/leap/bitmask/provider/providerbootstrapper.py +++ b/src/leap/bitmask/provider/providerbootstrapper.py @@ -24,17 +24,18 @@ import sys  import requests +from leap.bitmask import provider +from leap.bitmask import util  from leap.bitmask.config import flags  from leap.bitmask.config.providerconfig import ProviderConfig, MissingCACert -from leap.bitmask.util.request_helpers import get_content -from leap.bitmask import util -from leap.bitmask.util.constants import REQUEST_TIMEOUT +from leap.bitmask.provider import get_provider_path  from leap.bitmask.services.abstractbootstrapper import AbstractBootstrapper -from leap.bitmask import provider +from leap.bitmask.util.constants import REQUEST_TIMEOUT +from leap.bitmask.util.request_helpers import get_content  from leap.common import ca_bundle  from leap.common.certs import get_digest -from leap.common.files import check_and_fix_urw_only, get_mtime, mkdir_p  from leap.common.check import leap_assert, leap_assert_type, leap_check +from leap.common.files import check_and_fix_urw_only, get_mtime, mkdir_p  logger = logging.getLogger(__name__) @@ -166,8 +167,8 @@ class ProviderBootstrapper(AbstractBootstrapper):          headers = {}          domain = self._domain.encode(sys.getfilesystemencoding())          provider_json = os.path.join(util.get_path_prefix(), -                                     "leap", "providers", domain, -                                     "provider.json") +                                     get_provider_path(domain)) +          mtime = get_mtime(provider_json)          if self._download_if_needed and mtime: diff --git a/src/leap/bitmask/services/mail/plumber.py b/src/leap/bitmask/services/mail/plumber.py index 49514655..07a2608c 100644 --- a/src/leap/bitmask/services/mail/plumber.py +++ b/src/leap/bitmask/services/mail/plumber.py @@ -17,8 +17,8 @@  """  Utils for manipulating local mailboxes.  """ -import logging  import getpass +import logging  import os  from collections import defaultdict @@ -28,8 +28,9 @@ from twisted.internet import defer  from leap.bitmask.config.leapsettings import LeapSettings  from leap.bitmask.config.providerconfig import ProviderConfig -from leap.bitmask.util import flatten, get_path_prefix +from leap.bitmask.provider import get_provider_path  from leap.bitmask.services.soledad.soledadbootstrapper import get_db_paths +from leap.bitmask.util import flatten, get_path_prefix  from leap.mail.imap.account import SoledadBackedAccount  from leap.soledad.client import Soledad @@ -112,10 +113,8 @@ class MBOXPlumber(object):          self.sol = None          self._settings = LeapSettings() -        provider_config_path = os.path.join( -            get_path_prefix(), -            "leap", "providers", -            provider, "provider.json") +        provider_config_path = os.path.join(get_path_prefix(), +                                            get_provider_path(provider))          provider_config = ProviderConfig()          loaded = provider_config.load(provider_config_path)          if not loaded:  | 
