Spaces:
Sleeping
Sleeping
| 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 | |
| def index(): | |
| if "username" in session: | |
| return redirect(url_for("dashboard")) | |
| return render_template("index.html", page="login") | |
| 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")) | |
| 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")) | |
| 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 | |
| ) | |
| 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")) | |
| 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")) | |
| def logout(): | |
| session.pop("username", None) | |
| return redirect(url_for("index")) | |
| if __name__ == "__main__": | |
| app.run(debug=True) | |