import streamlit as st import pandas as pd import csv import os from sklearn.datasets import load_iris from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score from datetime import datetime import time # Load user credentials from CSV def load_users(): try: df = pd.read_csv("users.csv") return dict(zip(df['username'], df['password'])) except FileNotFoundError: st.error("users.csv file not found.") return {} # Save new user to CSV def add_user_to_csv(username, password): # Read existing users with open("users.csv", mode='r', newline='') as file: users = list(csv.reader(file)) # Check if the username already exists for user in users: if user[0] == username: print(f"User {username} already exists.") return # If not, append the new user with open("users.csv", mode='a', newline='') as file: writer = csv.writer(file) writer.writerow([username, password]) st.info(f"User {username} added.") #def add_user_to_csv(username, password): # with open("users.csv", mode='a', newline='') as file: # writer = csv.writer(file) # writer.writerow([username, password]) # Log session to CSV def log_session_to_csv(username, start_time, end_time): duration = end_time - start_time row = [username, start_time.strftime('%Y-%m-%d %H:%M:%S'), end_time.strftime('%Y-%m-%d %H:%M:%S'), str(duration)] file_exists = os.path.isfile("session_log.csv") with open("session_log.csv", mode='a', newline='') as file: writer = csv.writer(file) if not file_exists: writer.writerow(["Username", "Login Time", "Logout Time", "Duration"]) writer.writerow(row) # Display session logs def show_logs(): if os.path.exists("session_log.csv"): df = pd.read_csv("session_log.csv") st.subheader("Session Logs") st.dataframe(df) else: st.info("No session logs found yet.") # Load credentials once USER_CREDENTIALS = load_users() # Initialize session state if 'logged_in' not in st.session_state: st.session_state.logged_in = False if 'current_user' not in st.session_state: st.session_state.current_user = None if 'start_time' not in st.session_state: st.session_state.start_time = None if 'end_time' not in st.session_state: st.session_state.end_time = None # Login function def login(): st.title("Login") username = st.text_input("Username") password = st.text_input("Password", type="password") if st.button("Login"): if username in USER_CREDENTIALS and USER_CREDENTIALS[username] == password: st.success("Login successful!") st.session_state.logged_in = True st.session_state.current_user = username st.session_state.start_time = datetime.now() st.rerun() else: st.error("Invalid username or password") if st.button("Register"): if username and password: if username not in USER_CREDENTIALS: add_user_to_csv(username, password) st.success(f"User {username} successfully registered!") st.session_state.logged_in = True st.session_state.current_user = username st.session_state.start_time = datetime.now() st.rerun() else: st.error("Username already exists. Please choose another.") else: st.error("Both username and password are required.") # Logout function def logout(): st.session_state.end_time = datetime.now() log_session_to_csv( st.session_state.current_user, st.session_state.start_time, st.session_state.end_time ) st.session_state.logged_in = False st.session_state.current_user = None st.rerun() # Main app after login def app(): st.title(f"Welcome, {st.session_state.current_user}!") if st.button("Train Random Forest Model"): iris = load_iris() X_train, X_test, y_train, y_test = train_test_split( iris.data, iris.target, test_size=0.3, random_state=42) model = RandomForestClassifier() model.fit(X_train, y_train) predictions = model.predict(X_test) acc = accuracy_score(y_test, predictions) st.success(f"Model trained. Accuracy: {acc:.2f}") if st.button("Logout"): logout() if st.session_state.start_time and st.session_state.end_time: duration = st.session_state.end_time - st.session_state.start_time # st.info(f"last Session Duration: {duration}") if st.checkbox("Show session log"): show_logs() # Main controller def main(): if st.session_state.logged_in: app() else: login() if __name__ == "__main__": main()