Skip to content

🚀 פיצ'ר: מימוש הרצת קוד (Code Execution) בווב-אפ #2598

Description

@amirbiron

🚀 פיצ'ר: מימוש הרצת קוד (Code Execution) בווב-אפ

תיאור
הוספת יכולת להריץ קוד Python ("סביבת Playground") בצורה מאובטחת ישירות מתוך ממשק ה-Code Tools בווב-אפ.
המימוש יתבסס על ארכיטקטורת Docker Sandbox כדי להבטיח בידוד מוחלט מהשרת.

שינוי מהמדריך המקורי: הפיצ'ר יהיה זמין למשתמשי Premium בנוסף לאדמינים.


📋 דרישות ותכולה (Scope)

1. Backend Service (services/code_execution_service.py)

  • יצירת שירות CodeExecutionService המנהל הרצת קוד.
  • Docker Sandbox: הרצה בתוך קונטיינר מבודד (python:3.11-slim).
  • אבטחה והגבלות:
    • fail-closed: אם אין Docker בפרודקשן - אין הרצה.
    • חסימת גישה לרשת (--network none).
    • Read-only filesystem עם /tmp מוגבל.
    • הגבלת משאבים (Memory, CPU, PIDs).
    • Timeout קשיח (ברירת מחדל 5-30 שניות).

2. API & Permissions (webapp/code_tools_api.py)

  • הוספת Endpoint חדש: POST /api/code/run.
  • עדכון מודל הרשאות:
    • ה-Endpoint חייב להיות פתוח למשתמשים בעלי הרשאת is_premium בנוסף ל-is_admin.
    • הערה: יש לוודא שה-before_request הקיים ב-Blueprint לא חוסם משתמשי פרימיום, או להחריג את ה-Endpoint הספציפי הזה.
  • הוספת Endpoint לקבלת מגבלות: GET /api/code/run/limits.
  • בדיקת Feature Flag (FEATURE_CODE_EXECUTION).

3. Frontend (code_tools.html, code-tools-page.js)

  • הוספת כפתור "▶️ הרץ" ב-Toolbar (קיצור מקלדת: Ctrl+Enter).
  • הוספת אזור תצוגה חדש: "פלט" (Output Console).
  • הצגת סטטוס ריצה (Loading / Success / Error).
  • הצגת stdout, stderr ו-exit code בצורה קריאה.
  • טיפול ב-Disabled State אם הפיצ'ר כבוי בשרת.

4. Infrastructure & Config

  • הוספת משתני סביבה (.env):
    • FEATURE_CODE_EXECUTION=true
    • CODE_EXEC_USE_DOCKER=true
    • הגדרות Timeout ו-Memory.
  • וידוא שה-Docker Image קיים בשרת (python:3.11-slim).
  • מנגנון ניקוי קונטיינרים "יתומים" (Cleanup).

🔒 דגשי אבטחה קריטיים

  1. בידוד: אסור לאפשר לקוד המורץ גישה לקבצי השרת, למסד הנתונים או לרשת החיצונית.
  2. Logging: אין לכתוב ללוגים את הקוד שהמשתמש הריץ או את הפלט שלו (מחשש למידע רגיש).
  3. Privileges: הקונטיינר ירוץ ללא הרשאות (--user=nobody, --cap-drop=ALL).

✅ קריטריונים לקבלה (DoD)

  1. משתמש אדמין ומשתמש פרימיום יכולים להריץ קוד ולקבל פלט.
  2. משתמש רגיל (Free) מקבל שגיאת הרשאה (403).
  3. קוד עם לולאה אינסופית נעצר אוטומטית (Timeout).
  4. קוד שמנסה לגשת לרשת או לקבצים נחסם/נכשל.
  5. בדיקות (Unit & Integration) עוברות בהצלחה.

אם נוספו/שונו משתני סביבה – עדכן docs/environment-variables.rst וגם services/config_inspector_service.py


🔒 דרישת מימוש 1:1

חובה להצמד במדויק למדריך המצורף

כללים:

  • מימוש מלא: אל תקצר חלקים שמוצעים במדריך
  • אם חייב לסטות: תעצור ותתעד ב-"Delta מהמדריך" (מקסימום 5 דלתאות)

המדריך

No activity

Activity on this issue will appear here.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions