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