Spaces:
Sleeping
Sleeping
| 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) |