THEZYZSTUDIO commited on
Commit
b6236e7
·
verified ·
1 Parent(s): a141c87

Update pc_agent.py

Browse files
Files changed (1) hide show
  1. pc_agent.py +37 -11
pc_agent.py CHANGED
@@ -1,26 +1,52 @@
1
  import subprocess, os, tempfile, shutil
2
  from pathlib import Path
3
 
4
- WORKSPACE = Path(tempfile.mkdtemp(prefix="zai_workspace_"))
 
 
 
 
 
 
5
 
6
  def run_command(cmd: str, timeout: int = 30) -> dict:
7
- dangerous = ["rm -rf /", "mkfs", "dd if=", "shutdown", "reboot", "curl", "wget"]
8
- if any(d in cmd.lower() for d in dangerous):
9
- return {"output": "⛔ أمر غير مسموح به لأسباب أمنية.", "error": True}
 
 
 
 
 
 
 
 
 
 
 
 
10
  try:
11
  result = subprocess.run(
12
- cmd, shell=True, cwd=str(WORKSPACE),
13
- capture_output=True, text=True, timeout=timeout
14
  )
15
  out = result.stdout.strip() or result.stderr.strip() or "(لا يوجد مخرج)"
16
- return {"output": out, "error": result.returncode != 0}
17
  except subprocess.TimeoutExpired:
18
- return {"output": "⏳ انتهى الوقت المحدد للأمر (30 ثانية).", "error": True}
19
  except Exception as e:
20
- return {"output": f"❌ خطأ: {str(e)}", "error": True}
21
 
22
  def list_files():
23
- return [str(p.relative_to(WORKSPACE)) for p in WORKSPACE.rglob("*") if p.is_file()]
 
24
 
25
  def cleanup():
26
- shutil.rmtree(WORKSPACE, ignore_errors=True)
 
 
 
 
 
 
 
 
1
  import subprocess, os, tempfile, shutil
2
  from pathlib import Path
3
 
4
+ # مجلد عمل مرن يُفحص ويُعاد إنشاؤه تلقائياً عند الحاجة
5
+ WORKSPACE_ROOT = Path(tempfile.gettempdir()) / "zai_workspace"
6
+
7
+ def ensure_workspace():
8
+ WORKSPACE_ROOT.mkdir(parents=True, exist_ok=True)
9
+ (WORKSPACE_ROOT / "uploads").mkdir(exist_ok=True)
10
+ return WORKSPACE_ROOT
11
 
12
  def run_command(cmd: str, timeout: int = 30) -> dict:
13
+ ws = ensure_workspace()
14
+
15
+ # قائمة سوداء شاملة + منع تجاوز الصلاحيات
16
+ dangerous_patterns = [
17
+ "rm -rf", "mkfs", "dd if=", "shutdown", "reboot", "curl", "wget",
18
+ "pip install", "pip3", "python -c", "python3 -c", "bash -c", "sh -c",
19
+ "eval(", "exec(", "sudo", "chmod 777", "chown", "nc ", "nmap", "base64 -d"
20
+ ]
21
+ cmd_lower = cmd.lower()
22
+ if any(p in cmd_lower for p in dangerous_patterns):
23
+ return {"output": "⛔ أمر محظور لأسباب أمنية.", "error": True, "code": 403}
24
+
25
+ # عزل البيئة لمنع الوصول لمتغيرات النظام الحساسة
26
+ safe_env = {"PATH": "/usr/local/bin:/usr/bin:/bin", "HOME": str(ws), "TERM": "xterm"}
27
+
28
  try:
29
  result = subprocess.run(
30
+ cmd, shell=True, cwd=str(ws),
31
+ capture_output=True, text=True, timeout=timeout, env=safe_env
32
  )
33
  out = result.stdout.strip() or result.stderr.strip() or "(لا يوجد مخرج)"
34
+ return {"output": out, "error": result.returncode != 0, "code": 200 if result.returncode == 0 else 400}
35
  except subprocess.TimeoutExpired:
36
+ return {"output": "⏳ انتهى الوقت المحدد للأمر (30 ثانية).", "error": True, "code": 408}
37
  except Exception as e:
38
+ return {"output": f"❌ خطأ تنفيذ: {str(e)}", "error": True, "code": 500}
39
 
40
  def list_files():
41
+ ws = ensure_workspace()
42
+ return [str(p.relative_to(ws)) for p in ws.rglob("*") if p.is_file()]
43
 
44
  def cleanup():
45
+ ws = ensure_workspace()
46
+ # حذف المحتويات فقط مع الحفاظ على مجلد العمل نفسه
47
+ for item in ws.iterdir():
48
+ if item.is_dir():
49
+ shutil.rmtree(item)
50
+ else:
51
+ item.unlink()
52
+ return True