from fastapi import FastAPI, Request, Form
from fastapi.responses import HTMLResponse, RedirectResponse
import sqlite3
app = FastAPI()
conn = sqlite3.connect("chat.db", check_same_thread=False)
c = conn.cursor()
c.execute("""
CREATE TABLE IF NOT EXISTS users(
username TEXT,
password TEXT
)
""")
c.execute("""
CREATE TABLE IF NOT EXISTS messages(
username TEXT,
message TEXT
)
""")
conn.commit()
@app.get("/", response_class=HTMLResponse)
def home():
return """
Emalawi19 Chat
Login
Register
"""
@app.get("/register", response_class=HTMLResponse)
def register_page():
return """
Register
"""
@app.post("/register")
def register(username: str = Form(...), password: str = Form(...)):
c.execute("INSERT INTO users VALUES(?,?)",(username,password))
conn.commit()
return RedirectResponse("/login", status_code=302)
@app.get("/login", response_class=HTMLResponse)
def login_page():
return """
Login
"""
@app.post("/login")
def login(username: str = Form(...), password: str = Form(...)):
user = c.execute(
"SELECT * FROM users WHERE username=? AND password=?",
(username,password)
).fetchone()
if user:
return RedirectResponse(f"/chat/{username}", status_code=302)
return "Login failed"
@app.get("/chat/{username}", response_class=HTMLResponse)
def chat(username: str):
msgs = c.execute("SELECT username,message FROM messages").fetchall()
chat_html = ""
for u,m in msgs:
chat_html += f"{u}: {m}
"
return f"""
Emalawi19 Chat - {username}
{chat_html}
"""
@app.post("/send/{username}")
def send(username: str, message: str = Form(...)):
c.execute("INSERT INTO messages VALUES(?,?)",(username,message))
conn.commit()
return RedirectResponse(f"/chat/{username}", status_code=302)
# IMPORTANT: start server
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=7860)