Spaces:
Sleeping
Sleeping
File size: 1,721 Bytes
daa81fb 3de8e98 daa81fb |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
import streamlit as st
from app.db import supabase
from app.chat import list_chat_sessions, create_chat_session, ensure_chat_session
def restore_user_session_if_needed():
"""Try to restore Supabase user session into st.session_state['user'] if missing."""
if st.session_state.get("user"):
return
try:
current = supabase.auth.get_session()
if current and getattr(current, "user", None):
u = current.user
st.session_state["user"] = {"id": u.id, "email": getattr(u, "email", None)}
return
if st.session_state.get("sb_session"):
toks = st.session_state["sb_session"]
if toks.get("access_token") and toks.get("refresh_token"):
supabase.auth.set_session(toks["access_token"], toks["refresh_token"]) # may refresh
ures = supabase.auth.get_user()
user_obj = getattr(ures, "user", None)
if user_obj:
st.session_state["user"] = {"id": user_obj.id, "email": getattr(user_obj, "email", None)}
except Exception:
pass
def ensure_active_session(user_id: str):
"""Ensure st.session_state['session_id'] points to an existing session; create one if needed."""
sid = st.session_state.get("session_id")
if not sid:
sessions = list_chat_sessions(user_id, limit=1)
if sessions:
sid = sessions[0]["id"]
else:
sid = create_chat_session(user_id, title="Percakapan Baru")
st.session_state["session_id"] = sid
try:
ensure_chat_session(user_id, sid) # make sure exists in DB if missing
except Exception:
pass
return st.session_state["session_id"]
|