diff options
| author | kali <kali@leap.se> | 2012-08-28 23:08:39 +0900 | 
|---|---|---|
| committer | kali <kali@leap.se> | 2012-08-28 23:08:39 +0900 | 
| commit | 06883461f2daa616b2e3c842f53d9422703cd9c7 (patch) | |
| tree | f3e5728574db03b2f98d0245727972bcfa58fe92 /src | |
| parent | 5ddb2ef5a803cc6c01a90b4c3b33c90a51d2666e (diff) | |
eip_checks called from main app.
removed "configuration" object. checks are called from conductor.
Diffstat (limited to 'src')
| -rw-r--r-- | src/leap/baseapp/mainwindow.py | 43 | ||||
| -rw-r--r-- | src/leap/eip/checks.py | 12 | ||||
| -rw-r--r-- | src/leap/eip/eipconnection.py | 24 | ||||
| -rw-r--r-- | src/leap/eip/openvpnconnection.py | 3 | 
4 files changed, 39 insertions, 43 deletions
diff --git a/src/leap/baseapp/mainwindow.py b/src/leap/baseapp/mainwindow.py index 086e905a..d7f4ecac 100644 --- a/src/leap/baseapp/mainwindow.py +++ b/src/leap/baseapp/mainwindow.py @@ -11,18 +11,11 @@ from PyQt4.QtGui import (QMainWindow, QWidget, QVBoxLayout, QMessageBox,                           QTextBrowser, qApp)  from PyQt4.QtCore import (pyqtSlot, pyqtSignal, QTimer) -from leap.base.config import Configuration -  from leap.baseapp.dialogs import ErrorDialog -  from leap.eip import exceptions as eip_exceptions  from leap.eip.eipconnection import EIPConnection -  from leap.gui import mainwindow_rc -#TODO: Get rid of this and do something clever -DEFAULT_PROVIDER_URL = "http://localhost/definition.json" -  class LeapWindow(QMainWindow):      #XXX tbd: refactor into model / view / controller @@ -35,9 +28,7 @@ class LeapWindow(QMainWindow):          super(LeapWindow, self).__init__()          self.debugmode = getattr(opts, 'debug', False) -        self.configuration = Configuration() - -        self.vpn_service_started = False +        self.eip_service_started = False          self.createWindowHeader()          self.createIconGroupBox() @@ -69,7 +60,9 @@ class LeapWindow(QMainWindow):          widget.setLayout(mainLayout)          self.trayIcon.show() -        config_file = getattr(opts, 'config_file', None) +        self.setWindowTitle("LEAP Client") +        self.resize(400, 300) +        self.set_statusbarMessage('ready')          #          # conductor is in charge of all @@ -84,15 +77,19 @@ class LeapWindow(QMainWindow):              status_signals=(self.statusChange.emit, ),              debug=self.debugmode) +        # XXX remove skip download when sample service is ready +        self.conductor.run_checks(skip_download=True) + +        ####### error checking ################          #          # bunch of self checks.          # XXX move somewhere else alltogether.          # -        if self.configuration.error is True: +        if self.conductor.missing_definition is True:              dialog = ErrorDialog()              dialog.criticalMessage( -                'There is a problem with the default ' -                'definition.json file', +                'The default ' +                'definition.json file cannot be found',                  'error')          if self.conductor.missing_provider is True: @@ -144,10 +141,7 @@ class LeapWindow(QMainWindow):                  '(<i>DOES NOTHING YET</i>)',                  'error') -        self.setWindowTitle("LEAP Client") -        self.resize(400, 300) - -        self.set_statusbarMessage('ready') +        ############ end error checking ###################          if self.conductor.autostart:              self.start_or_stopVPN() @@ -387,9 +381,10 @@ technolust</i>")          """          stub for running child process with vpn          """ -        if self.vpn_service_started is False: +        if self.eip_service_started is False:              try:                  self.conductor.connect() +                # XXX move this to error queue              except eip_exceptions.EIPNoCommandError:                  dialog = ErrorDialog()                  dialog.warningMessage( @@ -398,7 +393,7 @@ technolust</i>")                      'error')              if self.debugmode:                  self.startStopButton.setText('&Disconnect') -            self.vpn_service_started = True +            self.eip_service_started = True              # XXX what is optimum polling interval?              # too little is overkill, too much @@ -406,13 +401,11 @@ technolust</i>")              self.timer.start(250.0)              return -        if self.vpn_service_started is True: +        if self.eip_service_started is True:              self.conductor.disconnect() -            # FIXME this should trigger also -            # statuschange event. why isn't working??              if self.debugmode:                  self.startStopButton.setText('&Connect') -            self.vpn_service_started = False +            self.eip_service_started = False              self.timer.stop()              return @@ -430,7 +423,7 @@ technolust</i>")          # XXX it's too expensive to poll          # continously. move to signal events instead. -        if not self.vpn_service_started: +        if not self.eip_service_started:              return          # XXX remove all access to manager layer diff --git a/src/leap/eip/checks.py b/src/leap/eip/checks.py index 7ef80cae..794e69e1 100644 --- a/src/leap/eip/checks.py +++ b/src/leap/eip/checks.py @@ -2,7 +2,9 @@ import json  import logging  import os +logging.basicConfig()  logger = logging.getLogger(name=__name__) +logger.setLevel(logging.DEBUG)  import requests @@ -31,7 +33,7 @@ class EIPChecker(object):          self.config = None          self.fetcher = fetcher -    def run_all(self, checker=None): +    def run_all(self, checker=None, skip_download=False):          """          runs all checks in a row.          will raise if some error encountered. @@ -50,8 +52,8 @@ class EIPChecker(object):          checker.check_default_eipconfig()          checker.check_is_there_default_provider() -        checker.fetch_definition() -        checker.fetch_eip_config() +        checker.fetch_definition(skip_download=skip_download) +        checker.fetch_eip_config(skip_download=skip_download)          checker.check_complete_eip_config()          #checker.ping_gateway() @@ -70,6 +72,7 @@ class EIPChecker(object):          # dump it right now, we can get an in-memory          # config object and dump it to disk in a          # later moment +        logger.debug('checking default eip config')          if not self._is_there_default_eipconfig():              self._dump_default_eipconfig() @@ -84,6 +87,7 @@ class EIPChecker(object):          # else: self.get_eipconfig          # XXX parse EIPConfig.          # XXX get default_provider. +        logger.debug('checking default provider')          eipcfg = self._get_default_eipconfig_path()          with open(eipcfg, 'r') as fp:              config = json.load(fp) @@ -103,8 +107,10 @@ class EIPChecker(object):          # TODO:          # - Implement diff          # - overwrite if different. +        logger.debug('fetching definition')          if skip_download: +            logger.debug('(fetching def skipped)')              return True          if config is None:              config = self.config diff --git a/src/leap/eip/eipconnection.py b/src/leap/eip/eipconnection.py index 2dfc1503..aea560c9 100644 --- a/src/leap/eip/eipconnection.py +++ b/src/leap/eip/eipconnection.py @@ -8,7 +8,7 @@ logging.basicConfig()  logger = logging.getLogger(name=__name__)  logger.setLevel(logging.DEBUG) -from leap.base.connection import ConnectionError +from leap.eip.checks import EIPChecker  from leap.eip import exceptions as eip_exceptions  from leap.eip.openvpnconnection import OpenVPNConnection @@ -22,17 +22,23 @@ class EIPConnection(OpenVPNConnection):      Status updates (connected, bandwidth, etc) are signaled to the GUI.      """ -    def __init__(self, *args, **kwargs): +    def __init__(self, checker=EIPChecker, *args, **kwargs):          self.settingsfile = kwargs.get('settingsfile', None)          self.logfile = kwargs.get('logfile', None)          self.error_queue = [] -        #self.desired_con_state = None  # not in use          status_signals = kwargs.pop('status_signals', None)          self.status = EIPConnectionStatus(callbacks=status_signals) +        self.checker = checker()          super(EIPConnection, self).__init__(*args, **kwargs) +    def run_checks(self, skip_download=False): +        """ +        run all eip checks previous to attempting a connection +        """ +        self.checker.run_all(skip_download=skip_download) +      def connect(self):          """          entry point for connection process @@ -128,10 +134,6 @@ class EIPConnection(OpenVPNConnection):                           unicode(except_msg))          return conn_result -"""generic watcher object that keeps track of connection status""" -# This should be deprecated in favor of daemon mode + management -# interface. But we can leave it here for debug purposes. -  class EIPConnectionStatus(object):      """ @@ -272,11 +274,3 @@ class EIPConnectionStatus(object):                  for cb in self.callbacks:                      if callable(cb):                          cb(self) - - -# XXX move to exceptions -class EIPClientError(ConnectionError): -    """ -    base EIPClient Exception -    """ -    pass diff --git a/src/leap/eip/openvpnconnection.py b/src/leap/eip/openvpnconnection.py index 3972b617..5f67d27a 100644 --- a/src/leap/eip/openvpnconnection.py +++ b/src/leap/eip/openvpnconnection.py @@ -59,11 +59,14 @@ to be triggered for each one of them.          self.port = None          self.proto = None +        # XXX move all error messages +        # into a more encapsulated object.          self.missing_pkexec = False          self.missing_auth_agent = False          self.bad_keyfile_perms = False          self.missing_vpn_keyfile = False          self.missing_provider = False +        self.missing_definition = False          self.bad_provider = False          #XXX workaround for signaling  | 
