X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=rwcal%2Fplugins%2Fvala%2Frwcal_openstack%2Frift%2Frwcal%2Fopenstack%2Fsession%2Fauth_drv.py;fp=rwcal%2Fplugins%2Fvala%2Frwcal_openstack%2Frift%2Frwcal%2Fopenstack%2Fsession%2Fauth_drv.py;h=3c72588fa42631adaeb3993f2658cc2646c83047;hb=eb223959413d75048f484c1978af10d6b551f19c;hp=0000000000000000000000000000000000000000;hpb=c148feb9a12330f67e4093e4848506106961b737;p=osm%2FSO.git diff --git a/rwcal/plugins/vala/rwcal_openstack/rift/rwcal/openstack/session/auth_drv.py b/rwcal/plugins/vala/rwcal_openstack/rift/rwcal/openstack/session/auth_drv.py new file mode 100644 index 00000000..3c72588f --- /dev/null +++ b/rwcal/plugins/vala/rwcal_openstack/rift/rwcal/openstack/session/auth_drv.py @@ -0,0 +1,141 @@ +#!/usr/bin/python + +# +# Copyright 2017 RIFT.IO Inc +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +from keystoneauth1.identity import v3 +from keystoneauth1.identity import v2 +import logging + + +class TokenDriver(object): + """ + Class for token based authentication for openstack. + + This is just placeholder for now + """ + def __init__(self, version, logger=None, **kwargs): + """ + Constructor for class + """ + if logger is None: + self.log = logging.getLogger('rwcal.openstack.keystone.token') + self.log.setLevel(logging.DEBUG) + else: + self.log = logger + + + @property + def auth_handle(self): + return None + +class PasswordDriver(object): + """ + Class for password based authentication for openstack + """ + def __init__(self, version, logger=None, **kwargs): + """ + Constructor for class + Arguments: + version (str): Keystone API version to use + logger (instance of logging.Logger) + A dictionary of following key-value pairs + { + auth_url (string) : Keystone Auth URL + username (string) : Username for authentication + password (string) : Password for authentication + project_name (string) : Name of the project or tenant + project_domain_name (string) : Name of the project domain + user_domain_name (string) : Name of the user domain + logger (instance of logging.Logger) + } + Returns: + None + """ + if logger is None: + self.log = logging.getLogger('rwcal.openstack.keystone.password') + self.log.setLevel(logging.DEBUG) + else: + self.log = logger + + self.log = logger + version = int(float(version)) + + if version == 3: + self.log.info("Using keystone version 3 for authentication at URL: %s", kwargs['auth_url']) + self._auth = v3.Password(auth_url = kwargs['auth_url'], + username = kwargs['username'], + password = kwargs['password'], + project_name = kwargs['project_name'], + project_domain_name = kwargs['project_domain_name'], + user_domain_name = kwargs['user_domain_name']) + elif version == 2: + self.log.info("Using keystone version 2 for authentication at URL: %s", kwargs['auth_url']) + self._auth = v2.Password(auth_url = kwargs['auth_url'], + username = kwargs['username'], + password = kwargs['password'], + tenant_name = kwargs['project_name']) + @property + def auth_handle(self): + return self._auth + + +class AuthDriver(object): + """ + Driver class for handling authentication plugins for openstack + """ + AuthMethod = dict( + password=PasswordDriver, + token=TokenDriver, + ) + def __init__(self, auth_type, version, logger = None, **kwargs): + """ + auth_type (string): At this point, only "password" based + authentication is supported. + version (string): Keystone API version + logger (instance of logging.Logger) + + kwargs a dictionary of following key/value pairs + { + username (string) : Username + password (string) : Password + auth_url (string) : Authentication URL + tenant_name(string): Tenant Name + user_domain_name (string) : User domain name + project_domain_name (string): Project domain name + region (string) : Region name + } + """ + if logger is None: + self.log = logging.getLogger('rwcal.openstack.auth') + self.log.setLevel(logging.DEBUG) + else: + self.log = logger + + + self.log.info("Using %s authentication method", auth_type) + if auth_type not in AuthDriver.AuthMethod: + self.log.error("Unsupported authentication method %s", auth_type) + raise KeyError("Unsupported authentication method %s", auth_type) + else: + self._auth_method = AuthDriver.AuthMethod[auth_type](version, self.log, **kwargs) + + @property + def auth_handle(self): + return self._auth_method.auth_handle + + + +