|
import json |
|
import os |
|
from hashlib import sha256 |
|
import gradio as gr |
|
|
|
|
|
def save_user_data_to_json(user, conf_file_path='users.json'): |
|
username = user['name'] |
|
|
|
if os.path.exists(conf_file_path): |
|
with open(conf_file_path, 'r') as file: |
|
try: |
|
existing_data = json.load(file) |
|
except json.JSONDecodeError: |
|
existing_data = {} |
|
else: |
|
existing_data = {} |
|
|
|
|
|
existing_data[username] = user |
|
|
|
|
|
with open(conf_file_path, 'w') as file: |
|
json.dump(existing_data, file, indent=4) |
|
|
|
return conf_file_path |
|
|
|
def load_from_json(file_path='users.json'): |
|
""" |
|
Load user data from a JSON file and return it as a dictionary. |
|
|
|
:param file_path: The path to the JSON file from which to load user data. |
|
:return: A dictionary containing the user data loaded from the JSON file. |
|
""" |
|
if os.path.exists(file_path): |
|
with open(file_path, 'r') as file: |
|
try: |
|
user_data = json.load(file) |
|
return user_data |
|
except json.JSONDecodeError as e: |
|
print(f"Error decoding JSON from {file_path}: {e}") |
|
return {} |
|
else: |
|
print(f"File {file_path} not found.") |
|
return {} |
|
|
|
|
|
def add_user_pref(user, input_value, input_type='keywords'): |
|
|
|
if not user['history']: |
|
user['history'] = {"keywords": [], "prompts": []} |
|
|
|
for word in input_value: |
|
if word not in user['history'][input_type]: |
|
user['history'][input_type].append(word) |
|
return user |
|
|
|
|
|
def update_json(user, prompt, keywords): |
|
username = user['name'] |
|
users = load_from_json() |
|
user = users.get(username) |
|
|
|
print(f"TYPE PROMPT = {type(prompt)}") |
|
|
|
|
|
if username != 'Guest': |
|
user = add_user_pref(user, prompt, input_type='prompts') |
|
user = add_user_pref(user, keywords, input_type='keywords') |
|
conf_file_path = save_user_data_to_json(user) |
|
|
|
|
|
|
|
|
|
users = load_from_json() |
|
user = users.get(username) |
|
return gr.update(choices=user['history']['prompts']), gr.update(choices=user['history']['keywords']), user, conf_file_path |
|
|
|
def auth_user(username, password): |
|
users = load_from_json() |
|
if username in users and sha256(password.encode()).hexdigest() == users[username]['hashed_password']: |
|
user = users.get(username) |
|
else: |
|
username = 'Guest' |
|
user = users.get(username) |
|
return user, f"## Hi {username}!", gr.update(choices=user['history']['prompts']), gr.update(choices=user['history']['keywords']) |
|
|
|
def logout(): |
|
username = 'Guest' |
|
user = users.get(username) |
|
return user, f"## Hi {username}!", gr.update(choices=user['history']['prompts']), gr.update(choices=user['history']['keywords']) |
|
|
|
users = load_from_json() |