diff options
| -rw-r--r-- | src/leap/baseapp/config.py | 40 | ||||
| -rw-r--r-- | src/leap/eip/conductor.py | 14 | ||||
| -rw-r--r-- | src/leap/eip/config.py | 72 | ||||
| -rw-r--r-- | src/leap/util/fileutil.py | 14 | 
4 files changed, 97 insertions, 43 deletions
| diff --git a/src/leap/baseapp/config.py b/src/leap/baseapp/config.py deleted file mode 100644 index efdb4726..00000000 --- a/src/leap/baseapp/config.py +++ /dev/null @@ -1,40 +0,0 @@ -import ConfigParser -import os - - -def get_config(config_file=None): -    """ -    temporary method for getting configs, -    mainly for early stage development process. -    in the future we will get preferences -    from the storage api -    """ -    config = ConfigParser.ConfigParser() -    #config.readfp(open('defaults.cfg')) -    #XXX does this work on win / mac also??? -    conf_path_list = ['eip.cfg',  # XXX build a -                      # proper path with platform-specific places -                      # XXX make .config/foo -                      os.path.expanduser('~/.eip.cfg')] -    if config_file: -        config.readfp(config_file) -    else: -        config.read(conf_path_list) -    return config - - -# XXX wrapper around config? to get default values - -def get_with_defaults(config, section, option): -    if config.has_option(section, option): -        return config.get(section, option) -    else: -        # XXX lookup in defaults dict??? -        pass - - -def get_vpn_stdout_mockup(): -    command = "python" -    args = ["-u", "-c", "from eip_client import fakeclient;\ -fakeclient.write_output()"] -    return command, args diff --git a/src/leap/eip/conductor.py b/src/leap/eip/conductor.py index 3ce062aa..1d5e4b59 100644 --- a/src/leap/eip/conductor.py +++ b/src/leap/eip/conductor.py @@ -7,7 +7,8 @@ from functools import partial  import logging  from leap.util.coroutines import spawn_and_watch_process -from leap.baseapp.config import get_config, get_vpn_stdout_mockup + +from leap.eip.config import get_config, get_vpn_stdout_mockup  from leap.eip.vpnwatcher import EIPConnectionStatus, status_watcher  from leap.eip.vpnmanager import OpenVPNManager, ConnectionRefusedError @@ -39,6 +40,10 @@ class UnrecoverableError(EIPClientError):      """      we cannot do anything about it, sorry      """ +    # XXX we should catch this and raise +    # to qtland, so we emit signal +    # to translate whatever kind of error +    # to user-friendly msg in dialog.      pass @@ -78,7 +83,7 @@ to be triggered for each one of them.          self.autostart = True -        self._get_config() +        self._get_or_create_config()      def _set_command_mockup(self):          """ @@ -88,16 +93,19 @@ to be triggered for each one of them.          command, args = get_vpn_stdout_mockup()          self.command, self.args = command, args -    def _get_config(self): +    def _get_or_create_config(self):          """          retrieves the config options from defaults or          home file, or config file passed in command line.          """          config = get_config(config_file=self.config_file)          self.config = config +        import ipdb;ipdb.set_trace()          if config.has_option('openvpn', 'command'):              commandline = config.get('openvpn', 'command') +            #XXX remove mockup from here. +            #it was just for testing early.              if commandline == "mockup":                  self._set_command_mockup()                  return diff --git a/src/leap/eip/config.py b/src/leap/eip/config.py new file mode 100644 index 00000000..d8ffeb28 --- /dev/null +++ b/src/leap/eip/config.py @@ -0,0 +1,72 @@ +import ConfigParser +import os + +from leap.util.fileutil import which, mkdir_p + + +def get_sensible_defaults(): +    """ +    gathers a dict of sensible defaults, +    platform sensitive, +    to be used to initialize the config parser +    """ +    defaults = dict() +    defaults['openvpn_binary'] = which('openvpn') +    return defaults + + +def get_config(config_file=None): +    """ +    temporary method for getting configs, +    mainly for early stage development process. +    in the future we will get preferences +    from the storage api +    """ +    # TODO +    # - refactor out common things and get +    # them to util/ or baseapp/ + +    defaults = get_sensible_defaults() +    config = ConfigParser.ConfigParser(defaults) + +    if not config_file: +        fpath = os.path.expanduser('~/.config/leap/eip.cfg') +        if not os.path.isfile(fpath): +            dpath, cfile = os.path.split(fpath) +            if not os.path.isdir(dpath): +                mkdir_p(dpath) +            with open(fpath, 'wb') as configfile: +                config.write(configfile) +        config_file = open(fpath) + +    #TODO +    # - get a more sensible path for win/mac +    # - convert config_file to list; +    #   look in places like /etc/leap/eip.cfg +    #   for global settings. +    # - raise warnings/error if bad options. + +    try: +        config.readfp(config_file) +    except: +        # XXX no file exists? +        raise +    return config + + +# XXX wrapper around config? to get default values +def get_with_defaults(config, section, option): +    # XXX REMOVE ME +    if config.has_option(section, option): +        return config.get(section, option) +    else: +        # XXX lookup in defaults dict??? +        pass + + +def get_vpn_stdout_mockup(): +    # XXX REMOVE ME +    command = "python" +    args = ["-u", "-c", "from eip_client import fakeclient;\ +fakeclient.write_output()"] +    return command, args diff --git a/src/leap/util/fileutil.py b/src/leap/util/fileutil.py index 86a44a89..bb2c243b 100644 --- a/src/leap/util/fileutil.py +++ b/src/leap/util/fileutil.py @@ -1,3 +1,4 @@ +import errno  from itertools import chain  import os  import platform @@ -71,3 +72,16 @@ def which(program):      # sorry bro.      return None + + +def mkdir_p(path): +    """ +    implements mkdir -p functionality +    """ +    try: +        os.makedirs(path) +    except OSError as exc: +        if exc.errno == errno.EEXIST: +            pass +        else: +            raise | 
