wcag_AI_validation/UI/dependences_ui/utils.py

118 lines
2.9 KiB
Python

import hashlib
import json
import os
import gradio as gr
# File to store user credentials
USERS_FILE = "users.json"
def load_users():
"""Load users from JSON file"""
if os.path.exists(USERS_FILE):
with open(USERS_FILE, "r") as f:
return json.load(f)
return {}
def save_users(users):
"""Save users to JSON file"""
with open(USERS_FILE, "w") as f:
json.dump(users, f)
def hash_password(password):
"""Hash password using SHA-256"""
return hashlib.sha256(password.encode()).hexdigest()
def register_user(username, password, confirm_password):
"""Register a new user"""
if not username or not password:
return "", "Username and password cannot be empty!", None
if password != confirm_password:
return "", "Passwords do not match!", None
if len(password) < 6:
return "", "Password must be at least 6 characters long!", None
users = load_users()
if username in users:
return "", "Username already exists!", None
users[username] = hash_password(password)
save_users(users)
return "", f"✅ Registration successful! You can now login.", None
def login_user(username, password, state):
"""Validate user login"""
if not username or not password:
return (
"Please enter both username and password!",
"",
state,
gr.update(visible=True),
gr.update(visible=False),
gr.update(visible=False),
gr.update(open=True),
)
users = load_users()
if username not in users:
return (
"Invalid username or password!",
"",
state,
gr.update(visible=True),
gr.update(visible=False),
gr.update(visible=False),
gr.update(open=True),
)
if users[username] != hash_password(password):
return (
"Invalid username or password!",
"",
state,
gr.update(visible=True),
gr.update(visible=False),
gr.update(visible=False),
gr.update(open=True),
)
# Login successful
state = {"logged_in": True, "username": username}
return (
f"✅ Welcome back, {username}!",
"",
state,
gr.update(visible=False),
gr.update(visible=True),
gr.update(visible=True),
gr.update(open=False),
)
def logout_user(state):
"""Logout current user"""
state = {"logged_in": False, "username": None}
return (
"Logged out successfully!",
state,
gr.update(visible=True),
gr.update(visible=False),
gr.update(visible=False),
)
def protected_content(state):
"""Content only accessible to logged-in users"""
if state.get("logged_in"):
return f"You are logged as {state.get('username')}\n"
return "Please login to access this content."