louiecerv's picture
First full save
e97a112
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)