Spaces:
Runtime error
Runtime error
| 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() |