diff options
Diffstat (limited to 'src/leap')
| -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/mainwindow.py | 5 | ||||
| -rw-r--r-- | src/leap/bitmask/gui/preferenceswindow.py | 7 | ||||
| -rw-r--r-- | src/leap/bitmask/gui/ui/wizard.ui | 73 | ||||
| -rw-r--r-- | src/leap/bitmask/gui/wizard.py | 62 | ||||
| -rw-r--r-- | src/leap/bitmask/provider/providerbootstrapper.py | 15 | ||||
| -rw-r--r-- | src/leap/bitmask/services/mail/plumber.py | 11 | 
8 files changed, 93 insertions, 96 deletions
| 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/mainwindow.py b/src/leap/bitmask/gui/mainwindow.py index 3f41900b..ffedfa1c 100644 --- a/src/leap/bitmask/gui/mainwindow.py +++ b/src/leap/bitmask/gui/mainwindow.py @@ -888,7 +888,7 @@ class MainWindow(QtGui.QMainWindow):          url = ("<a href='https://addons.mozilla.org/es/thunderbird/"                 "addon/bitmask/'>bitmask addon</a>") -        msg = ( +        msg = self.tr(              "<strong>Instructions to use mail:</strong><br>"              "If you use Thunderbird you can use the Bitmask extension helper. "              "Search for 'Bitmask' in the add-on manager or download it " @@ -898,7 +898,8 @@ class MainWindow(QtGui.QMainWindow):              "   Incoming -> IMAP, port: {1}<br>"              "   Outgoing -> SMTP, port: {2}<br>"              "   Username -> your bitmask username.<br>" -            "   Password -> leave it empty." +            "   Password -> does not matter, use any text. " +            " Just don't leave it empty and don't use your account's password."              "</em>").format(url, IMAP_PORT, smtp_port)          QtGui.QMessageBox.about(self, self.tr("Bitmask Help"), msg) 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/ui/wizard.ui b/src/leap/bitmask/gui/ui/wizard.ui index cf591470..1ddd854f 100644 --- a/src/leap/bitmask/gui/ui/wizard.ui +++ b/src/leap/bitmask/gui/ui/wizard.ui @@ -269,7 +269,20 @@         <string>Configure or select a provider</string>        </property>        <layout class="QGridLayout" name="gridLayout_5"> -       <item row="0" column="0"> +       <item row="5" column="1"> +        <widget class="QLineEdit" name="lnProvider"/> +       </item> +       <item row="5" column="0"> +        <widget class="QLabel" name="label"> +         <property name="text"> +          <string>https://</string> +         </property> +         <property name="alignment"> +          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> +         </property> +        </widget> +       </item> +       <item row="4" column="0">          <widget class="QRadioButton" name="rbNewProvider">           <property name="text">            <string>Configure new provider:</string> @@ -279,30 +292,20 @@           </property>          </widget>         </item> -       <item row="2" column="0"> -        <widget class="QRadioButton" name="rbExistingProvider"> +       <item row="5" column="2"> +        <widget class="QPushButton" name="btnCheck">           <property name="text"> -          <string>Use existing one:</string> +          <string>Check</string>           </property>          </widget>         </item> -       <item row="1" column="0"> -        <widget class="QLabel" name="label"> +       <item row="2" column="0"> +        <widget class="QRadioButton" name="rbExistingProvider">           <property name="text"> -          <string>https://</string> -         </property> -         <property name="alignment"> -          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> +          <string>Use existing one:</string>           </property> -        </widget> -       </item> -       <item row="1" column="1"> -        <widget class="QLineEdit" name="lnProvider"/> -       </item> -       <item row="1" column="2"> -        <widget class="QPushButton" name="btnCheck"> -         <property name="text"> -          <string>Check</string> +         <property name="checked"> +          <bool>false</bool>           </property>          </widget>         </item> @@ -820,8 +823,8 @@     <slot>setFocus()</slot>     <hints>      <hint type="sourcelabel"> -     <x>167</x> -     <y>192</y> +     <x>174</x> +     <y>174</y>      </hint>      <hint type="destinationlabel">       <x>265</x> @@ -836,12 +839,12 @@     <slot>setFocus()</slot>     <hints>      <hint type="sourcelabel"> -     <x>171</x> -     <y>164</y> +     <x>174</x> +     <y>227</y>      </hint>      <hint type="destinationlabel"> -     <x>246</x> -     <y>164</y> +     <x>425</x> +     <y>254</y>      </hint>     </hints>    </connection> @@ -852,12 +855,12 @@     <slot>setDisabled(bool)</slot>     <hints>      <hint type="sourcelabel"> -     <x>169</x> -     <y>196</y> +     <x>174</x> +     <y>174</y>      </hint>      <hint type="destinationlabel"> -     <x>327</x> -     <y>163</y> +     <x>454</x> +     <y>254</y>      </hint>     </hints>    </connection> @@ -868,8 +871,8 @@     <slot>setDisabled(bool)</slot>     <hints>      <hint type="sourcelabel"> -     <x>169</x> -     <y>162</y> +     <x>174</x> +     <y>227</y>      </hint>      <hint type="destinationlabel">       <x>269</x> @@ -884,12 +887,12 @@     <slot>setDisabled(bool)</slot>     <hints>      <hint type="sourcelabel"> -     <x>154</x> -     <y>193</y> +     <x>169</x> +     <y>174</y>      </hint>      <hint type="destinationlabel"> -     <x>498</x> -     <y>170</y> +     <x>520</x> +     <y>255</y>      </hint>     </hints>    </connection> diff --git a/src/leap/bitmask/gui/wizard.py b/src/leap/bitmask/gui/wizard.py index b99e8db6..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):          """ @@ -205,6 +193,10 @@ class Wizard(QtGui.QWizard):              random.shuffle(pinned)  # don't prioritize alphabetically              self.ui.cbProviders.addItems(pinned) +        # We have configured providers, so by default we select the +        # 'Use existing provider' option. +        self.ui.rbExistingProvider.setChecked(True) +      def get_domain(self):          return self._domain @@ -487,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 @@ -687,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: | 
