From f791a83ce57cef7010da819d61e7f5132fa4611e Mon Sep 17 00:00:00 2001 From: kali Date: Sat, 20 Oct 2012 06:30:16 +0900 Subject: connecting page and changes to functions having to do with the default path to certs. --- src/leap/base/config.py | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src/leap/base/config.py') diff --git a/src/leap/base/config.py b/src/leap/base/config.py index cf01d1aa..9ce2e9f0 100644 --- a/src/leap/base/config.py +++ b/src/leap/base/config.py @@ -252,6 +252,15 @@ def get_default_provider_path(): return default_provider_path +def get_provider_path(domain): + # XXX if not domain, return get_default_provider_path + default_subpath = os.path.join("providers", domain) + provider_path = get_config_file( + '', + folder=default_subpath) + return provider_path + + def validate_ip(ip_str): """ raises exception if the ip_str is -- cgit v1.2.3 From d2dcf5a1060d60c451570349a6a06ad102d6924c Mon Sep 17 00:00:00 2001 From: kali Date: Tue, 13 Nov 2012 21:54:04 +0900 Subject: fix missing provider parameter in leapconfig objects chain --- src/leap/base/config.py | 1 + 1 file changed, 1 insertion(+) (limited to 'src/leap/base/config.py') diff --git a/src/leap/base/config.py b/src/leap/base/config.py index 9ce2e9f0..0255fbab 100644 --- a/src/leap/base/config.py +++ b/src/leap/base/config.py @@ -118,6 +118,7 @@ class JSONLeapConfig(BaseLeapConfig): " derived class") assert issubclass(self.spec, PluggableConfig) + self.domain = kwargs.pop('domain', None) self._config = self.spec(format="json") self._config.load() self.fetcher = kwargs.pop('fetcher', requests) -- cgit v1.2.3 From 18be85f13abc6bc94a3725950ec16ad1adec0ab8 Mon Sep 17 00:00:00 2001 From: kali Date: Tue, 11 Dec 2012 01:40:05 +0900 Subject: fetch only if not changed-since config file timestamp Changing this now to be able to test different providers by just updating our local config file. --- src/leap/base/config.py | 75 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 57 insertions(+), 18 deletions(-) (limited to 'src/leap/base/config.py') diff --git a/src/leap/base/config.py b/src/leap/base/config.py index 0255fbab..321fbdcd 100644 --- a/src/leap/base/config.py +++ b/src/leap/base/config.py @@ -5,11 +5,12 @@ import grp import json import logging import socket -import tempfile +import time import os logger = logging.getLogger(name=__name__) +from dateutil import parser as dateparser import requests from leap.base import exceptions @@ -126,16 +127,23 @@ class JSONLeapConfig(BaseLeapConfig): # mandatory baseconfig interface def save(self, to=None): - if to is None: - to = self.filename - folder, filename = os.path.split(to) - if folder and not os.path.isdir(folder): - mkdir_p(folder) - self._config.serialize(to) - - def load(self, fromfile=None, from_uri=None, fetcher=None, verify=False): + if self._config.is_dirty(): + if to is None: + to = self.filename + folder, filename = os.path.split(to) + if folder and not os.path.isdir(folder): + mkdir_p(folder) + self._config.serialize(to) + + def load(self, fromfile=None, from_uri=None, fetcher=None, + force_download=False, verify=False): + if from_uri is not None: - fetched = self.fetch(from_uri, fetcher=fetcher, verify=verify) + fetched = self.fetch( + from_uri, + fetcher=fetcher, + verify=verify, + force_dl=force_download) if fetched: return if fromfile is None: @@ -146,33 +154,64 @@ class JSONLeapConfig(BaseLeapConfig): logger.error('tried to load config from non-existent path') logger.error('Not Found: %s', fromfile) - def fetch(self, uri, fetcher=None, verify=True): + def fetch(self, uri, fetcher=None, verify=True, force_dl=False): if not fetcher: fetcher = self.fetcher + logger.debug('verify: %s', verify) logger.debug('uri: %s', uri) - request = fetcher.get(uri, verify=verify) - # XXX should send a if-modified-since header - # XXX get 404, ... - # and raise a UnableToFetch... + rargs = (uri, ) + rkwargs = {'verify': verify} + headers = {} + + curmtime = self.get_mtime() if not force_dl else None + if curmtime: + logger.debug('requesting with if-modified-since %s' % curmtime) + headers['if-modified-since'] = curmtime + rkwargs['headers'] = headers + + #request = fetcher.get(uri, verify=verify) + request = fetcher.get(*rargs, **rkwargs) request.raise_for_status() - fd, fname = tempfile.mkstemp(suffix=".json") - if request.json: - self._config.load(json.dumps(request.json)) + if request.status_code == 304: + logger.debug('...304 Not Changed') + # On this point, we have to assume that + # we HAD the filename. If that filename is corruct, + # we should enforce a force_download in the load + # method above. + self._config.load(fromfile=self.filename) + return True + if request.json: + mtime = None + last_modified = request.headers.get('last-modified', None) + if last_modified: + _mtime = dateparser.parse(last_modified) + mtime = int(_mtime.strftime("%s")) + self._config.load(json.dumps(request.json), mtime=mtime) + self._config.set_dirty() else: # not request.json # might be server did not announce content properly, # let's try deserializing all the same. try: self._config.load(request.content) + self._config.set_dirty() except ValueError: raise eipexceptions.LeapBadConfigFetchedError return True + def get_mtime(self): + try: + _mtime = os.stat(self.filename)[8] + mtime = time.strftime("%c GMT", time.gmtime(_mtime)) + return mtime + except OSError: + return None + def get_config(self): return self._config.config -- cgit v1.2.3 From 04d423e2a89034dfb86fe305108162fd2a696079 Mon Sep 17 00:00:00 2001 From: kali Date: Wed, 12 Dec 2012 03:29:31 +0900 Subject: tests for openvpn options and make the rest of tests pass after some changes in this branch (dirtyness in config files) --- src/leap/base/config.py | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) (limited to 'src/leap/base/config.py') diff --git a/src/leap/base/config.py b/src/leap/base/config.py index 321fbdcd..b307ad05 100644 --- a/src/leap/base/config.py +++ b/src/leap/base/config.py @@ -126,14 +126,33 @@ class JSONLeapConfig(BaseLeapConfig): # mandatory baseconfig interface - def save(self, to=None): - if self._config.is_dirty(): + def save(self, to=None, force=False): + """ + force param will skip the dirty check. + :type force: bool + """ + # XXX this force=True does not feel to right + # but still have to look for a better way + # of dealing with dirtiness and the + # trick of loading remote config only + # when newer. + + if force: + do_save = True + else: + do_save = self._config.is_dirty() + + if do_save: if to is None: to = self.filename folder, filename = os.path.split(to) if folder and not os.path.isdir(folder): mkdir_p(folder) self._config.serialize(to) + return True + + else: + return False def load(self, fromfile=None, from_uri=None, fetcher=None, force_download=False, verify=False): -- cgit v1.2.3 From ef3e6f7badf4d477e796f8522b4d79b554f18f93 Mon Sep 17 00:00:00 2001 From: kali Date: Tue, 18 Dec 2012 06:09:57 +0900 Subject: back-compat fix for requests api change --- src/leap/base/config.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/leap/base/config.py') diff --git a/src/leap/base/config.py b/src/leap/base/config.py index b307ad05..438d1993 100644 --- a/src/leap/base/config.py +++ b/src/leap/base/config.py @@ -209,7 +209,12 @@ class JSONLeapConfig(BaseLeapConfig): if last_modified: _mtime = dateparser.parse(last_modified) mtime = int(_mtime.strftime("%s")) - self._config.load(json.dumps(request.json), mtime=mtime) + if callable(request.json): + _json = request.json() + else: + # back-compat + _json = request.json + self._config.load(json.dumps(_json), mtime=mtime) self._config.set_dirty() else: # not request.json -- cgit v1.2.3 From 6d85c97ddcc8a151b157919e9a7322fba151a551 Mon Sep 17 00:00:00 2001 From: kali Date: Fri, 11 Jan 2013 03:00:41 +0900 Subject: all calls except the first one are made to api uri we also parse the port number --- src/leap/base/config.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'src/leap/base/config.py') diff --git a/src/leap/base/config.py b/src/leap/base/config.py index 438d1993..e235e5c3 100644 --- a/src/leap/base/config.py +++ b/src/leap/base/config.py @@ -155,7 +155,7 @@ class JSONLeapConfig(BaseLeapConfig): return False def load(self, fromfile=None, from_uri=None, fetcher=None, - force_download=False, verify=False): + force_download=False, verify=True): if from_uri is not None: fetched = self.fetch( @@ -177,8 +177,7 @@ class JSONLeapConfig(BaseLeapConfig): if not fetcher: fetcher = self.fetcher - logger.debug('verify: %s', verify) - logger.debug('uri: %s', uri) + logger.debug('uri: %s (verify: %s)' % (uri, verify)) rargs = (uri, ) rkwargs = {'verify': verify} -- cgit v1.2.3 From d02402a147bbae945618befdb8a1a260a91ce7a6 Mon Sep 17 00:00:00 2001 From: antialias Date: Thu, 24 Jan 2013 11:39:21 -0500 Subject: changed get_username to work on buildslaves --- src/leap/base/config.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'src/leap/base/config.py') diff --git a/src/leap/base/config.py b/src/leap/base/config.py index e235e5c3..7021cb0f 100644 --- a/src/leap/base/config.py +++ b/src/leap/base/config.py @@ -333,7 +333,14 @@ def validate_ip(ip_str): def get_username(): - return os.getlogin() + try: + return os.getlogin() + except OSError as e: + if e.message == "[Errno 22] Invalid argument": + import pwd + return pwd.getpwuid(os.getuid())[0] + else: + raise OSError(e.message) def get_groupname(): -- cgit v1.2.3 From 3b45b4de1183b6fd2657aef493a89e1f501e41d1 Mon Sep 17 00:00:00 2001 From: antialias Date: Thu, 24 Jan 2013 11:52:10 -0500 Subject: refine get_username to work on buildslaves --- src/leap/base/config.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'src/leap/base/config.py') diff --git a/src/leap/base/config.py b/src/leap/base/config.py index 7021cb0f..9583a46a 100644 --- a/src/leap/base/config.py +++ b/src/leap/base/config.py @@ -336,11 +336,8 @@ def get_username(): try: return os.getlogin() except OSError as e: - if e.message == "[Errno 22] Invalid argument": - import pwd - return pwd.getpwuid(os.getuid())[0] - else: - raise OSError(e.message) + import pwd + return pwd.getpwuid(os.getuid())[0] def get_groupname(): -- cgit v1.2.3 From ea00bc02d9722a670067667df752921d2c824389 Mon Sep 17 00:00:00 2001 From: kali Date: Fri, 25 Jan 2013 07:00:10 +0900 Subject: use dirspec --- src/leap/base/config.py | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) (limited to 'src/leap/base/config.py') diff --git a/src/leap/base/config.py b/src/leap/base/config.py index 9583a46a..6d43a895 100644 --- a/src/leap/base/config.py +++ b/src/leap/base/config.py @@ -11,6 +11,7 @@ import os logger = logging.getLogger(name=__name__) from dateutil import parser as dateparser +import dirspec import requests from leap.base import exceptions @@ -279,15 +280,8 @@ def get_config_dir(): @rparam: config path @rtype: string """ - # TODO - # check for $XDG_CONFIG_HOME var? - # get a more sensible path for win/mac - # kclair: opinion? ^^ - - return os.path.expanduser( - os.path.join('~', - '.config', - 'leap')) + return os.path.join(dirspec.basedir.default_config_home, + 'leap') def get_config_file(filename, folder=None): -- cgit v1.2.3 From a1d880f201c914777daa8f416d5c25ab03e5b05d Mon Sep 17 00:00:00 2001 From: kali Date: Fri, 25 Jan 2013 07:20:43 +0900 Subject: use dirspec for cross-platform friendly directories --- src/leap/base/config.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'src/leap/base/config.py') diff --git a/src/leap/base/config.py b/src/leap/base/config.py index 6d43a895..e2f0beba 100644 --- a/src/leap/base/config.py +++ b/src/leap/base/config.py @@ -4,6 +4,7 @@ Configuration Base Class import grp import json import logging +import re import socket import time import os @@ -11,7 +12,7 @@ import os logger = logging.getLogger(name=__name__) from dateutil import parser as dateparser -import dirspec +from dirspec import basedir import requests from leap.base import exceptions @@ -280,7 +281,12 @@ def get_config_dir(): @rparam: config path @rtype: string """ - return os.path.join(dirspec.basedir.default_config_home, + home = os.path.expanduser("~") + if re.findall("leap_tests-[a-zA-Z0-9]{6}", home): + # we're inside a test! :) + return os.path.join(home, ".config/leap") + else: + return os.path.join(basedir.default_config_home, 'leap') -- cgit v1.2.3 From e33c500ad3006670158493f2a12afc015610894d Mon Sep 17 00:00:00 2001 From: kali Date: Mon, 28 Jan 2013 04:48:21 +0900 Subject: change dirspec dep by pyxdg --- src/leap/base/config.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src/leap/base/config.py') diff --git a/src/leap/base/config.py b/src/leap/base/config.py index e2f0beba..6a13db7d 100644 --- a/src/leap/base/config.py +++ b/src/leap/base/config.py @@ -12,7 +12,7 @@ import os logger = logging.getLogger(name=__name__) from dateutil import parser as dateparser -from dirspec import basedir +from xdg import BaseDirectory import requests from leap.base import exceptions @@ -286,7 +286,10 @@ def get_config_dir(): # we're inside a test! :) return os.path.join(home, ".config/leap") else: - return os.path.join(basedir.default_config_home, + # XXX dirspec is cross-platform, + # we should borrow some of those + # routines for osx/win and wrap this call. + return os.path.join(BaseDirectory.xdg_config_home, 'leap') -- cgit v1.2.3