CAL refactoring
[osm/SO.git] / rwcal / plugins / vala / rwcal_openstack / rift / rwcal / openstack / session / auth_drv.py
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 (file)
index 0000000..3c72588
--- /dev/null
@@ -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
+        
+                                               
+        
+