""" Demo authentication module for SmartTrip AI. NOTE: This is intentionally simple for demo purposes. In production, replace with a proper auth system using hashed passwords stored in a database (e.g., bcrypt + PostgreSQL/Supabase). """ from typing import Optional, Dict, List # --------------------------------------------------------------------------- # Hardcoded demo credentials (shown on the UI as well) # --------------------------------------------------------------------------- DEMO_USERS: Dict[str, Dict] = { "user1": { "password": "user123", "role": "user", "display_name": "User One", }, "user2": { "password": "user123", "role": "user", "display_name": "User Two", }, "user3": { "password": "user123", "role": "user", "display_name": "User Three", }, "admin": { "password": "admin123", "role": "admin", "display_name": "Administrator", }, } def authenticate(username: str, password: str) -> Optional[Dict]: """ Verify credentials and return user data dict on success, None on failure. """ user = DEMO_USERS.get(username.strip()) if user and user["password"] == password: return { "username": username.strip(), "role": user["role"], "display_name": user["display_name"], } return None def get_all_users() -> List[str]: """Return list of all non-admin usernames.""" return [k for k, v in DEMO_USERS.items() if v["role"] == "user"] def is_admin(role: str) -> bool: return role == "admin" def get_demo_credentials_md() -> str: """Return a markdown table of demo credentials for display in the UI.""" return """ **👤 Regular Users** | Username | Password | |:---------|:---------| | user1 | user123 | | user2 | user123 | | user3 | user123 | **🛡️ Admin** | Username | Password | |:---------|:----------| | admin | admin123 | """