File size: 3,875 Bytes
a15e38b 5bc4351 2c91ea0 382764a a15e38b 21fe3fa 2c91ea0 a15e38b 4d30d4b a15e38b 1917e67 a15e38b 2c91ea0 2a6bd1c a15e38b a794cee a15e38b 2a6bd1c a15e38b |
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 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
from flask import Flask, request, jsonify, render_template, send_from_directory
import os
import subprocess
import tempfile
import shutil
import sys
app = Flask(__name__)
# Create a temporary directory for operations
temp_dir = tempfile.mkdtemp()
current_dir = temp_dir
def execute_command(command, cwd=None):
"""Executes a command and returns the output."""
process = subprocess.Popen(
command,
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True,
cwd=cwd or current_dir
)
stdout, stderr = process.communicate()
return stdout + stderr
@app.route("/")
def index():
return render_template("index.html")
@app.route("/execute", methods=["POST"])
def execute_code():
global current_dir
command = request.json.get("code", "").strip()
if not command:
return jsonify({"result": "Error: No command provided."})
try:
if command == "show files":
files = os.listdir(current_dir)
return jsonify({"result": "Files in current directory:\n" + "\n".join(files)})
elif command == "hide files":
return jsonify({"result": "Files hidden."})
elif command.startswith("new file "):
filename = command[9:].strip()
filepath = os.path.join(current_dir, filename)
with open(filepath, 'w') as f:
pass # Create an empty file
return jsonify({"result": f"Created new file: {filename}"})
elif command.startswith("edit "):
filename = command[5:].strip()
filepath = os.path.join(current_dir, filename)
if os.path.exists(filepath):
return jsonify({"result": "Enter code:", "action": "edit", "filename": filename})
else:
return jsonify({"result": f"Error: File {filename} not found."})
elif command.startswith("cd "):
new_dir = os.path.join(current_dir, command[3:])
if os.path.isdir(new_dir):
current_dir = os.path.abspath(new_dir)
return jsonify({"result": f"Changed directory to: {current_dir}"})
else:
return jsonify({"result": f"Error: Directory not found: {new_dir}"})
elif command.startswith("!"):
result = execute_command(command[1:])
elif command.startswith("pip install"):
result = execute_command(f"{sys.executable} -m {command}")
elif command.startswith("git "):
result = execute_command(command)
else:
if command.endswith(".py"):
result = execute_command(f"{sys.executable} {command}")
else:
result = execute_command(f"{sys.executable} -c \"{command}\"")
return jsonify({"result": result})
except Exception as e:
return jsonify({"result": f"Error: {str(e)}"})
@app.route("/save_file", methods=["POST"])
def save_file():
filename = request.json.get("filename")
content = request.json.get("content")
filepath = os.path.join(current_dir, filename)
with open(filepath, 'w') as f:
f.write(content)
return jsonify({"result": f"File {filename} saved successfully."})
@app.route("/cleanup", methods=["POST"])
def cleanup():
global temp_dir, current_dir
if os.path.exists(temp_dir):
shutil.rmtree(temp_dir)
temp_dir = tempfile.mkdtemp()
current_dir = temp_dir
return jsonify({"result": "Temporary files cleaned up."})
@app.route("/list_files", methods=["GET"])
def list_files():
files = os.listdir(current_dir)
return jsonify({"files": files})
@app.route("/download/<path:filename>", methods=["GET"])
def download_file(filename):
return send_from_directory(current_dir, filename, as_attachment=True)
if __name__ == "__main__":
app.run(host="0.0.0.0", port=7860) |