import logging import random import queries.user as user_queries import streamlit as st from pandas import DataFrame from streamlit.user_info import UserInfoProxy logger = logging.getLogger(__name__) def is_login_enabled() -> bool: return hasattr(st, 'user') and hasattr(st.user, 'is_logged_in') def is_demo_user() -> bool: return hasattr(st.session_state, 'user_is_demo') and st.session_state.user_is_demo def is_logged_in() -> bool: return not is_login_enabled() or is_demo_user() or (is_login_enabled() and st.user.is_logged_in) def init_user(): if not is_demo_user(): set_user_in_session(st.user) def set_user_in_session(user: UserInfoProxy): email = user.email if hasattr(user, "email") else None user_id = user.sub if hasattr(user, "sub") else None name = user.name if hasattr(user, "name") else None user_entity = user_queries.find_user_by_oidc_id(user_id) if user_id else DataFrame() if user_entity.empty: user_entity = user_queries.find_user_by_email(email) if email else DataFrame() if user_entity.empty: user_entity = user_queries.find_default_user() if user_entity.empty and email and name and user_id: user_entity = user_queries.create_user(email, name, user_id) elif name: user_queries.update_default_user(email, name, user_id) user_entity = user_queries.find_user_by_oidc_id(user_id) if not user_entity.empty: st.session_state.user_id = int(user_entity["id"][0]) st.session_state.user_name = user_entity["name"][0] st.session_state.user_email = user_entity["email"][0] st.session_state.user_external_id = user_entity["oidc_user_id"][0] st.session_state.current_theme = user_entity["theme"][0] st.session_state.user_is_demo = False else: logger.warning("No active user found!") def init_demo_user(): demo_id = ''.join(random.choice('0123456789abcdefghijklmnopqrstuvwxyz') for i in range(6)) demo_user = user_queries.create_user(f"demo+{demo_id}@internal", f"Demo user {demo_id}", None) st.session_state.user_id = int(demo_user["id"][0]) st.session_state.user_name = demo_user["name"][0] st.session_state.user_email = demo_user["email"][0] st.session_state.user_external_id = demo_user["oidc_user_id"][0] st.session_state.current_theme = demo_user["theme"][0] st.session_state.user_is_demo = True