File size: 3,308 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
7cbd08c
 
 
 
 
 
 
 
 
 
2565588
 
 
f48e9bb
 
 
 
7cbd08c
 
f48e9bb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7cbd08c
 
f48e9bb
7cbd08c
 
f48e9bb
7cbd08c
 
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
99
100
101
102
103
104
105
106
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()