import streamlit as st import firebase_admin from firebase_admin import credentials, auth import os import json import smtplib from email.mime.text import MIMEText # Load Firebase credentials from Hugging Face Secrets firebase_creds = os.getenv("FIREBASE_CREDENTIALS") sender_email = os.getenv("email") email_pass = os.getenv("email_pass") if firebase_creds: firebase_creds = json.loads(firebase_creds) else: st.error("Firebase credentials not found. Please check your secrets.") # Initialize Firebase (only once) if not firebase_admin._apps: cred = credentials.Certificate(firebase_creds) # Replace with your Firebase service account key firebase_admin.initialize_app(cred) # Initialize session state if "logged_in" not in st.session_state: st.session_state.logged_in = False if "current_user" not in st.session_state: st.session_state.current_user = None # Callback for registration def register_callback(): email = st.session_state.reg_email password = st.session_state.reg_password try: # Create a new user in Firebase user = auth.create_user(email=email, password=password) st.success("Registration successful! Please log in.") except Exception as e: st.error(f"Registration failed: {e}") # Callback for login def login_callback(): email = st.session_state.login_email password = st.session_state.login_password try: # Authenticate user with Firebase user = auth.get_user_by_email(email) st.session_state.logged_in = True st.session_state.current_user = user.uid # Store the user UID in session state st.success("Logged in successfully!") except Exception as e: st.error(f"Login failed: {e}") # Callback for logout def logout_callback(): st.session_state.logged_in = False st.session_state.current_user = None st.info("Logged out successfully!") # Registration form def registration_form(): with st.form("Registration"): st.subheader("Register") email = st.text_input("Email", key="reg_email") password = st.text_input("Password (min 6 characters)", type="password", key="reg_password") submit_button = st.form_submit_button("Register", on_click=register_callback) # Login form def login_form(): with st.form("Login"): st.subheader("Login") email = st.text_input("Email", key="login_email") password = st.text_input("Password", type="password", key="login_password") submit_button = st.form_submit_button("Login", on_click=login_callback) # Main app screen (after login) def main_app(): st.subheader(f"Welcome, {st.session_state.current_user}!") st.write("Enter a name below to get a greeting.") # Input field for name name = st.text_input("Enter a name", key="name_input") # Display greeting in real-time if name: st.write(f"Hello {name}!") # Logout button if st.button("Logout", on_click=logout_callback): pass # Render the appropriate screen based on login status if st.session_state.logged_in: main_app() else: registration_form() login_form()