From a5321d83d95c62b6b4b65d9e7ac43b40ab712b9c Mon Sep 17 00:00:00 2001
From: Sinisa Veseli <sveseli@aps.anl.gov>
Date: Thu, 8 Oct 2015 06:47:58 +0000
Subject: [PATCH] added first implementation of single sign-on manager

---
 .../dm/common/service/auth/sessionManager.py  | 24 +++++++
 .../service/auth/singleSignOnManager.py       | 72 +++++++++++++++++++
 2 files changed, 96 insertions(+)
 create mode 100755 src/python/dm/common/service/auth/sessionManager.py
 create mode 100755 src/python/dm/common/service/auth/singleSignOnManager.py

diff --git a/src/python/dm/common/service/auth/sessionManager.py b/src/python/dm/common/service/auth/sessionManager.py
new file mode 100755
index 00000000..d6013529
--- /dev/null
+++ b/src/python/dm/common/service/auth/sessionManager.py
@@ -0,0 +1,24 @@
+#!/usr/bin/env python
+
+from dm.common.utility.loggingManager import LoggingManager
+
+class SessionManager:
+
+    def __init__(self, name=None):
+        self.name = name
+        self.logger = LoggingManager.getInstance().getLogger(self.__class__.__name__)
+
+    def getName(self):
+        return self.name
+
+    def addSession(self, sessionId, sessionInfo):
+        return None
+
+    def checkSession(self, sessionId):
+        return None
+
+#######################################################################
+# Testing.
+if __name__ == '__main__':
+    pass
+
diff --git a/src/python/dm/common/service/auth/singleSignOnManager.py b/src/python/dm/common/service/auth/singleSignOnManager.py
new file mode 100755
index 00000000..c1bd0f2c
--- /dev/null
+++ b/src/python/dm/common/service/auth/singleSignOnManager.py
@@ -0,0 +1,72 @@
+#!/usr/bin/env python
+
+import os
+
+from dm.common.utility.configurationManager import ConfigurationManager
+from dm.common.objects.dmObjectManager import DmObjectManager
+from dm.common.utility.objectUtility import ObjectUtility
+from dm.common.utility.singleton import Singleton
+from dm.common.exceptions.objectNotFound import ObjectNotFound
+
+class SingleSignOnManager(DmObjectManager, Singleton):
+
+    DEFAULT_SESSION_TIMEOUT_IN_SECONDS = 3600 # seconds
+
+    CONFIG_SECTION_NAME = 'SingleSignOnManager'
+    SESSION_MANAGER_KEY = 'sessionManager'
+    SESSION_TIMEOUT_IN_SECONDS_KEY = 'sessionTimeoutInSeconds'
+
+    # Singleton instance.
+    __instance = None
+
+    def __init__(self):
+        if SingleSignOnManager.__instance:
+            return
+        SingleSignOnManager.__instance = self
+        DmObjectManager.__init__(self)
+        self.configurationManager = ConfigurationManager.getInstance()
+        self.sessionManager = None
+        self.configure()
+
+    def configure(self):
+        configItems = self.configurationManager.getConfigItems(SingleSignOnManager.CONFIG_SECTION_NAME)
+        self.logger.debug('Got config items: %s' % configItems)
+        if not configItems:
+            return
+        sessionTimeout = self.configurationManager.getConfigOption(SingleSignOnManager.CONFIG_SECTION_NAME, SingleSignOnManager.SESSION_TIMEOUT_IN_SECONDS_KEY, SingleSignOnManager.DEFAULT_SESSION_TIMEOUT_IN_SECONDS)
+        self.logger.debug('Session timeout: %s' % sessionTimeout)
+
+        # Create session manager
+        sessionManager = self.configurationManager.getConfigOption(SingleSignOnManager.CONFIG_SECTION_NAME, SingleSignOnManager.SESSION_MANAGER_KEY)
+        (moduleName,className,constructor) = self.configurationManager.getModuleClassConstructorTuple(sessionManager, SingleSignOnManager)    
+        self.logger.debug('Creating session manager class: %s' % className)
+        self.sessionManager = ObjectUtility.createObjectInstance(moduleName, className, constructor)
+
+    def addSession(self, sessionId, sessionInfo):
+        if self.sessionManager:
+            self.logger.debug('Adding session id %s: %s' % (sessionId,sessionInfo))
+            try:
+                return self.sessionManager.addSession(sessionId, sessionInfo)
+            except Exception, ex:
+                self.logger.error(ex)
+        return None
+
+    def checkSession(self, sessionId):
+        if self.sessionManager:
+            self.logger.debug('Checking session id: %s' % sessionId)
+            try:
+                return self.sessionManager.checkSession(sessionId)
+            except ObjectNotFound, ex:
+                self.logger.debug(ex)
+            except Exception, ex:
+                self.logger.error(ex)
+        return None
+
+#######################################################################
+# Testing.
+if __name__ == '__main__':
+    am = AuthorizationPrincipalManager.getInstance()
+    authPrincipal = am.getAuthorizationPrincipal('sveseli', 'sv')
+    print 'Auth principal: ', authPrincipal
+
+
-- 
GitLab