import streamlit as st import requests from src.utils.history import retrieve_history from src.schemas.schemas import UserModel # List of possible user roles for registration dropdown roles = ["engineering", "marketing", "finance", "hr", "general", "executives"] # Login page UI and logic def login_page(): st.title("Login Page") # User inputs for credentials username = st.text_input("Username") password = st.text_input("Password", type="password") api_key = st.text_input("Openai API Key", type="password") # Center the buttons using three columns col1, _, _ = st.columns([2, 2, 1]) # Place both buttons in the left column (col1) with col1: login_clicked = st.button("Login") register_clicked = st.button("Don't have an account? Register") if login_clicked: # Check if API key is provided if not api_key.strip(): st.warning("⚠️ Please enter your OpenAI API Key before logging in.") else: try: # Send POST request to FastAPI login endpoint with credentials response = requests.post( "https://finsolve-chatbot-backend.onrender.com/api/v1/auth/login", json={"username": username, "password": password, "api_key": api_key} ) if response.status_code == 200: user_resp = response.json() role = "employee" if user_resp['user']['role'] == "general" else user_resp['user']['role'] user_resp['user']['role'] = role user_model = UserModel(**user_resp) st.success(f"✅ Login successful, Welcome, {user_model.user.username}, (Role: {user_model.user.role})") st.session_state.token = user_model.token st.session_state.user = user_model.user retrieve_history() st.rerun() else: st.error(f"❌ Login failed: {response.json().get('msg', 'Invalid credentials')}") except Exception as e: st.error(f"⚠️ Error connecting to server: {e}") if register_clicked: # Switch UI to registration page and rerun app st.session_state.is_login = False st.rerun() # Registration page UI and logic def registration_page(): st.title("Registration Page") # User inputs for new account creation username = st.text_input("Username") role = st.selectbox("Select Role", roles) password = st.text_input("Password", type="password") role = "general" if role == "employee" else role # Center the buttons using three columns col1, _, _ = st.columns([2, 2, 1]) # Place both buttons in the left column (col1) with col1: register_clicked = st.button("Register") login_clicked = st.button("Already have an account? Login") if register_clicked: try: # Send POST request to FastAPI registration endpoint with user data response = requests.post( "https://finsolve-chatbot-backend.onrender.com/api/v1/auth/register", json={"username": username, "password": password, "role": role} ) if response.status_code == 200: # Switch UI back to login page st.session_state.is_login = True # Refresh app to show login UI st.rerun() # Show success message on successful registration st.success(f"✅ Registration of {username} successful!") else: # Show API error message on failure st.error(f"❌ Registration failed: {response.json().get('msg', 'Unknown error')}") except Exception as e: # Handle unexpected errors gracefully st.error(f"⚠️ Error connecting to server: {e}") if login_clicked: # Switch UI back to login page and rerun st.session_state.is_login = True st.rerun() # Function to handle user logout def logout(): # Clear session data such as auth token and messages st.session_state.token = None st.session_state.messages = [] # Refresh app to redirect to login page st.rerun()