diff --git a/backend/windmill-api/src/apps.rs b/backend/windmill-api/src/apps.rs index adb84be856..bcc3cb115d 100644 --- a/backend/windmill-api/src/apps.rs +++ b/backend/windmill-api/src/apps.rs @@ -495,6 +495,13 @@ async fn delete_app( Path((w_id, path)): Path<(String, StripPath)>, ) -> Result { let path = path.to_path(); + + if path == "g/all/setup_app" && w_id == "admins" { + return Err(Error::BadRequest( + "Cannot delete the global setup app".to_string(), + )); + } + let mut tx = user_db.begin(&authed).await?; sqlx::query!( diff --git a/backend/windmill-api/src/scripts.rs b/backend/windmill-api/src/scripts.rs index 53757d4e1a..6dfdb6f984 100644 --- a/backend/windmill-api/src/scripts.rs +++ b/backend/windmill-api/src/scripts.rs @@ -842,9 +842,15 @@ async fn delete_script_by_path( Extension(db): Extension, Path((w_id, path)): Path<(String, StripPath)>, ) -> JsonResult { - let mut tx = user_db.begin(&authed).await?; let path = path.to_path(); + if path == "u/admin/hub_sync" && w_id == "admins" { + return Err(Error::BadRequest( + "Cannot delete the global setup app".to_string(), + )); + } + let mut tx = user_db.begin(&authed).await?; + let draft_only = sqlx::query_scalar!( "SELECT draft_only FROM script WHERE path = $1 AND workspace_id = $2", path,