File size: 1,642 Bytes
b1abade
 
 
fa3f84c
b1abade
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# modules/auth.py - Authentication functions
import streamlit as st
import hashlib
from .database import Session, User

def init_session_state():
    """Initialize session state variables"""
    if 'logged_in' not in st.session_state:
        st.session_state.logged_in = False
        st.session_state.user_role = None
        st.session_state.user_id = None
        st.session_state.username = None

def show_login_page():
    """Display login page"""
    st.sidebar.header("Login")
    
    with st.sidebar.form("login_form"):
        username = st.text_input("Username")
        password = st.text_input("Password", type="password")
        submit = st.form_submit_button("Login")
        
        if submit:
            if authenticate_user(username, password):
                st.rerun()
            else:
                st.error("Invalid username or password")
    
    st.info("Default login: **admin** / **admin123**")

def authenticate_user(username, password):
    """Authenticate user credentials"""
    session = Session()
    user = session.query(User).filter_by(email=username).first()
    
    if user and user.password_hash == hashlib.sha256(password.encode()).hexdigest():
        st.session_state.logged_in = True
        st.session_state.user_role = user.role
        st.session_state.user_id = user.id
        st.session_state.username = user.name
        session.close()
        return True
    
    session.close()
    return False

def logout():
    """Logout user"""
    st.session_state.logged_in = False
    st.session_state.user_role = None
    st.session_state.user_id = None
    st.session_state.username = None