File size: 3,459 Bytes
5e51056
4f98e67
 
5e51056
4f98e67
 
5e51056
4f98e67
 
 
 
 
 
 
 
 
 
 
5e51056
4f98e67
 
 
 
 
 
 
 
 
 
5e51056
4f98e67
 
 
 
 
 
 
 
5e51056
4f98e67
5e51056
4f98e67
5e51056
4f98e67
 
5e51056
4f98e67
 
 
8a5a9ad
 
4f98e67
 
 
 
 
 
 
 
 
 
5e51056
4f98e67
 
 
 
 
bbf2bcc
4f98e67
 
5e51056
4f98e67
 
 
 
 
 
 
 
 
 
 
bbf2bcc
 
 
 
 
 
 
 
 
 
 
5e51056
 
 
4f98e67
8a5a9ad
 
bbf2bcc
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
import streamlit as st
import sqlite3
import hashlib

# Database setup
DB_FILE = "users.db"

def create_user_table():
    conn = sqlite3.connect(DB_FILE)
    cursor = conn.cursor()
    cursor.execute("""
        CREATE TABLE IF NOT EXISTS users (
            username TEXT PRIMARY KEY,
            password TEXT
        )
    """)
    conn.commit()
    conn.close()

def add_user(username, password):
    conn = sqlite3.connect(DB_FILE)
    cursor = conn.cursor()
    hashed_password = hashlib.sha256(password.encode()).hexdigest()
    try:
        cursor.execute("INSERT INTO users (username, password) VALUES (?, ?)", (username, hashed_password))
        conn.commit()
    except sqlite3.IntegrityError:
        st.error("Username already exists. Please choose a different username.")
    conn.close()

def authenticate_user(username, password):
    conn = sqlite3.connect(DB_FILE)
    cursor = conn.cursor()
    hashed_password = hashlib.sha256(password.encode()).hexdigest()
    cursor.execute("SELECT * FROM users WHERE username = ? AND password = ?", (username, hashed_password))
    user = cursor.fetchone()
    conn.close()
    return user

# Main application
def main():
    st.title("Welcome to Your Streamlit App")

    # Initialize database
    create_user_table()

    # Authentication state
    if "authenticated" not in st.session_state:
        st.session_state.authenticated = False
    if "username" not in st.session_state:
        st.session_state.username = None

    # Central login/register interface
    if not st.session_state.authenticated:
        st.subheader("Please Log In or Register to Continue")
        auth_mode = st.radio("Choose an Option", ["Log In", "Register"], horizontal=True)

        if auth_mode == "Log In":
            st.subheader("Log In")
            username = st.text_input("Username", key="login_username")
            password = st.text_input("Password", type="password", key="login_password")

            if st.button("Log In"):
                if authenticate_user(username, password):
                    st.success(f"Welcome back, {username}!")
                    st.session_state.authenticated = True
                    st.session_state.username = username
                    st.experimental_rerun()
                else:
                    st.error("Invalid username or password. Please try again.")

        elif auth_mode == "Register":
            st.subheader("Register")
            username = st.text_input("Create Username", key="register_username")
            password = st.text_input("Create Password", type="password", key="register_password")

            if st.button("Register"):
                if username and password:
                    add_user(username, password)
                    st.success("Account created successfully! You can now log in.")
                else:
                    st.error("Please fill in all fields.")
    else:
        # Authenticated user workspace with sidebar
        st.sidebar.title(f"Hello, {st.session_state.username}!")
        if st.sidebar.button("Log Out"):
            st.session_state.authenticated = False
            st.session_state.username = None
            st.experimental_rerun()

        # Main content area
        st.subheader(f"Welcome to your workspace, {st.session_state.username}!")
        st.write("This is your personal workspace. All your saved work will appear here.")

if __name__ == "__main__":
    main()