From 0014f3558c6412d62a2435a145078a5ec3836620 Mon Sep 17 00:00:00 2001 From: Arne Zachlod Date: Thu, 20 Feb 2025 18:05:17 +0100 Subject: [PATCH] basic upload server written in flask --- server/server.py | 63 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 server/server.py diff --git a/server/server.py b/server/server.py new file mode 100644 index 0000000..c7fb977 --- /dev/null +++ b/server/server.py @@ -0,0 +1,63 @@ +from flask import Flask, request, jsonify, abort +from werkzeug.utils import secure_filename + +from datetime import datetime +import uuid +import sys +import os + + +# client require to have Access-Token set to this +SECRET = "Ti0TahcaiN0Ahkeb1eegaiv6gu" + +# storage path +STORAGE = "/srv/sdlogger/upload" +STORAGE = "/tmp/sdlogger" + +# 20 mb +MAX_CONTENT_LENGTH = 20 * 1024 * 1024 + +use_redis = False +app = Flask(__name__) +app.config['MAX_CONTENT_LENGTH'] = MAX_CONTENT_LENGTH + +@app.route("/", methods=['GET', 'POST']) +def root(): + return "sdlogger uploader" + +@app.route("/upload/", methods=['POST']) +def upload_file(filename): + try: + token = request.headers.get('Access-Token') + if token != SECRET: + abort(403) + except: + abort(403) + + filename = secure_filename(filename) + prefix = datetime.now().strftime("%Y-%m-%d_%H:%M:%S") + prefix += '_' + str(uuid.uuid1()) + filename = prefix + '_' + filename + fullpath = os.path.join(STORAGE, filename) + + with open(fullpath, 'wb') as file: + chunk_size = 1024 + while True: + chunk = request.stream.read(chunk_size) + if len(chunk) == 0: + break + file.write(chunk) + + return jsonify({}) + +if __name__ == '__main__': + host = "192.168.133.197" + port = 80 + + if len(sys.argv) > 1: + host = sys.argv[1] + if len(sys.argv) > 2: + port = int(sys.argv[2]) + + # TODO: check if STORAGE is available and writeable + app.run(host=host, port=port)