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 download_db(): if 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") 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) current_user = gr.State() # store logged-in user 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) # logout clears user logout_btn.click(logout, outputs=[home_status, current_user]) # allow admin to download DB login_btn.click(fn=lambda u: "Welcome Home!" if u else "❌ Please login first.", inputs=current_user, outputs=home_status) login_btn.click(fn=lambda u: download_db() if u == "Admin" else None, inputs=current_user, outputs=download_btn) demo.launch()