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)