hso / auth_db.py
Militaryint's picture
Update auth_db.py
0b9317a verified
Raw
History Blame Contribute Delete
2.86 kB
import sqlite3
import streamlit_authenticator as stauth
DB_NAME = "users.db"
def init_db(admin_email, admin_password):
"""Initializes the database and creates default admin account if not existing."""
conn = sqlite3.connect(DB_NAME)
c = conn.cursor()
c.execute('''
CREATE TABLE IF NOT EXISTS users (
username TEXT PRIMARY KEY,
name TEXT,
email TEXT,
password TEXT,
status TEXT
)
''')
# Check if admin exists
c.execute('SELECT * FROM users WHERE username = ?', ('admin',))
if not c.fetchone():
hashed_password = stauth.Hasher([admin_password]).generate()[0]
c.execute(
'INSERT INTO users (username, name, email, password, status) VALUES (?, ?, ?, ?, ?)',
('admin', 'System Admin', admin_email, hashed_password, 'approved')
)
conn.commit()
conn.close()
def verify_password(stored_password, provided_password):
"""Verifies a provided password against the stored hashed password."""
return stauth.Hasher.check_password(stored_password, provided_password)
def register_user(username, name, email, password):
"""Registers a new user with status 'pending'."""
conn = sqlite3.connect(DB_NAME)
c = conn.cursor()
try:
hashed_password = stauth.Hasher([password]).generate()[0]
c.execute(
'INSERT INTO users (username, name, email, password, status) VALUES (?, ?, ?, ?, ?)',
(username, name, email, hashed_password, 'pending')
)
conn.commit()
return True, "Registration successful! Awaiting admin approval."
except sqlite3.IntegrityError:
return False, "Username already exists."
finally:
conn.close()
def get_pending_users():
"""Fetches all users waiting for approval."""
conn = sqlite3.connect(DB_NAME)
c = conn.cursor()
c.execute('SELECT username, name, email FROM users WHERE status = "pending"')
pending = c.fetchall()
conn.close()
return pending
def approve_user(username):
"""Approves a user's login access."""
conn = sqlite3.connect(DB_NAME)
c = conn.cursor()
c.execute('UPDATE users SET status = "approved" WHERE username = ?', (username,))
conn.commit()
conn.close()
def reject_user(username):
"""Rejects/Deletes a user's registration request."""
conn = sqlite3.connect(DB_NAME)
c = conn.cursor()
c.execute('DELETE FROM users WHERE username = ?', (username,))
conn.commit()
conn.close()
def check_user_status(username):
"""Returns status and hashed password for authentication."""
conn = sqlite3.connect(DB_NAME)
c = conn.cursor()
c.execute('SELECT password, status, name, email FROM users WHERE username = ?', (username,))
res = c.fetchone()
conn.close()
return res