diff options
| -rw-r--r-- | pkg/requirements.pip | 1 | ||||
| -rw-r--r-- | src/leap/baseapp/eip.py | 3 | ||||
| -rw-r--r-- | src/leap/baseapp/log.py | 10 | ||||
| -rw-r--r-- | src/leap/util/__init__.py | 9 | ||||
| -rw-r--r-- | src/leap/util/geo.py | 32 | 
5 files changed, 51 insertions, 4 deletions
| diff --git a/pkg/requirements.pip b/pkg/requirements.pip index 69d435dc..813a9c62 100644 --- a/pkg/requirements.pip +++ b/pkg/requirements.pip @@ -17,3 +17,4 @@ u1db  oauth  couchdb  sh +pygeoip diff --git a/src/leap/baseapp/eip.py b/src/leap/baseapp/eip.py index 03a1d6c7..4c1fb32d 100644 --- a/src/leap/baseapp/eip.py +++ b/src/leap/baseapp/eip.py @@ -10,6 +10,7 @@ from leap.baseapp import constants  from leap.eip import exceptions as eip_exceptions  from leap.eip.eipconnection import EIPConnection  from leap.base.checks import EVENT_CONNECT_REFUSED +from leap.util import geo  logger = logging.getLogger(name=__name__) @@ -175,6 +176,8 @@ class EIPConductorAppMixin(object):              self.status_label.setText(con_status)              self.ip_label.setText(ip)              self.remote_label.setText(remote) +            self.remote_country.setText( +                geo.get_country_name(remote))          # status i/o diff --git a/src/leap/baseapp/log.py b/src/leap/baseapp/log.py index e6a767fb..636e5bae 100644 --- a/src/leap/baseapp/log.py +++ b/src/leap/baseapp/log.py @@ -38,6 +38,7 @@ class LogPaneMixin(object):          self.status_label = QtGui.QLabel(self.tr('Disconnected'))          self.ip_label = QtGui.QLabel('')          self.remote_label = QtGui.QLabel('') +        self.remote_country = QtGui.QLabel('')          tun_read_label = QtGui.QLabel("tun read")          self.tun_read_bytes = QtGui.QLabel("0") @@ -48,10 +49,11 @@ class LogPaneMixin(object):          grid.addWidget(self.status_label, 0, 1)          grid.addWidget(self.ip_label, 1, 0)          grid.addWidget(self.remote_label, 1, 1) -        grid.addWidget(tun_read_label, 2, 0) -        grid.addWidget(self.tun_read_bytes, 2, 1) -        grid.addWidget(tun_write_label, 3, 0) -        grid.addWidget(self.tun_write_bytes, 3, 1) +        grid.addWidget(self.remote_country, 2, 1) +        grid.addWidget(tun_read_label, 3, 0) +        grid.addWidget(self.tun_read_bytes, 3, 1) +        grid.addWidget(tun_write_label, 4, 0) +        grid.addWidget(self.tun_write_bytes, 4, 1)          self.statusBox.setLayout(grid) diff --git a/src/leap/util/__init__.py b/src/leap/util/__init__.py index e69de29b..a70a9a8b 100644 --- a/src/leap/util/__init__.py +++ b/src/leap/util/__init__.py @@ -0,0 +1,9 @@ +import logging +logger = logging.getLogger(__name__) + +try: +    import pygeoip +    HAS_GEOIP = True +except ImportError: +    logger.debug('PyGeoIP not found. Disabled Geo support.') +    HAS_GEOIP = False diff --git a/src/leap/util/geo.py b/src/leap/util/geo.py new file mode 100644 index 00000000..54b29596 --- /dev/null +++ b/src/leap/util/geo.py @@ -0,0 +1,32 @@ +""" +experimental geo support. +not yet a feature. +in debian, we rely on the (optional) geoip-database +""" +import os +import platform + +from leap.util import HAS_GEOIP + +GEOIP = None + +if HAS_GEOIP: +    import pygeoip  # we know we can :) + +    GEOIP_PATH = None + +    if platform.system() == "Linux": +        PATH = "/usr/share/GeoIP/GeoIP.dat" +        if os.path.isfile(PATH): +            GEOIP_PATH = PATH +        GEOIP = pygeoip.GeoIP(GEOIP_PATH, pygeoip.MEMORY_CACHE) + + +def get_country_name(ip): +    if not GEOIP: +        return +    try: +        country = GEOIP.country_name_by_addr(ip) +    except pygeoip.GeoIPError: +        country = None +    return country if country else "-" | 
