This commit is contained in:
58
app/user.py
58
app/user.py
@@ -1,8 +1,60 @@
|
||||
import logging
|
||||
import random
|
||||
import queries.user as user_queries
|
||||
import streamlit as st
|
||||
|
||||
is_login_enabled = hasattr(st, 'user') and hasattr(st.user, 'is_logged_in')
|
||||
is_logged_in = is_login_enabled and st.user.is_logged_in
|
||||
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():
|
||||
user_queries.set_user_in_session(st.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
|
||||
Reference in New Issue
Block a user