import gradio as gr import pandas as pd import hashlib import json import os from datetime import datetime # Initialize admin credentials file if it doesn't exist ADMIN_FILE = "admin_credentials.json" if not os.path.exists(ADMIN_FILE): default_admin = { "admin": hashlib.sha256("admin123".encode()).hexdigest() } with open(ADMIN_FILE, "w") as f: json.dump(default_admin, f) def load_admin_credentials(): try: with open(ADMIN_FILE, "r") as f: return json.load(f) except: return {"admin": hashlib.sha256("admin123".encode()).hexdigest()} def save_admin_credentials(credentials): with open(ADMIN_FILE, "w") as f: json.dump(credentials, f) def get_admin_usernames(): credentials = load_admin_credentials() return list(credentials.keys()) def refresh_admin_list(): return gr.Dropdown(choices=get_admin_usernames()) def submit_feedback(admin_username, message): if not admin_username or not message: return "Please fill in both admin selection and message." timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") user_feedback = pd.DataFrame({ "timestamp": [timestamp], "admin": [admin_username], "message": [message] }) if not os.path.exists("user_feedback.csv"): user_feedback.to_csv("user_feedback.csv", index=False) else: user_feedback.to_csv("user_feedback.csv", mode='a', header=False, index=False) return "Feedback submitted successfully!" def auto_create_or_login(username, password): if not username or not password: return "Please enter both username and password." try: credentials = load_admin_credentials() hashed_password = hashlib.sha256(password.encode()).hexdigest() # If user exists, check password if username in credentials: if credentials[username] == hashed_password: # Login successful if not os.path.exists("user_feedback.csv"): return "Login successful. No messages found." df = pd.read_csv("user_feedback.csv") admin_messages = df[df['admin'] == username] if admin_messages.empty: return "Login successful. No messages found for your account." return f"Login successful. Your messages:\n\n{admin_messages.to_string()}" else: return "Incorrect password for existing account." # If user doesn't exist, create new account credentials[username] = hashed_password save_admin_credentials(credentials) return f"New account created successfully for {username}! No messages yet." except Exception as e: return f"Error: {str(e)}" with gr.Blocks() as demo: gr.Markdown("# Feedback System") with gr.Tab("Submit Feedback"): admin_select = gr.Dropdown( choices=get_admin_usernames(), label="Select Admin", interactive=True ) feedback_input = gr.Textbox( label="Your Feedback", placeholder="Enter your feedback here", lines=3 ) submit_button = gr.Button("Submit") feedback_output = gr.Textbox(label="Status") submit_button.click( fn=submit_feedback, inputs=[admin_select, feedback_input], outputs=feedback_output ) with gr.Tab("Admin Login/Register"): gr.Markdown(""" ### Admin Login or Register Enter your username and password: - If account exists: You will be logged in - If account doesn't exist: A new account will be created automatically """) login_username = gr.Textbox( label="Username", placeholder="Enter username" ) login_password = gr.Textbox( label="Password", type="password", placeholder="Enter password" ) login_button = gr.Button("Login or Create Account") messages_output = gr.Textbox(label="Status and Messages", lines=10) login_button.click( fn=auto_create_or_login, inputs=[login_username, login_password], outputs=messages_output ).then( fn=refresh_admin_list, inputs=None, outputs=admin_select ) demo.launch()