diff options
author | Tomás Touceda <chiiph@leap.se> | 2013-08-06 17:20:54 -0300 |
---|---|---|
committer | Tomás Touceda <chiiph@leap.se> | 2013-08-06 17:20:54 -0300 |
commit | 8f57fbc04d2fa224a5a3fb4560da7ef9b91c202c (patch) | |
tree | 02dce93d0072287e01cb73d6d4fce1680c68be94 /src/leap/services | |
parent | d6bf9b3e11ff87488a5f508acebf8f20ad026166 (diff) | |
parent | d5ea34c797e56b05fc54a186cf6c998e036f4ed0 (diff) |
Merge remote-tracking branch 'ivan/feature/3310_add-support-for-multiple-schemas' into develop
Diffstat (limited to 'src/leap/services')
-rw-r--r-- | src/leap/services/eip/eipbootstrapper.py | 4 | ||||
-rw-r--r-- | src/leap/services/eip/eipconfig.py | 21 | ||||
-rw-r--r-- | src/leap/services/eip/eipspec.py | 22 | ||||
-rw-r--r-- | src/leap/services/eip/tests/test_eipconfig.py | 17 | ||||
-rw-r--r-- | src/leap/services/eip/vpnlaunchers.py | 1 |
5 files changed, 57 insertions, 8 deletions
diff --git a/src/leap/services/eip/eipbootstrapper.py b/src/leap/services/eip/eipbootstrapper.py index 60270b5b..1d7bc342 100644 --- a/src/leap/services/eip/eipbootstrapper.py +++ b/src/leap/services/eip/eipbootstrapper.py @@ -67,7 +67,9 @@ class EIPBootstrapper(AbstractBootstrapper): logger.debug("Downloading EIP config for %s" % (self._provider_config.get_domain(),)) + api_version = self._provider_config.get_api_version() self._eip_config = EIPConfig() + self._eip_config.set_api_version(api_version) headers = {} mtime = get_mtime(os.path.join(self._eip_config @@ -84,7 +86,7 @@ class EIPBootstrapper(AbstractBootstrapper): # it's in 1/config/eip, config/eip and config/1/eip... config_uri = "%s/%s/config/eip-service.json" % ( self._provider_config.get_api_uri(), - self._provider_config.get_api_version()) + api_version) logger.debug('Downloading eip config from: %s' % config_uri) res = self._session.get(config_uri, diff --git a/src/leap/services/eip/eipconfig.py b/src/leap/services/eip/eipconfig.py index 9e3a9b29..2f2f6e7c 100644 --- a/src/leap/services/eip/eipconfig.py +++ b/src/leap/services/eip/eipconfig.py @@ -28,7 +28,7 @@ import ipaddr from leap.common.check import leap_assert, leap_assert_type from leap.common.config.baseconfig import BaseConfig from leap.config.providerconfig import ProviderConfig -from leap.services.eip.eipspec import eipservice_config_spec +from leap.services.eip.eipspec import get_schema logger = logging.getLogger(__name__) @@ -136,12 +136,27 @@ class EIPConfig(BaseConfig): def __init__(self): BaseConfig.__init__(self) + self._api_version = None def _get_spec(self): """ Returns the spec object for the specific configuration """ - return eipservice_config_spec + leap_assert(self._api_version is not None, + "You should set the API version.") + + return get_schema(self._api_version) + + def set_api_version(self, version): + """ + Sets the supported api version. + + :param api_version: the version of the api supported by the provider. + :type api_version: str + """ + self._api_version = version + leap_assert(get_schema(self._api_version) is not None, + "Version %s is not supported." % (version, )) def get_clusters(self): # TODO: create an abstraction for clusters @@ -243,7 +258,7 @@ if __name__ == "__main__": console.setFormatter(formatter) logger.addHandler(console) - eipconfig = EIPConfig() + eipconfig = EIPConfig('1') try: eipconfig.get_clusters() diff --git a/src/leap/services/eip/eipspec.py b/src/leap/services/eip/eipspec.py index 94ba674f..9cc56be3 100644 --- a/src/leap/services/eip/eipspec.py +++ b/src/leap/services/eip/eipspec.py @@ -15,7 +15,15 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. -eipservice_config_spec = { + +# Schemas dict +# To add a schema for a version you should follow the form: +# { '1': schema_v1, '2': schema_v2, ... etc } +# so for instance, to add the '2' version, you should do: +# eipservice_config_spec['2'] = schema_v2 +eipservice_config_spec = {} + +eipservice_config_spec['1'] = { 'description': 'sample eip service config', 'type': 'object', 'properties': { @@ -63,3 +71,15 @@ eipservice_config_spec = { } } } + + +def get_schema(version): + """ + Returns the schema corresponding to the version given. + + :param version: the version of the schema to get. + :type version: str + :rtype: dict or None if the version is not supported. + """ + schema = eipservice_config_spec.get(version, None) + return schema diff --git a/src/leap/services/eip/tests/test_eipconfig.py b/src/leap/services/eip/tests/test_eipconfig.py index 8b746b78..87ce04c2 100644 --- a/src/leap/services/eip/tests/test_eipconfig.py +++ b/src/leap/services/eip/tests/test_eipconfig.py @@ -117,18 +117,21 @@ class EIPConfigTest(BaseLeapTest): conf.write(json.dumps(data)) conf.close() - def _get_eipconfig(self, fromfile=True, data=sample_config): + def _get_eipconfig(self, fromfile=True, data=sample_config, api_ver='1'): """ Helper that returns an EIPConfig object using the data parameter or a sample data. :param fromfile: sets if we should use a file or a string - :fromfile type: bool + :type fromfile: bool :param data: sets the data to be used to load in the EIPConfig object - :data type: dict (valid json) + :type data: dict (valid json) + :param api_ver: the api_version schema to use. + :type api_ver: str :rtype: EIPConfig """ config = EIPConfig() + config.set_api_version(api_ver) loaded = False if fromfile: @@ -308,6 +311,14 @@ class EIPConfigTest(BaseLeapTest): with self.assertRaises(AssertionError): config.get_client_cert_path(provider_config) + def test_fails_without_api_set(self): + config = EIPConfig() + with self.assertRaises(AssertionError): + config.load('non-relevant-path') + + def test_fails_with_api_without_schema(self): + with self.assertRaises(AssertionError): + self._get_eipconfig(api_ver='123') if __name__ == "__main__": unittest.main() diff --git a/src/leap/services/eip/vpnlaunchers.py b/src/leap/services/eip/vpnlaunchers.py index 0151c1c6..526f1ba4 100644 --- a/src/leap/services/eip/vpnlaunchers.py +++ b/src/leap/services/eip/vpnlaunchers.py @@ -903,6 +903,7 @@ if __name__ == "__main__": vpnlauncher = get_platform_launcher() eipconfig = EIPConfig() + eipconfig.set_api_version('1') if eipconfig.load("leap/providers/bitmask.net/eip-service.json"): provider = ProviderConfig() if provider.load("leap/providers/bitmask.net/provider.json"): |