debate_LMS / src /auth.py
raymondEDS's picture
week 4 contents
e74c738
import streamlit as st
from utils import init_supabase
def get_user_by_username(username):
"""Get user from database by username"""
supabase = init_supabase()
if not supabase:
return None
try:
# First try the function
response = supabase.rpc('get_user_by_username', {'username_param': username}).execute()
if response.data:
return response.data[0]
# Fallback: query the table directly
response = supabase.table('users').select('*').eq('username', username).execute()
if response.data:
return response.data[0]
return None
except Exception as e:
st.error(f"Database error: {str(e)}")
return None
def show_login_page():
"""Show a simple custom login page"""
st.title("🎭 Cura Learning Debate Class")
st.markdown("### Welcome to Debate Class!")
st.markdown("Please log in to access your course materials.")
# Simple login form
with st.form("login_form"):
username = st.text_input("Username")
password = st.text_input("Password", type="password")
submit_button = st.form_submit_button("Login")
if submit_button:
if check_credentials(username, password):
st.session_state.authenticated = True
st.session_state.username = username
st.session_state.name = get_user_name(username)
st.success(f'Welcome {st.session_state.name}!')
st.rerun()
else:
st.error('Invalid username or password')
def check_credentials(username, password):
"""Check if username and password are valid"""
if not username or not password:
return False
# Get user from database
user = get_user_by_username(username)
if user:
# Get the password from the database (plain text for now)
stored_password = user.get('password')
if stored_password:
# Compare passwords directly (plain text)
return password == stored_password
return False
def get_user_name(username):
"""Get the display name for a username"""
user = get_user_by_username(username)
if user:
return user.get('full_name', username)
return username
def handle_logout():
"""Handle logout functionality"""
if st.button("Logout"):
st.session_state.authenticated = False
st.session_state.username = None
st.session_state.name = None
st.rerun()
def is_authenticated():
"""Check if user is authenticated"""
return st.session_state.get('authenticated', False)