Spaces:
Sleeping
Sleeping
File size: 3,669 Bytes
d1baa28 eddfd17 d1baa28 eddfd17 d1baa28 eddfd17 d1baa28 eddfd17 d1baa28 eddfd17 d1baa28 eddfd17 d1baa28 eddfd17 d1baa28 eddfd17 d1baa28 0f99f61 d1baa28 0f99f61 d1baa28 882d2ac d1baa28 882d2ac d1baa28 0f99f61 d1baa28 24a5b54 d1baa28 eddfd17 d1baa28 eddfd17 d1baa28 eddfd17 d1baa28 eddfd17 73df6d1 d1baa28 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | from flask import (
Flask, render_template, request, redirect,
url_for, send_from_directory, send_file, session, flash
)
import os, json
from werkzeug.utils import secure_filename
from datetime import timedelta
# ---------- basic config ----------
UPLOAD_ROOT = "uploaded_files" # root folder for *all* users
USERS_FILE = "users.json" # simple JSON registry
ALLOWED_EXTS = {"pdf", "txt", "mp3", "wav", "ogg"}
SECRET = os.getenv("SECRET_KEY", "change‑me")
os.makedirs(UPLOAD_ROOT, exist_ok=True)
app = Flask(__name__, static_url_path="/static")
app.config.update(
UPLOAD_ROOT=UPLOAD_ROOT,
SECRET_KEY=SECRET,
PERMANENT_SESSION_LIFETIME=timedelta(days=30),
)
# ---------- helpers ----------
def allowed(filename):
return "." in filename and filename.rsplit(".", 1)[1].lower() in ALLOWED_EXTS
def user_folder():
folder = os.path.join(UPLOAD_ROOT, session["username"])
os.makedirs(folder, exist_ok=True)
return folder
def load_users():
if not os.path.exists(USERS_FILE):
return []
with open(USERS_FILE) as f:
return json.load(f)
def save_user(name):
users = load_users()
if name not in users:
users.append(name)
with open(USERS_FILE, "w") as f:
json.dump(users, f)
# ---------- auth ----------
@app.route("/", methods=["GET", "POST"])
def login():
if request.method == "POST":
name = request.form.get("username", "").strip()
if not name:
flash("Pick a name first.")
return redirect(url_for("login"))
session.permanent = True
session["username"] = name
save_user(name)
return redirect(url_for("dashboard"))
return render_template("login.html")
@app.get("/logout")
def logout():
session.clear()
return redirect(url_for("login"))
# ---------- main UI ----------
@app.get("/dashboard")
def dashboard():
if "username" not in session:
return redirect(url_for("login"))
files = os.listdir(user_folder())
return render_template("index.html", files=files, user=session["username"])
# ---------- file handlers ----------
@app.post("/upload")
def upload_file():
if "username" not in session:
return redirect(url_for("login"))
for file in request.files.getlist("file"):
if file and allowed(file.filename):
file.save(os.path.join(user_folder(), secure_filename(file.filename)))
return redirect(url_for("dashboard"))
@app.get("/view/<path:filename>")
def view_file(filename):
path = os.path.join(user_folder(), filename)
if not os.path.exists(path):
return "File not found", 404
mime = {
"pdf": "application/pdf",
"txt": "text/plain",
"mp3": "audio/mpeg",
"wav": "audio/wav",
"ogg": "audio/ogg",
}.get(filename.rsplit(".", 1)[-1].lower(), "application/octet-stream")
return send_file(path, mimetype=mime, as_attachment=False)
@app.get("/download/<path:filename>")
def download_file(filename):
return send_from_directory(user_folder(), filename, as_attachment=True)
@app.post("/delete/<path:filename>")
def delete_file(filename):
try:
os.remove(os.path.join(user_folder(), filename))
except FileNotFoundError:
pass
return redirect(url_for("dashboard"))
@app.post("/clear")
def clear_all():
for f in os.listdir(user_folder()):
os.remove(os.path.join(user_folder(), f))
return redirect(url_for("dashboard"))
@app.route("/api/ping")
def ping():
return "pong", 200
# ---------- hf entry ----------
if __name__ == "__main__":
app.run(host="0.0.0.0", port=7860)
|