From 2dd04117276e13401285ebd74a7dcfc607480873 Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Fri, 26 Jan 2024 09:26:33 +0100 Subject: [PATCH] fix: git sync include changing permissions on folders --- ...a039a6ea6697e5a49a633b767c052aa3e0a18.json | 1 + ...3ee6b27c836197df6454d3bb5c59441c34f44.json | 1 + ...bd26be90efb17a4323b9673e93ff88513942a.json | 1 + ...2e47f57de0f073d3ce3bc7d21a7e404a83b5c.json | 1 + ...0bccb19beeb9ddfa308ca97f254cd5ba8157e.json | 1 + ...7f5033b9c9afc344d9c3e385ba20a3ad2197a.json | 2 +- ...f7f6231a44b6ef5a52754074d136007f4f72a.json | 1 + ...64a37b980d3e9b1ceb23f69b9729b73e0bd33.json | 23 +++++++++++ ...eda837cc63e4d8be912c0b5bfeea4a0c8db2e.json | 1 + ...2433e1485324ff7dc802fe75d21c8c6db1d42.json | 1 + ...f22991f51e1c945efc2924df6253d62b83bba.json | 1 + backend/windmill-api/src/folders.rs | 29 ++++++++++++++ backend/windmill-api/src/granular_acls.rs | 39 ++++++++++++++++++- backend/windmill-git-sync/src/lib.rs | 4 +- 14 files changed, 102 insertions(+), 4 deletions(-) create mode 100644 backend/.sqlx/query-7bb9808f744590c0a962053e28564a37b980d3e9b1ceb23f69b9729b73e0bd33.json diff --git a/backend/.sqlx/query-0a686ca61444d7ad7484071727aa039a6ea6697e5a49a633b767c052aa3e0a18.json b/backend/.sqlx/query-0a686ca61444d7ad7484071727aa039a6ea6697e5a49a633b767c052aa3e0a18.json index 053857a0a0..aa608ecc57 100644 --- a/backend/.sqlx/query-0a686ca61444d7ad7484071727aa039a6ea6697e5a49a633b767c052aa3e0a18.json +++ b/backend/.sqlx/query-0a686ca61444d7ad7484071727aa039a6ea6697e5a49a633b767c052aa3e0a18.json @@ -48,6 +48,7 @@ "bash", "postgresql", "nativets", + "Nativets", "bun", "mysql", "bigquery", diff --git a/backend/.sqlx/query-254776959f60455a00a2c29a1783ee6b27c836197df6454d3bb5c59441c34f44.json b/backend/.sqlx/query-254776959f60455a00a2c29a1783ee6b27c836197df6454d3bb5c59441c34f44.json index 03bd3e00c1..b2421d64f2 100644 --- a/backend/.sqlx/query-254776959f60455a00a2c29a1783ee6b27c836197df6454d3bb5c59441c34f44.json +++ b/backend/.sqlx/query-254776959f60455a00a2c29a1783ee6b27c836197df6454d3bb5c59441c34f44.json @@ -69,6 +69,7 @@ "bash", "postgresql", "nativets", + "Nativets", "bun", "mysql", "bigquery", diff --git a/backend/.sqlx/query-260feb784bb0b223bd9276d6a82bd26be90efb17a4323b9673e93ff88513942a.json b/backend/.sqlx/query-260feb784bb0b223bd9276d6a82bd26be90efb17a4323b9673e93ff88513942a.json index 38795ced69..d3ccc22ef2 100644 --- a/backend/.sqlx/query-260feb784bb0b223bd9276d6a82bd26be90efb17a4323b9673e93ff88513942a.json +++ b/backend/.sqlx/query-260feb784bb0b223bd9276d6a82bd26be90efb17a4323b9673e93ff88513942a.json @@ -28,6 +28,7 @@ "bash", "postgresql", "nativets", + "Nativets", "bun", "mysql", "bigquery", diff --git a/backend/.sqlx/query-2f42460fdd8aa125c8fd46b3cd02e47f57de0f073d3ce3bc7d21a7e404a83b5c.json b/backend/.sqlx/query-2f42460fdd8aa125c8fd46b3cd02e47f57de0f073d3ce3bc7d21a7e404a83b5c.json index 030a85c000..c9110033a5 100644 --- a/backend/.sqlx/query-2f42460fdd8aa125c8fd46b3cd02e47f57de0f073d3ce3bc7d21a7e404a83b5c.json +++ b/backend/.sqlx/query-2f42460fdd8aa125c8fd46b3cd02e47f57de0f073d3ce3bc7d21a7e404a83b5c.json @@ -42,6 +42,7 @@ "bash", "postgresql", "nativets", + "Nativets", "bun", "mysql", "bigquery", diff --git a/backend/.sqlx/query-620ddf29c5e867079df4c2aa6e80bccb19beeb9ddfa308ca97f254cd5ba8157e.json b/backend/.sqlx/query-620ddf29c5e867079df4c2aa6e80bccb19beeb9ddfa308ca97f254cd5ba8157e.json index 4598ac08df..89583ff5ef 100644 --- a/backend/.sqlx/query-620ddf29c5e867079df4c2aa6e80bccb19beeb9ddfa308ca97f254cd5ba8157e.json +++ b/backend/.sqlx/query-620ddf29c5e867079df4c2aa6e80bccb19beeb9ddfa308ca97f254cd5ba8157e.json @@ -62,6 +62,7 @@ "bash", "postgresql", "nativets", + "Nativets", "bun", "mysql", "bigquery", diff --git a/backend/.sqlx/query-661f472ff3860983322162420457f5033b9c9afc344d9c3e385ba20a3ad2197a.json b/backend/.sqlx/query-661f472ff3860983322162420457f5033b9c9afc344d9c3e385ba20a3ad2197a.json index 1fa370e682..75b8108281 100644 --- a/backend/.sqlx/query-661f472ff3860983322162420457f5033b9c9afc344d9c3e385ba20a3ad2197a.json +++ b/backend/.sqlx/query-661f472ff3860983322162420457f5033b9c9afc344d9c3e385ba20a3ad2197a.json @@ -5,7 +5,7 @@ "columns": [ { "ordinal": 0, - "name": "bool", + "name": "?column?", "type_info": "Bool" } ], diff --git a/backend/.sqlx/query-6b313cc9a57ae3c943bda4a3213f7f6231a44b6ef5a52754074d136007f4f72a.json b/backend/.sqlx/query-6b313cc9a57ae3c943bda4a3213f7f6231a44b6ef5a52754074d136007f4f72a.json index 72c175aff7..7d9d04bc37 100644 --- a/backend/.sqlx/query-6b313cc9a57ae3c943bda4a3213f7f6231a44b6ef5a52754074d136007f4f72a.json +++ b/backend/.sqlx/query-6b313cc9a57ae3c943bda4a3213f7f6231a44b6ef5a52754074d136007f4f72a.json @@ -37,6 +37,7 @@ "bash", "postgresql", "nativets", + "Nativets", "bun", "mysql", "bigquery", diff --git a/backend/.sqlx/query-7bb9808f744590c0a962053e28564a37b980d3e9b1ceb23f69b9729b73e0bd33.json b/backend/.sqlx/query-7bb9808f744590c0a962053e28564a37b980d3e9b1ceb23f69b9729b73e0bd33.json new file mode 100644 index 0000000000..dfed5dcbb9 --- /dev/null +++ b/backend/.sqlx/query-7bb9808f744590c0a962053e28564a37b980d3e9b1ceb23f69b9729b73e0bd33.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT app.versions[array_upper(app.versions, 1)] FROM app WHERE path = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "versions", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "7bb9808f744590c0a962053e28564a37b980d3e9b1ceb23f69b9729b73e0bd33" +} diff --git a/backend/.sqlx/query-9d3556319411a27a875bf6cf0e5eda837cc63e4d8be912c0b5bfeea4a0c8db2e.json b/backend/.sqlx/query-9d3556319411a27a875bf6cf0e5eda837cc63e4d8be912c0b5bfeea4a0c8db2e.json index f296c4afc6..983c1586f0 100644 --- a/backend/.sqlx/query-9d3556319411a27a875bf6cf0e5eda837cc63e4d8be912c0b5bfeea4a0c8db2e.json +++ b/backend/.sqlx/query-9d3556319411a27a875bf6cf0e5eda837cc63e4d8be912c0b5bfeea4a0c8db2e.json @@ -42,6 +42,7 @@ "bash", "postgresql", "nativets", + "Nativets", "bun", "mysql", "bigquery", diff --git a/backend/.sqlx/query-b69891c25dd029b1a54e97ace292433e1485324ff7dc802fe75d21c8c6db1d42.json b/backend/.sqlx/query-b69891c25dd029b1a54e97ace292433e1485324ff7dc802fe75d21c8c6db1d42.json index f95d9d95b2..86a1402ad0 100644 --- a/backend/.sqlx/query-b69891c25dd029b1a54e97ace292433e1485324ff7dc802fe75d21c8c6db1d42.json +++ b/backend/.sqlx/query-b69891c25dd029b1a54e97ace292433e1485324ff7dc802fe75d21c8c6db1d42.json @@ -42,6 +42,7 @@ "bash", "postgresql", "nativets", + "Nativets", "bun", "mysql", "bigquery", diff --git a/backend/.sqlx/query-ef132ac8d79579b08d7359789b6f22991f51e1c945efc2924df6253d62b83bba.json b/backend/.sqlx/query-ef132ac8d79579b08d7359789b6f22991f51e1c945efc2924df6253d62b83bba.json index 73af3f369c..9ea1ab28f3 100644 --- a/backend/.sqlx/query-ef132ac8d79579b08d7359789b6f22991f51e1c945efc2924df6253d62b83bba.json +++ b/backend/.sqlx/query-ef132ac8d79579b08d7359789b6f22991f51e1c945efc2924df6253d62b83bba.json @@ -42,6 +42,7 @@ "bash", "postgresql", "nativets", + "Nativets", "bun", "mysql", "bigquery", diff --git a/backend/windmill-api/src/folders.rs b/backend/windmill-api/src/folders.rs index 37df06e6e7..463e016326 100644 --- a/backend/windmill-api/src/folders.rs +++ b/backend/windmill-api/src/folders.rs @@ -32,6 +32,7 @@ use windmill_common::{ use serde::{Deserialize, Serialize}; use sqlx::{FromRow, Postgres, Transaction}; +use windmill_git_sync::{handle_deployment_metadata, DeployedObject}; pub fn workspaced_service() -> Router { Router::new() @@ -150,8 +151,10 @@ lazy_static! { async fn create_folder( authed: ApiAuthed, Tokened { token }: Tokened, + Extension(db): Extension, Extension(user_db): Extension, Extension(webhook): Extension, + Extension(rsmq): Extension>, Extension(cache): Extension>, Path(w_id): Path, Json(ng): Json, @@ -203,6 +206,18 @@ async fn create_folder( .execute(&mut *tx) .await?; + handle_deployment_metadata( + &authed.email, + &authed.username, + &db, + &w_id, + DeployedObject::Folder { path: format!("f/{}/folder.meta.*", ng.name) }, + Some(format!("Folder '{}' created", ng.name)), + rsmq, + true, + ) + .await?; + audit_log( &mut *tx, &authed.username, @@ -450,7 +465,9 @@ async fn get_folder_usage( async fn delete_folder( authed: ApiAuthed, + Extension(db): Extension, Extension(user_db): Extension, + Extension(rsmq): Extension>, Extension(webhook): Extension, Path((w_id, name)): Path<(String, String)>, ) -> Result { @@ -477,6 +494,18 @@ async fn delete_folder( .await?; tx.commit().await?; + handle_deployment_metadata( + &authed.email, + &authed.username, + &db, + &w_id, + DeployedObject::Folder { path: format!("f/{}/folder.meta.*", name) }, + Some(format!("Folder '{}' deleted", name)), + rsmq, + true, + ) + .await?; + webhook.send_message( w_id.clone(), WebhookMessage::DeleteFolder { workspace: w_id, name: name.clone() }, diff --git a/backend/windmill-api/src/granular_acls.rs b/backend/windmill-api/src/granular_acls.rs index 1eca5fba2a..8f2ba64627 100644 --- a/backend/windmill-api/src/granular_acls.rs +++ b/backend/windmill-api/src/granular_acls.rs @@ -12,6 +12,7 @@ use axum::{ routing::{get, post}, Json, Router, }; +use windmill_git_sync::{handle_deployment_metadata, DeployedObject}; use crate::db::ApiAuthed; @@ -39,6 +40,7 @@ async fn add_granular_acl( authed: ApiAuthed, Extension(db): Extension, Extension(user_db): Extension, + Extension(rsmq): Extension>, Path((w_id, path)): Path<(String, StripPath)>, Json(GranularAcl { owner, write }): Json, ) -> Result { @@ -79,6 +81,23 @@ async fn add_granular_acl( let _ = not_found_if_none(obj_o, &kind, &path)?; tx.commit().await?; + match kind { + "folder" => { + handle_deployment_metadata( + &authed.email, + &authed.username, + &db, + &w_id, + DeployedObject::Folder { path: format!("f/{}/folder.meta.*", path) }, + Some(format!("Folder '{}' changed permissions", path)), + rsmq, + true, + ) + .await? + } + _ => (), + } + Ok("Successfully modified granular acl".to_string()) } @@ -86,6 +105,7 @@ async fn remove_granular_acl( authed: ApiAuthed, Extension(db): Extension, Extension(user_db): Extension, + Extension(rsmq): Extension>, Path((w_id, path)): Path<(String, StripPath)>, Json(GranularAcl { owner, write: _ }): Json, ) -> Result { @@ -124,13 +144,30 @@ async fn remove_granular_acl( )) .bind(owner) .bind(path) - .bind(w_id) + .bind(&w_id) .fetch_optional(&mut *tx) .await?; let _ = not_found_if_none(obj_o, &kind, &path)?; tx.commit().await?; + match kind { + "folder" => { + handle_deployment_metadata( + &authed.email, + &authed.username, + &db, + &w_id, + DeployedObject::Folder { path: format!("f/{}/folder.meta.*", path) }, + Some(format!("Folder '{}' changed permissions", path)), + rsmq, + true, + ) + .await? + } + _ => (), + } + Ok("Successfully removed granular acl".to_string()) } diff --git a/backend/windmill-git-sync/src/lib.rs b/backend/windmill-git-sync/src/lib.rs index de3649140e..94aee30db4 100644 --- a/backend/windmill-git-sync/src/lib.rs +++ b/backend/windmill-git-sync/src/lib.rs @@ -26,7 +26,7 @@ pub enum DeployedObject { Script { hash: ScriptHash, path: String, parent_path: Option }, Flow { path: String, parent_path: Option }, App { path: String, version: i64, parent_path: Option }, - Folder { path: String, parent_path: Option }, + Folder { path: String }, } impl DeployedObject { @@ -44,7 +44,7 @@ impl DeployedObject { DeployedObject::Script { parent_path, .. } => parent_path.to_owned(), DeployedObject::Flow { parent_path, .. } => parent_path.to_owned(), DeployedObject::App { parent_path, .. } => parent_path.to_owned(), - DeployedObject::Folder { parent_path, .. } => parent_path.to_owned(), + DeployedObject::Folder { .. } => None, } } }