import logging from uuid import UUID from flask_login import current_user from auth.validateresult import AuthKind, ValidateResult logger = logging.getLogger(__name__) def validate_session_cookie(auth_header_unusued=None): """ Attempts to load a user from a session cookie. """ if current_user.is_anonymous: return ValidateResult(AuthKind.cookie, missing=True) try: # Attempt to parse the user uuid to make sure the cookie has the right value type UUID(current_user.get_id()) except ValueError: logger.debug('Got non-UUID for session cookie user: %s', current_user.get_id()) return ValidateResult(AuthKind.cookie, error_message='Invalid session cookie format') logger.debug('Loading user from cookie: %s', current_user.get_id()) db_user = current_user.db_user() if db_user is None: return ValidateResult(AuthKind.cookie, error_message='Could not find matching user') # Don't allow disabled users to login. if not db_user.enabled: logger.debug('User %s in session cookie is disabled', db_user.username) return ValidateResult(AuthKind.cookie, error_message='User account is disabled') # Don't allow organizations to "login". if db_user.organization: logger.debug('User %s in session cookie is in-fact organization', db_user.username) return ValidateResult(AuthKind.cookie, error_message='Cannot login to organization') return ValidateResult(AuthKind.cookie, user=db_user)