from flask import Flask, render_template_string, request, redirect, url_for
import sqlite3
from datetime import datetime
app = Flask(__name__)
# --- Database setup ---
def init_db():
conn = sqlite3.connect("chat.db")
c = conn.cursor()
c.execute("""CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE NOT NULL
)""")
c.execute("""CREATE TABLE IF NOT EXISTS messages (
id INTEGER PRIMARY KEY AUTOINCREMENT,
sender TEXT NOT NULL,
receiver TEXT NOT NULL,
text TEXT NOT NULL,
timestamp TEXT NOT NULL
)""")
conn.commit()
conn.close()
init_db()
# --- Templates (styled HTML all inline) ---
layout = """
Mini Chat
{{ title }}
{{ content | safe }}
Home
"""
@app.route("/", methods=["GET", "POST"])
def home():
if request.method == "POST":
username = request.form["username"]
conn = sqlite3.connect("chat.db")
c = conn.cursor()
try:
c.execute("INSERT INTO users (username) VALUES (?)", (username,))
conn.commit()
except:
pass
conn.close()
return redirect(url_for("chat", user=username))
content = """
"""
return render_template_string(layout, title="Login / Register", content=content)
@app.route("/chat/", methods=["GET", "POST"])
def chat(user):
conn = sqlite3.connect("chat.db")
c = conn.cursor()
# Get all users
c.execute("SELECT username FROM users WHERE username != ?", (user,))
users = [row[0] for row in c.fetchall()]
receiver = request.args.get("to")
messages = []
if receiver:
if request.method == "POST":
msg = request.form["message"]
c.execute("INSERT INTO messages (sender, receiver, text, timestamp) VALUES (?, ?, ?, ?)",
(user, receiver, msg, datetime.now().strftime("%H:%M")))
conn.commit()
c.execute("""SELECT sender, text, timestamp FROM messages
WHERE (sender=? AND receiver=?) OR (sender=? AND receiver=?)
ORDER BY id""", (user, receiver, receiver, user))
messages = c.fetchall()
conn.close()
user_list_html = "".join([f"{u}" for u in users])
chat_html = ""
if receiver:
chat_html = f"Chat with {receiver}
"
for m in messages:
css_class = "me" if m[0] == user else "them"
chat_html += f"
{m[0]}: {m[1]}{m[2]}
"
chat_html += "
"
chat_html += """
"""
content = f"""
Welcome {user}
Users:
{chat_html}
"""
return render_template_string(layout, title="Chat", content=content)
# --- Hidden Admin Reset Command ---
@app.route("/adminreset")
def admin_reset():
key = request.args.get("key")
if key != "supersecret123": # set your secret key here
return "Access Denied", 403
conn = sqlite3.connect("chat.db")
c = conn.cursor()
c.execute("DROP TABLE IF EXISTS users")
c.execute("DROP TABLE IF EXISTS messages")
conn.commit()
conn.close()
# Reinitialize tables
init_db()
return " Database wiped. All users, messages, and chats deleted."
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000, debug=True)
#http://127.0.0.1:5000/adminreset?key=supersecret123 to wipe all data