File size: 1,900 Bytes
6dea265
5bc4351
382764a
 
 
21fe3fa
 
 
5bc4351
382764a
 
4d30d4b
 
 
 
6dea265
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
382764a
6dea265
 
 
 
 
5bc4351
6dea265
5bc4351
 
6dea265
382764a
6dea265
5bc4351
 
 
 
6dea265
5bc4351
6dea265
21fe3fa
6dea265
21fe3fa
6dea265
382764a
 
 
 
3b4c467
6dea265
382764a
4d30d4b
6dea265
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
from flask import Flask, request, jsonify, render_template, stream_with_context, Response
import os
import subprocess
import tempfile
import shutil

app = Flask(__name__)

# Create a temporary directory for operations
temp_dir = tempfile.mkdtemp()

@app.route("/")
def index():
    return render_template("index.html")

def execute_shell_command(command):
    """Executes a shell command and streams output."""
    process = subprocess.Popen(
        command,
        shell=True,
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE,
        text=True,
        cwd=temp_dir
    )
    for line in iter(process.stdout.readline, ""):
        yield f"{line}<br>"
    for line in iter(process.stderr.readline, ""):
        yield f"Error: {line}<br>"
    process.stdout.close()
    process.stderr.close()
    process.wait()

@app.route("/execute", methods=["POST"])
def execute_code():
    command = request.json.get("code", "").strip()
    if not command:
        return jsonify({"result": "Error: No command provided."})

    try:
        if command.startswith("!"):
            shell_command = command[1:]
            return Response(stream_with_context(execute_shell_command(shell_command)))
        else:
            process = subprocess.run(
                ["python3", "-c", command],
                stdout=subprocess.PIPE,
                stderr=subprocess.PIPE,
                text=True,
                cwd=temp_dir
            )
            return jsonify({"result": process.stdout + process.stderr})
    except Exception as e:
        return jsonify({"result": f"Error: {e}"})

@app.route("/cleanup", methods=["POST"])
def cleanup():
    global temp_dir
    if os.path.exists(temp_dir):
        shutil.rmtree(temp_dir)
    temp_dir = tempfile.mkdtemp()
    return jsonify({"result": "Temporary files cleaned up."})

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=7860)