diff options
Diffstat (limited to 'src/leap/base/config.py')
-rw-r--r-- | src/leap/base/config.py | 71 |
1 files changed, 67 insertions, 4 deletions
diff --git a/src/leap/base/config.py b/src/leap/base/config.py index 9493d511..dbd2e2c0 100644 --- a/src/leap/base/config.py +++ b/src/leap/base/config.py @@ -167,6 +167,7 @@ def get_config_json(config_file=None): @rtype: dictionary """ if not config_file: + #TODO: NOT SURE WHAT this default should be, if anything fpath = get_config_file('eip.json') if not os.path.isfile(fpath): dpath, cfile = os.path.split(fpath) @@ -174,11 +175,11 @@ def get_config_json(config_file=None): mkdir_p(dpath) with open(fpath, 'wb') as configfile: configfile.flush() - config_file = open(fpath) + return json.load(open(fpath)) - config = json.load(config_file) - - return config + else: + #TODO: add validity checks of file + return json.load(open(config_file)) def get_definition_file(url=None): @@ -187,3 +188,65 @@ def get_definition_file(url=None): #TODO: determine good default location of definition file. r = requests.get(url) return r.json + + +def is_internet_up(): + """TODO: Build more robust network diagnosis capabilities + """ + try: + requests.get('http://128.30.52.45', timeout=1) + return True + except requests.Timeout: # as err: + pass + return False + +# +# XXX merge conflict +# tests are still using this deprecated Configuration object. +# moving it here transiently until I clean merge commit. +# -- kali 2012-08-24 00:32 +# + + +class Configuration(object): + """ + All configurations (providers et al) will be managed in this class. + """ + def __init__(self, provider_url=None): + try: + self.providers = {} + self.error = False + provider_file = self.check_and_get_definition_file(provider_url) + self.providers['default'] = get_config_json(provider_file) + except (requests.HTTPError, requests.RequestException) as e: + self.error = e.message + except requests.ConnectionError as e: + if e.message == "[Errno 113] No route to host": + if not is_internet_up: + self.error = "No valid internet connection found" + else: + self.error = "Provider server appears currently down." + + def check_and_get_definition_file(self, provider_url): + """ + checks if provider definition.json file is present. + if not downloads one from the web. + """ + default_provider_path = get_default_provider_path() + + if not os.path.isdir(default_provider_path): + mkdir_p(default_provider_path) + + definition_file = get_config_file( + 'definition.json', + folder=default_provider_path) + + if os.path.isfile(definition_file): + return + + else: + r = requests.get(provider_url) + r.raise_for_status() + with open(definition_file, 'wb') as f: + f.write(json.dumps(r.json, indent=4)) + return definition_file |