from cryptography.fernet import Fernet from flask import current_app as app REQUIRED_SESSION_VALUES = ['uuid', 'config', 'key'] def generate_user_key(cookies_disabled=False) -> bytes: """Generates a key for encrypting searches and element URLs Args: cookies_disabled: Flag for whether or not cookies are disabled by the user. If so, the user can only use the default key generated on app init for queries. Returns: str: A unique Fernet key """ if cookies_disabled: return app.default_key # Generate/regenerate unique key per user return Fernet.generate_key() def valid_user_session(session: dict) -> bool: """Validates the current user session Args: session: The current Flask user session Returns: bool: True/False indicating that all required session values are available """ # Generate secret key for user if unavailable for value in REQUIRED_SESSION_VALUES: if value not in session: return False return True