diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/leap/bitmask/vpn/process.py | 1 | ||||
-rw-r--r-- | src/leap/bitmask/vpn/service.py | 24 | ||||
-rw-r--r-- | src/leap/bitmask/vpn/tunnel.py (renamed from src/leap/bitmask/vpn/manager.py) | 19 | ||||
-rw-r--r-- | src/leap/bitmask/vpn/tunnelmanager.py (renamed from src/leap/bitmask/vpn/vpn.py) | 20 |
4 files changed, 41 insertions, 23 deletions
diff --git a/src/leap/bitmask/vpn/process.py b/src/leap/bitmask/vpn/process.py index 9b235260..3de652ff 100644 --- a/src/leap/bitmask/vpn/process.py +++ b/src/leap/bitmask/vpn/process.py @@ -138,7 +138,6 @@ class _VPNProcess(protocol.ProcessProtocol, _management.VPNManagement): if 'SIGTERM[soft,ping-restart]' in line: self.restarting = True self.log.info(line) - # self._status.watch(line) def processExited(self, failure): """ diff --git a/src/leap/bitmask/vpn/service.py b/src/leap/bitmask/vpn/service.py index a792d1e6..fc39bcc8 100644 --- a/src/leap/bitmask/vpn/service.py +++ b/src/leap/bitmask/vpn/service.py @@ -26,7 +26,7 @@ from time import strftime from twisted.internet import defer from leap.bitmask.hooks import HookableService -from leap.bitmask.vpn.vpn import VPNManager +from leap.bitmask.vpn.tunnelmanager import TunnelManager from leap.bitmask.vpn._checks import is_service_ready, get_vpn_cert_path from leap.bitmask.vpn import privilege, helpers from leap.bitmask.vpn.privilege import NoPolkitAuthAgentAvailable @@ -53,7 +53,7 @@ class VPNService(HookableService): super(VPNService, self).__init__() self._started = False - self._vpn = None + self._tunnelmanager = None self._domain = '' if basepath is None: @@ -87,7 +87,7 @@ class VPNService(HookableService): yield self._setup(domain) try: - started = self._vpn.start() + started = self._tunnelmanager.start() # XXX capture it inside start method # here I'd like to get (status, message) @@ -108,15 +108,15 @@ class VPNService(HookableService): # TODO ----------------------------- # when shutting down the main bitmaskd daemon, this should be called. - if not self._vpn: + if not self._tunnelmanager: raise Exception('VPN was not running') if self._started: - self._vpn.stop() + self._tunnelmanager.stop() self._started = False return {'result': 'vpn stopped'} - elif self._vpn.is_firewall_up(): - self._vpn.stop_firewall() + elif self._tunnelmanager.is_firewall_up(): + self._tunnelmanager.stop_firewall() return {'result': 'firewall stopped'} else: raise Exception('VPN was not running') @@ -128,8 +128,8 @@ class VPNService(HookableService): 'childrenStatus': {} } - if self._vpn: - status = self._vpn.get_status() + if self._tunnelmanager: + status = self._tunnelmanager.get_status() if self._domain: status['domain'] = self._domain @@ -179,7 +179,7 @@ class VPNService(HookableService): @defer.inlineCallbacks def _setup(self, provider): - """Set up VPNManager for a specified provider. + """Set up TunnelManager for a specified provider. :param provider: the provider to use, e.g. 'demo.bitmask.net' :type provider: str""" @@ -203,8 +203,8 @@ class VPNService(HookableService): 'Cannot find provider certificate. ' 'Please configure provider.') - self._vpn = VPNManager(provider, remotes, cert_path, key_path, ca_path, - extra_flags) + self._tunnelmanager = TunnelManager( + provider, remotes, cert_path, key_path, ca_path, extra_flags) def _cert_expires(self, provider): path = os.path.join(self._basepath, "leap", "providers", provider, diff --git a/src/leap/bitmask/vpn/manager.py b/src/leap/bitmask/vpn/tunnel.py index 2b113a75..4236edf5 100644 --- a/src/leap/bitmask/vpn/manager.py +++ b/src/leap/bitmask/vpn/tunnel.py @@ -16,7 +16,7 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. """ -VPN Manager +VPN Tunnel. """ import os @@ -27,10 +27,20 @@ from ._config import _TempVPNConfig, _TempProviderConfig from .constants import IS_WIN -# TODO this is very badly named. There is another class that is called manager. -# TODO Call it Tunnel? Tunnel = vpn + firewall +# TODO refactor - this class is still a very light proxy around the +# underlying VPNControl. The main methods here are start/stop, so this +# looks like it could better use the Service interface. +# TODO gateway selection should be done in this class. +# TODO DO NOT pass VPNConfig/ProviderConfig beyond this class. +# TODO split sync/async vpn control mechanisms. -class TunnelManager(object): + +class VPNTunnel(object): + + """ + A VPN Tunnel holds the configuration for a VPN connection, and allows to + control that connection. + """ def __init__(self, provider, remotes, cert_path, key_path, ca_path, extra_flags): @@ -52,6 +62,7 @@ class TunnelManager(object): self._providerconfig = _TempProviderConfig(provider, ca_path) host, port = self._get_management_location() + self._vpn = VPNControl(remotes=remotes, vpnconfig=self._vpnconfig, providerconfig=self._providerconfig, diff --git a/src/leap/bitmask/vpn/vpn.py b/src/leap/bitmask/vpn/tunnelmanager.py index 23f0a582..5faac662 100644 --- a/src/leap/bitmask/vpn/vpn.py +++ b/src/leap/bitmask/vpn/tunnelmanager.py @@ -19,15 +19,23 @@ from colorama import Fore from leap.bitmask.util import merge_status -from leap.bitmask.vpn.manager import TunnelManager + from leap.bitmask.vpn.fw.firewall import FirewallManager +from leap.bitmask.vpn.tunnel import VPNTunnel + + +# TODO further refactor pending: merge with VPNService? + +class TunnelManager(object): -class VPNManager(object): + """ + A TunnelManager controls VPN and Firewall + """ def __init__(self, provider, remotes, cert, key, ca, flags): - self._vpn = TunnelManager( + self._vpntunnel = VPNTunnel( provider, remotes, cert, key, ca, flags) self._firewall = FirewallManager(remotes) self.starting = False @@ -45,7 +53,7 @@ class VPNManager(object): print(Fore.GREEN + "Firewall: started" + Fore.RESET) try: - vpn_ok = self._vpn.start() + vpn_ok = self._vpntunnel.start() except Exception: self.starting = False return False @@ -71,7 +79,7 @@ class VPNManager(object): print(Fore.GREEN + "Firewall: stopped." + Fore.RESET) print(Fore.BLUE + "VPN: stopping..." + Fore.RESET) - vpn_ok = self._vpn.stop() + vpn_ok = self._vpntunnel.stop() if not vpn_ok: print (Fore.RED + "VPN: Error stopping." + Fore.RESET) return False @@ -87,7 +95,7 @@ class VPNManager(object): def get_status(self): childrenStatus = { - "vpn": self._vpn.status, + "vpn": self._vpntunnel.status, "firewall": self._firewall.status } if self.starting: |