diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/leap/bitmask/config/flags.py | 2 | ||||
| -rw-r--r-- | src/leap/bitmask/gui/eip_status.py | 24 | ||||
| -rw-r--r-- | src/leap/bitmask/gui/mainwindow.py | 1 | ||||
| -rw-r--r-- | src/leap/bitmask/gui/ui/eip_status.ui | 21 | ||||
| -rw-r--r-- | src/leap/bitmask/services/eip/eipconfig.py | 28 | ||||
| -rw-r--r-- | src/leap/bitmask/services/eip/vpnlauncher.py | 9 | 
6 files changed, 73 insertions, 12 deletions
| diff --git a/src/leap/bitmask/config/flags.py b/src/leap/bitmask/config/flags.py index 6b70659d..2f3fdde4 100644 --- a/src/leap/bitmask/config/flags.py +++ b/src/leap/bitmask/config/flags.py @@ -55,3 +55,5 @@ OPENVPN_VERBOSITY = 1  # Skip the checks in the wizard, use for testing purposes only!  SKIP_WIZARD_CHECKS = False + +CURRENT_VPN_COUNTRY = None diff --git a/src/leap/bitmask/gui/eip_status.py b/src/leap/bitmask/gui/eip_status.py index dcd7ef42..8b9f2d44 100644 --- a/src/leap/bitmask/gui/eip_status.py +++ b/src/leap/bitmask/gui/eip_status.py @@ -24,6 +24,7 @@ from functools import partial  from PySide import QtCore, QtGui +from leap.bitmask.config import flags  from leap.bitmask.services import get_service_display_name, EIP_SERVICE  from leap.bitmask.platform_init import IS_LINUX  from leap.bitmask.util.averages import RateMovingAverage @@ -420,6 +421,7 @@ class EIPStatusWidget(QtGui.QWidget):          Sets the state of the widget to how it should look after EIP          has stopped          """ +        self.set_country_code("")          self._reset_traffic_rates()          self.ui.eip_bandwidth.hide() @@ -585,6 +587,25 @@ class EIPStatusWidget(QtGui.QWidget):              self.tr("Routing traffic through: <b>{0}</b>").format(                  provider)) +        ccode = flags.CURRENT_VPN_COUNTRY +        if ccode is not None: +            self.set_country_code(ccode) + +    def set_country_code(self, code): +        """ +        Set the pixmap of the given country code + +        :param code: the country code +        :type code: str +        """ +        if code is not None and len(code) == 2: +            img = ":/images/countries/%s.png" % (code.lower(),) +        else: +            img = None +        cc = self.ui.lblGatewayCountryCode +        cc.setPixmap(QtGui.QPixmap(img)) +        cc.setToolTip(code) +      def aborted(self):          """          Notify the state machine that EIP was aborted for some reason. @@ -707,3 +728,6 @@ class EIPStatusWidget(QtGui.QWidget):          """          self.set_eip_status("", error=error)          self.set_eip_status_icon("error") + +import eipstatus_rc +assert(eipstatus_rc) diff --git a/src/leap/bitmask/gui/mainwindow.py b/src/leap/bitmask/gui/mainwindow.py index 71885a78..885cb792 100644 --- a/src/leap/bitmask/gui/mainwindow.py +++ b/src/leap/bitmask/gui/mainwindow.py @@ -1461,6 +1461,7 @@ class MainWindow(QtGui.QMainWindow):          self._already_started_eip = True          # check for connectivity +        # we might want to leave a little time here...          self._check_name_resolution(domain)      def _check_name_resolution(self, domain): diff --git a/src/leap/bitmask/gui/ui/eip_status.ui b/src/leap/bitmask/gui/ui/eip_status.ui index 892f0f00..7216bb0a 100644 --- a/src/leap/bitmask/gui/ui/eip_status.ui +++ b/src/leap/bitmask/gui/ui/eip_status.ui @@ -28,7 +28,7 @@       <property name="verticalSpacing">        <number>0</number>       </property> -     <item row="0" column="3"> +     <item row="0" column="4">        <widget class="QPushButton" name="btnEipStartStop">         <property name="text">          <string>Turn On</string> @@ -51,7 +51,7 @@         </property>        </widget>       </item> -     <item row="3" column="1"> +     <item row="3" column="2">        <widget class="QLabel" name="lblEIPStatus">         <property name="maximumSize">          <size> @@ -70,7 +70,7 @@         </property>        </widget>       </item> -     <item row="0" column="1"> +     <item row="0" column="2">        <widget class="QLabel" name="lblEIPMessage">         <property name="sizePolicy">          <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> @@ -86,7 +86,7 @@         </property>        </widget>       </item> -     <item row="0" column="4"> +     <item row="0" column="5">        <widget class="QLabel" name="lblVPNStatusIcon">         <property name="maximumSize">          <size> @@ -105,7 +105,7 @@         </property>        </widget>       </item> -     <item row="1" column="1"> +     <item row="1" column="2">        <spacer name="horizontalSpacer">         <property name="orientation">          <enum>Qt::Horizontal</enum> @@ -118,7 +118,7 @@         </property>        </spacer>       </item> -     <item row="2" column="1" colspan="4"> +     <item row="2" column="2" colspan="4">        <widget class="QWidget" name="eip_bandwidth" native="true">         <layout class="QHBoxLayout" name="horizontalLayout">          <property name="spacing"> @@ -239,13 +239,20 @@         </layout>        </widget>       </item> -     <item row="0" column="2"> +     <item row="0" column="3">        <widget class="QPushButton" name="btnFwDown">         <property name="text">          <string>Turn Off</string>         </property>        </widget>       </item> +     <item row="0" column="1"> +      <widget class="QLabel" name="lblGatewayCountryCode"> +       <property name="text"> +        <string/> +       </property> +      </widget> +     </item>      </layout>     </item>    </layout> diff --git a/src/leap/bitmask/services/eip/eipconfig.py b/src/leap/bitmask/services/eip/eipconfig.py index 09a3d257..e7419b22 100644 --- a/src/leap/bitmask/services/eip/eipconfig.py +++ b/src/leap/bitmask/services/eip/eipconfig.py @@ -110,7 +110,7 @@ class VPNGatewaySelector(object):      def get_gateways_list(self):          """ -        Returns the existing gateways, sorted by timezone proximity. +        Return the existing gateways, sorted by timezone proximity.          :rtype: list of tuples (location, ip)                  (str, IPv4Address or IPv6Address object) @@ -148,16 +148,36 @@ class VPNGatewaySelector(object):      def get_gateways(self):          """ -        Returns the 4 best gateways, sorted by timezone proximity. +        Return the 4 best gateways, sorted by timezone proximity.          :rtype: list of IPv4Address or IPv6Address object.          """          gateways = [ip for location, ip in self.get_gateways_list()][:4]          return gateways +    def get_gateways_country_code(self): +        """ +        Return a dict with ipaddress -> country code mapping. + +        :rtype: dict +        """ +        country_codes = {} + +        locations = self._eipconfig.get_locations() +        gateways = self._eipconfig.get_gateways() + +        for idx, gateway in enumerate(gateways): +            gateway_location = gateway.get('location') + +            ip = self._eipconfig.get_gateway_ip(idx) +            if gateway_location is not None: +                ccode = locations[gateway['location']]['country_code'] +                country_codes[ip] = ccode +        return country_codes +      def _get_timezone_distance(self, offset):          ''' -        Returns the distance between the local timezone and +        Return the distance between the local timezone and          the one with offset 'offset'.          :param offset: the distance of a timezone to GMT. @@ -179,7 +199,7 @@ class VPNGatewaySelector(object):      def _get_local_offset(self):          ''' -        Returns the distance between GMT and the local timezone. +        Return the distance between GMT and the local timezone.          :rtype: int          ''' diff --git a/src/leap/bitmask/services/eip/vpnlauncher.py b/src/leap/bitmask/services/eip/vpnlauncher.py index dcb48e8a..9629afae 100644 --- a/src/leap/bitmask/services/eip/vpnlauncher.py +++ b/src/leap/bitmask/services/eip/vpnlauncher.py @@ -25,6 +25,7 @@ import stat  from abc import ABCMeta, abstractmethod  from functools import partial +from leap.bitmask.config import flags  from leap.bitmask.config.leapsettings import LeapSettings  from leap.bitmask.config.providerconfig import ProviderConfig  from leap.bitmask.platform_init import IS_LINUX @@ -122,9 +123,9 @@ class VPNLauncher(object):          leap_settings = LeapSettings()          domain = providerconfig.get_domain()          gateway_conf = leap_settings.get_selected_gateway(domain) +        gateway_selector = VPNGatewaySelector(eipconfig)          if gateway_conf == leap_settings.GATEWAY_AUTOMATIC: -            gateway_selector = VPNGatewaySelector(eipconfig)              gateways = gateway_selector.get_gateways()          else:              gateways = [gateway_conf] @@ -133,6 +134,12 @@ class VPNLauncher(object):              logger.error('No gateway was found!')              raise VPNLauncherException('No gateway was found!') +        # this only works for selecting the first gateway, as we're +        # currently doing. +        ccodes = gateway_selector.get_gateways_country_code() +        gateway_ccode = ccodes[gateways[0]] +        flags.CURRENT_VPN_COUNTRY = gateway_ccode +          logger.debug("Using gateways ips: {0}".format(', '.join(gateways)))          return gateways | 
