File size: 2,047 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
 
 
 
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
67
68
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 the command starts with "!", treat it as a shell command
        if command.startswith("!"):
            shell_command = command[1:]
            return Response(stream_with_context(execute_shell_command(shell_command)))
        else:
            # Treat the command as Python code
            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()  # Recreate for a new session
    return jsonify({"result": "Temporary files cleaned up."})

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