Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| from supabase import create_client, Client | |
| import os | |
| def init_supabase(): | |
| """Initialize Supabase client""" | |
| try: | |
| url = st.secrets.get("SUPABASE_URL") | |
| key = st.secrets.get("SUPABASE_KEY") | |
| except: | |
| url = os.getenv("SUPABASE_URL") | |
| key = os.getenv("SUPABASE_KEY") | |
| if not url or not key: | |
| st.error("Supabase credentials not found.") | |
| return None | |
| return create_client(url, key) | |
| def test_password_update(): | |
| """Test password update functionality""" | |
| st.title("π Password Update Test") | |
| supabase = init_supabase() | |
| if not supabase: | |
| st.error("Failed to initialize Supabase client") | |
| return | |
| try: | |
| # Test 1: Get all users with detailed info | |
| st.subheader("π Current Users (Detailed)") | |
| response = supabase.table('users').select('*').execute() | |
| if response.data: | |
| st.success(f"Found {len(response.data)} users:") | |
| for user in response.data: | |
| st.write(f"**{user.get('username')}**") | |
| st.write(f" - ID: `{user.get('id')}`") | |
| st.write(f" - Password: `{user.get('password')}`") | |
| st.write(f" - Email: `{user.get('email')}`") | |
| st.write(f" - Role: `{user.get('role')}`") | |
| st.write("---") | |
| else: | |
| st.warning("No users found") | |
| return | |
| # Test 2: Try to update password for instructor | |
| st.subheader("π§ Testing Password Update") | |
| # Find instructor user | |
| instructor_user = None | |
| for user in response.data: | |
| if user.get('username') == 'instructor': | |
| instructor_user = user | |
| break | |
| if not instructor_user: | |
| st.error("Instructor user not found") | |
| return | |
| st.write(f"**Testing update for:** {instructor_user.get('username')}") | |
| st.write(f"**User ID:** `{instructor_user.get('id')}`") | |
| st.write(f"**Current password:** `{instructor_user.get('password')}`") | |
| # Try to update password | |
| new_password = "test123" | |
| st.write(f"**Attempting to update to:** `{new_password}`") | |
| # Method 1: Update by ID | |
| st.write("**Method 1: Update by ID**") | |
| try: | |
| update_response = supabase.table('users').update({'password': new_password}).eq('id', instructor_user.get('id')).execute() | |
| st.write(f"**Response:** {update_response}") | |
| st.write(f"**Data:** {update_response.data}") | |
| st.write(f"**Count:** {update_response.count}") | |
| if update_response.data: | |
| st.success("β Password update successful!") | |
| else: | |
| st.error("β No rows were updated") | |
| except Exception as e: | |
| st.error(f"β Password update failed: {str(e)}") | |
| # Method 2: Update by username | |
| st.write("**Method 2: Update by username**") | |
| try: | |
| update_response2 = supabase.table('users').update({'password': new_password}).eq('username', 'instructor').execute() | |
| st.write(f"**Response:** {update_response2}") | |
| st.write(f"**Data:** {update_response2.data}") | |
| st.write(f"**Count:** {update_response2.count}") | |
| if update_response2.data: | |
| st.success("β Password update by username successful!") | |
| else: | |
| st.error("β No rows were updated by username") | |
| except Exception as e: | |
| st.error(f"β Password update by username failed: {str(e)}") | |
| # Method 3: Try without RLS | |
| st.write("**Method 3: Check if RLS is the issue**") | |
| try: | |
| # Try to disable RLS temporarily (this might not work with anon key) | |
| st.write("Attempting to check RLS status...") | |
| # Try a simple update to see if it's an RLS issue | |
| test_update = supabase.table('users').update({'full_name': 'Test Update'}).eq('username', 'instructor').execute() | |
| st.write(f"**Test update response:** {test_update}") | |
| except Exception as e: | |
| st.error(f"β Test update failed: {str(e)}") | |
| # Verify current state | |
| st.subheader("π Verification") | |
| try: | |
| verify_response = supabase.table('users').select('*').eq('username', 'instructor').execute() | |
| if verify_response.data: | |
| current_user = verify_response.data[0] | |
| st.write(f"**Current password in database:** `{current_user.get('password')}`") | |
| if current_user.get('password') == new_password: | |
| st.success("β Password was actually updated!") | |
| else: | |
| st.warning("β οΈ Password was not updated") | |
| else: | |
| st.error("β Could not verify user") | |
| except Exception as e: | |
| st.error(f"β Verification failed: {str(e)}") | |
| except Exception as e: | |
| st.error(f"β Test failed: {str(e)}") | |
| if __name__ == "__main__": | |
| test_password_update() |