aboutsummaryrefslogtreecommitdiffstats
path: root/app.py
blob: f6532d286793c68acf1ee372f7788da52fbc4ad2 (plain)
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
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/<filename>", 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