import gradio as gr import sqlite3 import os DB_PATH = "temp.db" # --- Database Setup --- def init_db(): conn = sqlite3.connect(DB_PATH) cursor = conn.cursor() cursor.execute(""" CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT UNIQUE, password TEXT ) """) conn.commit() conn.close() init_db() # --- Functions --- def signup(username, password): if not username or not password: return "⚠️ Please enter both username and password." conn = sqlite3.connect(DB_PATH) cursor = conn.cursor() try: cursor.execute("INSERT INTO users (username, password) VALUES (?, ?)", (username, password)) conn.commit() conn.close() return "✅ Signup successful! Please login." except sqlite3.IntegrityError: conn.close() return "❌ Username already exists. Try another." def login(username, password): if username == "1234" and password == "1234": return "✅ Admin logged in! You can download the database.", "Admin" conn = sqlite3.connect(DB_PATH) cursor = conn.cursor() cursor.execute("SELECT * FROM users WHERE username=? AND password=?", (username, password)) user = cursor.fetchone() conn.close() if user: return f"✅ Welcome, {username}!", username else: return "❌ Invalid credentials.", None def logout(): return "✅ Logged out successfully!", None def update_home(user): if user == "Admin": return "👑 Welcome Admin! You can download the DB." elif user: return f"🏠 Welcome Home, {user}!" else: return "❌ Please login first." def download_db(user): if user == "Admin" and os.path.exists(DB_PATH): return DB_PATH return None # --- Gradio UI --- with gr.Blocks() as demo: gr.Markdown("## 🔐 Simple Login System with Signup & DB Download") current_user = gr.State() with gr.Tab("Signup"): signup_user = gr.Textbox(label="Username") signup_pass = gr.Textbox(label="Password", type="password") signup_btn = gr.Button("Signup") signup_out = gr.Textbox(label="Signup Status", interactive=False) signup_btn.click(signup, inputs=[signup_user, signup_pass], outputs=signup_out) with gr.Tab("Login"): login_user = gr.Textbox(label="Username") login_pass = gr.Textbox(label="Password", type="password") login_btn = gr.Button("Login") login_status = gr.Textbox(label="Login Status", interactive=False) login_btn.click(login, inputs=[login_user, login_pass], outputs=[login_status, current_user]) with gr.Tab("Home"): home_status = gr.Textbox(label="Home Status", interactive=False) logout_btn = gr.Button("Logout") download_btn = gr.File(label="Download DB", interactive=False) # Update home page whenever current_user changes current_user.change(update_home, inputs=current_user, outputs=home_status) # Logout clears user logout_btn.click(logout, outputs=[home_status, current_user]) # Enable DB download only for Admin current_user.change(download_db, inputs=current_user, outputs=download_btn) demo.launch()