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/") 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)