import os from flask import Flask, request, jsonify, send_file, render_template app = Flask(__name__) UPLOAD_DIRECTORY = os.environ.get("UPLOAD_DIRECTORY", "./uploads") UPLOAD_TOKEN = os.environ.get("UPLOAD_TOKEN") @app.route("/upload", methods=["POST"]) def upload(): if UPLOAD_TOKEN and "Token" not in request.headers: return jsonify({"message": "No upload token provided"}), 401 token = request.headers.get("Token") if UPLOAD_TOKEN and token != UPLOAD_TOKEN: return jsonify({"message": "Invalid upload token"}), 401 if "file" not in request.files: return jsonify({"message": "No file found"}), 400 file = request.files["file"] if file.filename == "": return jsonify({"message": "No file found"}), 400 if not os.path.exists(UPLOAD_DIRECTORY): os.makedirs(UPLOAD_DIRECTORY) file.save(os.path.join(UPLOAD_DIRECTORY, file.filename)) return jsonify({"message": "File saved successfully"}), 200 @app.route("/download/", methods=["GET"]) def download(filename): file_path = os.path.join(UPLOAD_DIRECTORY, filename) if not os.path.exists(file_path): return jsonify({"message": "File not found"}), 404 return send_file(file_path, as_attachment=True) @app.route("/", methods=["GET"]) def index(): files = [] for filename in os.listdir(UPLOAD_DIRECTORY): filepath = os.path.join(UPLOAD_DIRECTORY, filename) if os.path.isfile(filepath): files.append({"name": filename, "size": os.path.getsize(filepath)}) return render_template("index.html", files=files) @app.route("/metrics", methods=["GET"]) def metrics(): files = os.listdir(UPLOAD_DIRECTORY) file_count = len(files) total_size = sum(os.path.getsize(os.path.join(UPLOAD_DIRECTORY, f)) for f in files) file_list = [{"name": f, "size": os.path.getsize(os.path.join(UPLOAD_DIRECTORY, f))} for f in files] return jsonify({"count": file_count, "total_size": total_size, "files": file_list}), 200 # Upload # curl -X POST -H "Authorization: Bearer myuploadtoken" -F "file=@/path/to/file" http://docker10.grote.lan:5040/upload # Download # curl -X GET http://docker10.grote.lan:5040/download/filename.ext > filename.ext # List #$ curl -X GET http://docker10.grote.lan:5040/files # Metriken # curl -X GET http://docker10.grote.lan:5040/metrics # farben im putput weg # wsgi server