summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkali <kali@leap.se>2012-08-02 02:21:45 +0900
committerkali <kali@leap.se>2012-08-02 02:21:45 +0900
commit23502b72f8cd8a9ec2fd28387f7788aeef54c2d1 (patch)
tree27edd4a91505d7c5e68e694a2cada5da7d0eb8da
parent6e197c1353c788109df07ee6d1242a5c2327e8f9 (diff)
create config file if not exist.
also locate openvpn binary when building eip configparser defaults. implement half of feature #356
-rw-r--r--src/leap/baseapp/config.py40
-rw-r--r--src/leap/eip/conductor.py14
-rw-r--r--src/leap/eip/config.py72
-rw-r--r--src/leap/util/fileutil.py14
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 efdb472..0000000
--- 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 3ce062a..1d5e4b5 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 0000000..d8ffeb2
--- /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 86a44a8..bb2c243 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