summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorkali <kali@leap.se>2012-08-28 23:08:39 +0900
committerkali <kali@leap.se>2012-08-28 23:08:39 +0900
commit06883461f2daa616b2e3c842f53d9422703cd9c7 (patch)
treef3e5728574db03b2f98d0245727972bcfa58fe92 /src
parent5ddb2ef5a803cc6c01a90b4c3b33c90a51d2666e (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.py43
-rw-r--r--src/leap/eip/checks.py12
-rw-r--r--src/leap/eip/eipconnection.py24
-rw-r--r--src/leap/eip/openvpnconnection.py3
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