File size: 1,628 Bytes
be71427
 
 
 
 
 
 
 
 
 
 
 
 
 
e469fa8
be71427
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from flask import Flask, render_template, request, jsonify, send_from_directory
from flask_cors import CORS
import os

app = Flask(__name__)
CORS(app)

ISO_PATH = "/home/user/iso/nyarch.iso"
ISO_DIR = "/home/user/iso"
NOVNC_PATH = "/usr/share/novnc"


@app.route("/")
def index():
    return send_from_directory(NOVNC_PATH, "vnc.html")


@app.route("/upload", methods=["POST"])
def upload_chunk():
    chunk = request.files.get("chunk")
    chunk_number = int(request.form.get("chunkNumber", 0))
    total_chunks = int(request.form.get("totalChunks", 1))

    if chunk:
        os.makedirs(ISO_DIR, exist_ok=True)

        mode = "wb" if chunk_number == 0 else "ab"
        with open(ISO_PATH, mode) as f:
            f.write(chunk.read())

        if chunk_number + 1 >= total_chunks:
            return jsonify({"status": "complete"})

        progress = int((chunk_number + 1) / total_chunks * 100)
        return jsonify({"status": "uploading", "progress": progress})

    return jsonify({"status": "error"}), 400


@app.route("/status")
def status():
    iso_exists = os.path.exists(ISO_PATH)
    iso_size = os.path.getsize(ISO_PATH) if iso_exists else 0

    return jsonify(
        {
            "iso_exists": iso_exists,
            "iso_size": iso_size,
            "iso_size_mb": round(iso_size / 1024 / 1024, 2),
        }
    )


@app.route("/novnc/")
@app.route("/novnc/<path:filename>")
def serve_novnc(filename="vnc.html"):
    return send_from_directory(NOVNC_PATH, filename)


if __name__ == "__main__":
    os.makedirs(ISO_DIR, exist_ok=True)
    app.run(host="0.0.0.0", port=7860, debug=False, threaded=True)