Spaces:
Sleeping
Sleeping
File size: 3,204 Bytes
8c881ff b07fa5c a4853d1 8c881ff b07fa5c 8c881ff b07fa5c 2171d3d b07fa5c 4f4662e b07fa5c a4853d1 4f4662e a4853d1 4f4662e a4853d1 4f4662e b07fa5c a4853d1 2171d3d b07fa5c 8c881ff a4853d1 8c881ff b07fa5c 8c881ff b07fa5c a4853d1 b07fa5c |
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 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
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) |