File size: 3,160 Bytes
2565588
f48e9bb
2565588
 
f48e9bb
2565588
f48e9bb
2565588
f48e9bb
2565588
 
 
 
 
 
 
 
 
 
 
f48e9bb
 
 
2565588
f48e9bb
 
 
2565588
 
 
 
 
f48e9bb
2565588
 
f48e9bb
2565588
 
 
f48e9bb
 
 
 
2565588
 
 
f48e9bb
2565588
f48e9bb
 
 
2565588
 
f48e9bb
2565588
f48e9bb
2565588
 
 
 
f48e9bb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2565588
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
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()