import gradio as gr import sqlite3 import hashlib from datetime import datetime # ---------------- Database ---------------- DB_PATH = './chat.db' conn = sqlite3.connect(DB_PATH, check_same_thread=False) cursor = conn.cursor() # Users table cursor.execute(''' CREATE TABLE IF NOT EXISTS users( id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT UNIQUE, password_hash TEXT ) ''') # Messages table cursor.execute(''' CREATE TABLE IF NOT EXISTS messages( id INTEGER PRIMARY KEY AUTOINCREMENT, sender_id INTEGER, receiver_id INTEGER, message TEXT, timestamp TEXT, FOREIGN KEY(sender_id) REFERENCES users(id), FOREIGN KEY(receiver_id) REFERENCES users(id) ) ''') conn.commit() # ---------------- Default Admin ---------------- DEFAULT_ADMIN = "admin" DEFAULT_PASSWORD = "1234" cursor.execute("SELECT * FROM users WHERE username=?", (DEFAULT_ADMIN,)) if not cursor.fetchone(): cursor.execute( "INSERT INTO users(username,password_hash) VALUES (?,?)", (DEFAULT_ADMIN, hashlib.sha256(DEFAULT_PASSWORD.encode()).hexdigest()) ) conn.commit() # ---------------- Utility Functions ---------------- def hash_password(password): return hashlib.sha256(password.encode()).hexdigest() def register(username, password): try: cursor.execute( "INSERT INTO users(username,password_hash) VALUES (?,?)", (username, hash_password(password)) ) conn.commit() return "Account created successfully!" except sqlite3.IntegrityError: return "Username already exists!" def login(username, password): cursor.execute( "SELECT * FROM users WHERE username=? AND password_hash=?", (username, hash_password(password)) ) user = cursor.fetchone() if user: return "Login successful!", gr.update(visible=True), gr.State.update(value=user[0]) else: return "Login failed!", gr.update(visible=False), gr.State.update(value=None) def send_message(sender_id, receiver_id, message): timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") cursor.execute( "INSERT INTO messages(sender_id,receiver_id,message,timestamp) VALUES (?,?,?,?)", (sender_id, receiver_id, message, timestamp) ) conn.commit() def get_messages_html(user_id, receiver_id): cursor.execute(""" SELECT sender_id, message, timestamp FROM messages WHERE (sender_id=? AND receiver_id=?) OR (sender_id=? AND receiver_id=?) ORDER BY id ASC """, (user_id, receiver_id, receiver_id, user_id)) msgs = cursor.fetchall() result = "" for s_id, msg, ts in msgs: if s_id == user_id: result += f'