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/", 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)