MemoryOfMeTest / app.py
awacke1's picture
Update app.py
2171d3d verified
raw
history blame
3.2 kB
import streamlit as st
import json
import os
from cryptography.fernet import Fernet, InvalidToken
# Initialize session state
if 'username' not in st.session_state:
st.session_state.username = ''
if 'scratch_pad' not in st.session_state:
st.session_state.scratch_pad = ''
# Load or create user history file
history_file = 'user_history.json'
if not os.path.exists(history_file):
with open(history_file, 'w') as file:
json.dump({}, file)
# Load user history
with open(history_file, 'r') as file:
user_history = json.load(file)
# Generate encryption key
key = Fernet.generate_key()
fernet = Fernet(key)
def save_session(username, password):
st.session_state.username = username
st.session_state.scratch_pad = st.session_state.scratch_pad
encrypted_password = fernet.encrypt(password.encode()).decode()
user_history[username] = {
'password': encrypted_password,
'scratch_pad': st.session_state.scratch_pad
}
with open(history_file, 'w') as file:
json.dump(user_history, file)
def register_user(username, password):
if username not in user_history:
save_session(username, password)
st.success("User registered successfully!")
else:
st.warning("Username already exists. Please choose a different username.")
def login_user(username, password):
if username in user_history:
encrypted_password = user_history[username]['password']
try:
decrypted_password = fernet.decrypt(encrypted_password.encode()).decode()
if password == decrypted_password:
st.session_state.username = username
st.session_state.scratch_pad = user_history[username]['scratch_pad']
st.success("Logged in successfully!")
return True
else:
st.error("Incorrect password. Please try again.")
except InvalidToken:
st.error("Invalid password. Please try again.")
else:
st.warning("Username not found. Please register first.")
return False
def reset_password(username):
if username in user_history:
new_password = Fernet.generate_password(8).decode()
save_session(username, new_password)
st.success(f"Password reset successful. Your new password is: {new_password}")
else:
st.warning("Username not found.")
st.title("Memory of Me - State Aware Authentication and User Data Memory")
if st.session_state.username:
st.subheader(f"Welcome back, {st.session_state.username}!")
scratch_pad = st.text_area("Scratch Pad", value=st.session_state.scratch_pad, height=200)
if st.button("πŸ’Ύ Save"):
save_session(st.session_state.username, '')
if st.button("πŸ”‘ Reset Password"):
reset_password(st.session_state.username)
else:
username = st.text_input("Username:")
password = st.text_input("Password:", type="password")
col1, col2 = st.columns(2)
with col1:
if st.button("πŸ”‘ Login"):
if login_user(username, password):
st.experimental_rerun()
with col2:
if st.button("πŸ“ Register"):
register_user(username, password)