fix
This commit is contained in:
+29
-4
@@ -13,6 +13,7 @@ from ..config import (
|
||||
GENERATE_COMPOSE_SCRIPT,
|
||||
get_appfactory_host,
|
||||
get_gitea_public_url,
|
||||
is_allowed_worker_script,
|
||||
read_env_value,
|
||||
)
|
||||
from ..db.apps import (
|
||||
@@ -1520,10 +1521,34 @@ def create_app(
|
||||
|
||||
@router.post("/delete-app", response_class=HTMLResponse)
|
||||
def delete_app(app_id: str = Form(...), user=Depends(require_admin)):
|
||||
# Portál NEMAŽE workspace přímo – nemá k němu práva (rm padá na "Permission denied").
|
||||
# Místo toho zařadí run_script job; mazání (container, image, gitea repo, workspace)
|
||||
# provede Worker přes scripts/delete-app.sh s právy serveru. Veškerá runtime/Docker
|
||||
# logika patří do Workeru a shell skriptů, ne do portálu.
|
||||
# Portál NEMAŽE workspace/container/image/gitea repo přímo – běží bez práv k workspace,
|
||||
# takže rm padá na "Permission denied". Místo toho jen zařadí run_script job a mazání
|
||||
# provede Worker přes delete-app.sh s právy serveru. Veškerá runtime/Docker logika patří
|
||||
# do Workeru a shell skriptů, ne do portálu.
|
||||
#
|
||||
# KONTRAKT NÁZVU AKCE (proč dříve padalo "Invalid script name"):
|
||||
# - do jobu se ukládá HOLÝ název skriptu: script_name = "delete-app.sh"
|
||||
# (stejný formát jako ostatní run_script joby, viz preflight-check.sh / bootstrap-v2.sh
|
||||
# a portálová validace v scheduled_scripts.validate_script_name);
|
||||
# - Worker přijímá jen holý název, adresář scripts/ si doplní sám, a cokoli s cestou
|
||||
# ("scripts/delete-app.sh", "../...", absolutní cesta) odmítne jako "Invalid script name".
|
||||
# Job 221 padal právě proto, že se posílalo "scripts/delete-app.sh" (název s cestou).
|
||||
# Stejný allowlist/validaci děláme i tady, ať portál nikdy nezaloží job, který Worker zahodí.
|
||||
if not is_allowed_worker_script(DELETE_APP_SCRIPT_NAME):
|
||||
return render_result(
|
||||
title="Smazání služby: CHYBA",
|
||||
back_url="/portal/apps",
|
||||
sections=[
|
||||
(
|
||||
"Chyba",
|
||||
f"Neplatný název skriptu pro Worker job: '{DELETE_APP_SCRIPT_NAME}'. "
|
||||
"Musí to být holý povolený název bez cesty (např. 'delete-app.sh'), jinak "
|
||||
"Worker job odmítne hláškou 'Invalid script name'. Job nebyl vytvořen.",
|
||||
),
|
||||
],
|
||||
user=user,
|
||||
)
|
||||
|
||||
payload = {
|
||||
"script_name": DELETE_APP_SCRIPT_NAME,
|
||||
"args": [app_id],
|
||||
|
||||
Reference in New Issue
Block a user