Skip to content
Snippets Groups Projects
Forked from DM / dm-docs
261 commits behind, 582 commits ahead of the upstream repository.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
authSessionControllerImpl.py 2.04 KiB
#!/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):
        user = self.userDbApi.getUserWithPasswordByUsername(username)
        principal = AuthorizationPrincipal(name=username, token=user.get('password'))
        principal.setRole(dmRole.DM_USER_ROLE)
        principal.setUserInfo(user)
        for userSystemRoleName in user.get('userSystemRoleNameList', []):
            if userSystemRoleName == dmRole.DM_ADMIN_ROLE:
                principal.setRole(dmRole.DM_ADMIN_ROLE)
        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)