summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKali Kaneko (leap communications) <kali@leap.se>2017-06-01 03:06:51 +0200
committerKali Kaneko (leap communications) <kali@leap.se>2017-06-01 03:33:40 +0200
commit820709938e4313e04bab160115cc215769c3a1fb (patch)
tree92adb569fc1433da6f7c1bfbc3313dfbed9a8352
parent2db7202e6c3a520a5b6fe395dd74d40d8e53c481 (diff)
[refactor] improve error reporting when openvpn not found
-rw-r--r--src/leap/bitmask/cli/command.py5
-rw-r--r--src/leap/bitmask/vpn/launcher.py4
-rw-r--r--src/leap/bitmask/vpn/service.py14
-rw-r--r--src/leap/bitmask/vpn/vpn.py8
4 files changed, 25 insertions, 6 deletions
diff --git a/src/leap/bitmask/cli/command.py b/src/leap/bitmask/cli/command.py
index 77d2bdf..cc3514b 100644
--- a/src/leap/bitmask/cli/command.py
+++ b/src/leap/bitmask/cli/command.py
@@ -148,9 +148,12 @@ class Command(object):
if self.print_json:
print(json.dumps(obj, indent=2))
elif not obj['error']:
- if not obj['result']:
+ if 'result' not in obj:
print (Fore.RED + 'ERROR: malformed response, expected'
' obj["result"]' + Fore.RESET)
+ elif obj['result'] is None:
+ print (Fore.RED + 'ERROR: empty response. Check logs.' +
+ Fore.RESET)
else:
return printer(obj['result'])
else:
diff --git a/src/leap/bitmask/vpn/launcher.py b/src/leap/bitmask/vpn/launcher.py
index 28c8a31..f412ace 100644
--- a/src/leap/bitmask/vpn/launcher.py
+++ b/src/leap/bitmask/vpn/launcher.py
@@ -201,7 +201,9 @@ class VPNLauncher(object):
if not os.path.isfile(openvpn_path):
log.warn('Could not find openvpn bin in path %s' % (
openvpn_path))
- raise OpenVPNNotFoundException()
+ err = OpenVPNNotFoundException()
+ err.expected = True
+ raise err
args = []
diff --git a/src/leap/bitmask/vpn/service.py b/src/leap/bitmask/vpn/service.py
index 874c30d..5ab1e97 100644
--- a/src/leap/bitmask/vpn/service.py
+++ b/src/leap/bitmask/vpn/service.py
@@ -78,16 +78,24 @@ class VPNService(HookableService):
exc.expected = True
raise exc
yield self._setup(domain)
+
try:
- self._vpn.start()
+ started = self._vpn.start()
+
+ # XXX capture it inside start method
+ # here I'd like to get (status, message)
except NoPolkitAuthAgentAvailable as e:
e.expected = True
raise e
+ # --------------------------------------
- self._started = True
+ self._started = started
self._domain = domain
self._write_last(domain)
- defer.returnValue({'result': 'started'})
+ if started:
+ defer.returnValue({'result': 'started'})
+ else:
+ raise Exception('Could not start VPN, check logs')
def stop_vpn(self):
# TODO -----------------------------
diff --git a/src/leap/bitmask/vpn/vpn.py b/src/leap/bitmask/vpn/vpn.py
index 677c9b9..23f0a58 100644
--- a/src/leap/bitmask/vpn/vpn.py
+++ b/src/leap/bitmask/vpn/vpn.py
@@ -44,7 +44,12 @@ class VPNManager(object):
return False
print(Fore.GREEN + "Firewall: started" + Fore.RESET)
- vpn_ok = self._vpn.start()
+ try:
+ vpn_ok = self._vpn.start()
+ except Exception:
+ self.starting = False
+ return False
+
if not vpn_ok:
print (Fore.RED + "VPN: Error starting." + Fore.RESET)
self._firewall.stop()
@@ -52,6 +57,7 @@ class VPNManager(object):
self.starting = False
return False
print(Fore.GREEN + "VPN: started" + Fore.RESET)
+ return True
def stop(self):
self.starting = False