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)