basic_cmt / app.py
issamlaradji's picture
Upload 3 files
897006f verified
from flask import Flask, render_template, request, redirect, url_for, session, flash
import json
import os
from datetime import datetime
from pathlib import Path
app = Flask(__name__)
app.secret_key = "your-secret-key-change-in-production"
DATA_DIR = Path("data")
USERS_FILE = DATA_DIR / "users.json"
# Initialize data directory and default user
def init_data():
DATA_DIR.mkdir(exist_ok=True)
if not USERS_FILE.exists():
default_user = {"admin": {"password": "123"}}
with open(USERS_FILE, "w") as f:
json.dump(default_user, f)
init_data()
# User management
def load_users():
with open(USERS_FILE, "r") as f:
return json.load(f)
def save_users(users):
with open(USERS_FILE, "w") as f:
json.dump(users, f, indent=2)
# Note management
def get_user_notes(username):
user_dir = DATA_DIR / username
if not user_dir.exists():
return []
notes = []
for note_file in sorted(user_dir.glob("note_*.txt"), reverse=True):
timestamp = note_file.stem.replace("note_", "")
with open(note_file, "r") as f:
content = f.read()
notes.append(
{"timestamp": timestamp, "content": content, "filename": note_file.name}
)
return notes
def save_note(username, content):
user_dir = DATA_DIR / username
user_dir.mkdir(exist_ok=True)
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
note_file = user_dir / f"note_{timestamp}.txt"
with open(note_file, "w") as f:
f.write(content)
def delete_note(username, filename):
note_file = DATA_DIR / username / filename
if note_file.exists():
note_file.unlink()
# Routes
@app.route("/")
def index():
if "username" in session:
return redirect(url_for("dashboard"))
return render_template("index.html", page="login")
@app.route("/login", methods=["POST"])
def login():
username = request.form.get("username")
password = request.form.get("password")
users = load_users()
if username in users and users[username]["password"] == password:
session["username"] = username
return redirect(url_for("dashboard"))
flash("Invalid credentials", "error")
return redirect(url_for("index"))
@app.route("/signup", methods=["GET", "POST"])
def signup():
if request.method == "GET":
return render_template("index.html", page="signup")
username = request.form.get("username")
password = request.form.get("password")
users = load_users()
if username in users:
flash("Username already exists", "error")
return redirect(url_for("signup"))
users[username] = {"password": password}
save_users(users)
session["username"] = username
return redirect(url_for("dashboard"))
@app.route("/dashboard")
def dashboard():
if "username" not in session:
return redirect(url_for("index"))
username = session["username"]
notes = get_user_notes(username)
return render_template(
"index.html", page="dashboard", username=username, notes=notes
)
@app.route("/add_note", methods=["POST"])
def add_note():
if "username" not in session:
return redirect(url_for("index"))
content = request.form.get("content", "").strip()
if content:
save_note(session["username"], content)
flash("Note added successfully", "success")
return redirect(url_for("dashboard"))
@app.route("/delete_note/<filename>")
def delete_note_route(filename):
if "username" not in session:
return redirect(url_for("index"))
delete_note(session["username"], filename)
flash("Note deleted", "success")
return redirect(url_for("dashboard"))
@app.route("/logout")
def logout():
session.pop("username", None)
return redirect(url_for("index"))
if __name__ == "__main__":
app.run(debug=True)