#!/usr/bin/env python # # Implementation for user info controller. # import datetime import cherrypy from dm.common.constants import dmRole from dm.common.objects.authorizationPrincipal import AuthorizationPrincipal from dm.common.objects.dmObjectManager import DmObjectManager from dm.common.objects.dmSession import DmSession from dm.common.db.api.userDbApi import UserDbApi from dm.common.exceptions.objectNotFound import ObjectNotFound class AuthSessionControllerImpl(DmObjectManager): """ User info controller implementation class. """ def __init__(self): DmObjectManager.__init__(self) self.userDbApi = UserDbApi() def getAuthorizationPrincipal(self, username): principal = None try: user = self.userDbApi.getUserWithPasswordByUsername(username) principal = AuthorizationPrincipal(name=username, token=user.get('password')) principal.setUserSystemRoleDict(user.get('userSystemRoleDict', {})) principal.setUserExperimentRoleDict(user.get('userExperimentRoleDict', {})) principal.setSessionRole(dmRole.DM_USER_SESSION_ROLE) for userSystemRoleId in principal.get('userSystemRoleDict', {}).keys(): if userSystemRoleId == dmRole.DM_ADMIN_SYSTEM_ROLE_ID: principal.setSessionRole(dmRole.DM_ADMIN_SESSION_ROLE) break except Exception, ex: self.logger.debug(ex) return principal def addSession(self, sessionId, sessionInfo): sessionCache = cherrypy.session.cache self.logger.debug('Session cache length: %s' % (len(sessionCache))) sessionCache[sessionId] = (sessionInfo, datetime.datetime.now()) self.logger.debug('Session cache: %s' % (sessionCache)) return DmSession(sessionInfo) def checkSession(self, sessionId): sessionCache = cherrypy.session.cache sessionTuple = sessionCache.get(sessionId) if not sessionTuple: raise ObjectNotFound('Session %s not found in cache.' % sessionId) sessionInfo = sessionTuple[0] oldTimestamp = sessionTuple[1] newTimestamp = datetime.datetime.now() self.logger.debug('Updated timestamp from %s to %s for session id %s' % (oldTimestamp, newTimestamp, sessionId)) sessionCache[sessionId] = (sessionInfo, newTimestamp) return DmSession(sessionInfo)