File size: 2,455 Bytes
e97a112
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
import sqlite3
from passlib.hash import bcrypt
import pandas as pd

# --- Database functions ---
def create_usertable():
    conn = sqlite3.connect('users.db')
    c = conn.cursor()
    c.execute('CREATE TABLE IF NOT EXISTS userstable(username TEXT, password TEXT)')
    conn.commit()
    conn.close()

def add_userdata(username, password):
    conn = sqlite3.connect('users.db')
    c = conn.cursor()
    c.execute('INSERT INTO userstable(username, password) VALUES (?,?)', (username, password))
    conn.commit()
    conn.close()

def login_user(username, password):
    conn = sqlite3.connect('users.db')
    c = conn.cursor()
    c.execute('SELECT password FROM userstable WHERE username =?', (username,))
    stored_hash = c.fetchone()
    conn.close()
    
    if stored_hash:
        stored_hash = stored_hash[0]
        return check_hashes(password, stored_hash)
    else:
        return False

def view_all_users():
    conn = sqlite3.connect('users.db')
    c = conn.cursor()
    c.execute('SELECT * FROM userstable')
    data = c.fetchall()
    conn.close()
    return data

# --- Hashing ---
def make_hashes(password):
    return bcrypt.hash(password)

def check_hashes(password, hashed_text):
    return bcrypt.verify(password, hashed_text)

# --- Streamlit UI ---
st.title("User Authentication System")

create_usertable()

menu = ["Login", "SignUp", "Manage Users"]
choice = st.sidebar.selectbox("Menu", menu)

if choice == "Login":
    st.subheader("Login Section")
    username = st.text_input("User Name")
    password = st.text_input("Password", type='password')
    if st.button("Login"):
        result = login_user(username.lower(), password)
        if result:
            st.success("Logged In as {}".format(username))
        else:
            st.warning("Incorrect Username/Password")

elif choice == "SignUp":
    st.subheader("Create New Account")
    new_user = st.text_input("Username")
    new_password = st.text_input("Password", type='password')
    if st.button("Signup"):
        hashed_new_password = make_hashes(new_password)
        add_userdata(new_user, hashed_new_password)
        st.success("You have successfully created a valid Account")
        st.info("Go to Login Menu to login")

elif choice == "Manage Users":
    st.subheader("User Management")
    user_result = view_all_users()
    clean_db = pd.DataFrame(user_result, columns=["Username", "Password"])
    st.dataframe(clean_db)