From 528dd6ae5b8b640900ac7d10a4901dd59a5450dc Mon Sep 17 00:00:00 2001 From: Zack Fu Zi Xiang Date: Thu, 21 Mar 2024 14:01:48 +0800 Subject: [PATCH 1/3] feat: email redirect to invite page --- 2 | 0 admin_frontend/src/web_api.rs | 4 +-- admin_frontend/templates/pages/login.html | 10 ++++--- src/api/workspace.rs | 1 - src/biz/workspace/ops.rs | 33 +++++------------------ 5 files changed, 15 insertions(+), 33 deletions(-) delete mode 100644 2 diff --git a/2 b/2 deleted file mode 100644 index e69de29b..00000000 diff --git a/admin_frontend/src/web_api.rs b/admin_frontend/src/web_api.rs index 3eed0e94..e128b9bc 100644 --- a/admin_frontend/src/web_api.rs +++ b/admin_frontend/src/web_api.rs @@ -28,11 +28,11 @@ pub fn router() -> Router { Router::new() .route("/signin", post(sign_in_handler)) .route("/signup", post(sign_up_handler)) - .route("/login_refresh/:refresh_token", post(login_refresh_handler)) + .route("/login-refresh/:refresh_token", post(login_refresh_handler)) .route("/logout", post(logout_handler)) // user - .route("/change_password", post(change_password_handler)) + .route("/change-password", post(change_password_handler)) .route("/oauth_login/:provider", post(post_oauth_login_handler)) .route("/invite", post(invite_handler)) .route("/workspace/:workspace_id/invite", post(workspace_invite_handler)) diff --git a/admin_frontend/templates/pages/login.html b/admin_frontend/templates/pages/login.html index 4722299e..b52e011d 100644 --- a/admin_frontend/templates/pages/login.html +++ b/admin_frontend/templates/pages/login.html @@ -107,13 +107,14 @@ {% endblock %} diff --git a/src/api/workspace.rs b/src/api/workspace.rs index 17dd51f9..6a4d43fe 100644 --- a/src/api/workspace.rs +++ b/src/api/workspace.rs @@ -250,7 +250,6 @@ async fn post_workspace_invite_handler( let invited_members = payload.into_inner(); workspace::ops::invite_workspace_members( &state.pg_pool, - &state.gotrue_admin, &state.gotrue_client, &user_uuid, &workspace_id, diff --git a/src/biz/workspace/ops.rs b/src/biz/workspace/ops.rs index 2b9b6d2b..cf83346c 100644 --- a/src/biz/workspace/ops.rs +++ b/src/biz/workspace/ops.rs @@ -21,7 +21,7 @@ use database_entity::dto::{ WorkspaceUsage, }; -use gotrue::params::InviteUserParams; +use gotrue::params::{InviteUserParams, MagicLinkParams}; use shared_entity::dto::workspace_dto::{ CreateWorkspaceMember, WorkspaceMemberChangeset, WorkspaceMemberInvitation, }; @@ -164,7 +164,6 @@ pub async fn accept_workspace_invite( #[instrument(level = "debug", skip_all, err)] pub async fn invite_workspace_members( pg_pool: &PgPool, - gotrue_admin: &GoTrueAdmin, gotrue_client: &gotrue::api::Client, inviter: &Uuid, workspace_id: &Uuid, @@ -175,36 +174,16 @@ pub async fn invite_workspace_members( .await .context("Begin transaction to invite workspace members")?; - let admin_token = gotrue_admin.token(gotrue_client).await?; for invitation in invitations { - match gotrue_client - .admin_invite_user( - &admin_token, - &InviteUserParams { + gotrue_client + .magic_link( + &MagicLinkParams { email: invitation.email.clone(), ..Default::default() }, + Some("/web/home#invite".to_owned()), ) - .await - { - Ok(new_user) => { - info!( - "Invited new user: {:?} to workspace: {:?}", - new_user, workspace_id - ); - }, - Err(err) => match err { - app_error::gotrue::GoTrueError::Internal(ref err_serde) => { - match (err_serde.code, err_serde.msg.as_str()) { - (422, "A user with this email address has already been registered") => { - info!("User already exists, skipping invite"); - }, - _ => return Err(AppError::Internal(err.into())), - } - }, - _ => return Err(err.into()), - }, - } + .await?; // Generate a link such that when clicked, the user is added to the workspace. insert_workspace_invitation( From b43e8c4a61a485f558afe9c099a9d44eb7144b58 Mon Sep 17 00:00:00 2001 From: Zack Fu Zi Xiang Date: Thu, 21 Mar 2024 15:25:40 +0800 Subject: [PATCH 2/3] feat: add fragment redirect for web home --- .../templates/components/sidebar.html | 21 +++++++++++ admin_frontend/templates/oc | 0 admin_frontend/templates/pages/login.html | 36 ++++++++++++++----- src/biz/workspace/ops.rs | 2 +- 4 files changed, 50 insertions(+), 9 deletions(-) create mode 100644 admin_frontend/templates/oc diff --git a/admin_frontend/templates/components/sidebar.html b/admin_frontend/templates/components/sidebar.html index 2141bf71..2500d469 100644 --- a/admin_frontend/templates/components/sidebar.html +++ b/admin_frontend/templates/components/sidebar.html @@ -3,6 +3,7 @@ class="sidebar-item" hx-target="#sidebar-content" hx-get="/web/components/user/navigate" + data-section="navigate" > Navigate @@ -10,6 +11,7 @@ class="sidebar-item" hx-target="#sidebar-content" hx-get="/web/components/user/change-password" + data-section="change-password" > Change Password @@ -17,6 +19,7 @@ class="sidebar-item" hx-target="#sidebar-content" hx-get="/web/components/user/invite" + data-section="invite" > Invite @@ -24,6 +27,7 @@ class="sidebar-item" hx-target="#sidebar-content" hx-get="/web/components/user/user-usage" + data-section="user-usage" > User Usage @@ -31,7 +35,24 @@ class="sidebar-item" hx-target="#sidebar-content" hx-get="/web/components/user/workspace-usage" + data-section="workspace-usage" > Workspace Usage + + diff --git a/admin_frontend/templates/oc b/admin_frontend/templates/oc new file mode 100644 index 00000000..e69de29b diff --git a/admin_frontend/templates/pages/login.html b/admin_frontend/templates/pages/login.html index b52e011d..ad33401a 100644 --- a/admin_frontend/templates/pages/login.html +++ b/admin_frontend/templates/pages/login.html @@ -109,24 +109,44 @@ {% endblock %} diff --git a/src/biz/workspace/ops.rs b/src/biz/workspace/ops.rs index cf83346c..92dcd4d0 100644 --- a/src/biz/workspace/ops.rs +++ b/src/biz/workspace/ops.rs @@ -181,7 +181,7 @@ pub async fn invite_workspace_members( email: invitation.email.clone(), ..Default::default() }, - Some("/web/home#invite".to_owned()), + Some("/web/home#redirect_to=invite".to_owned()), ) .await?; From 7547ecd998128afd9fcdc887ff37523ccb7ac0d2 Mon Sep 17 00:00:00 2001 From: Zack Fu Zi Xiang Date: Thu, 21 Mar 2024 18:44:43 +0800 Subject: [PATCH 3/3] chore: cargo clippy --- src/biz/workspace/ops.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/biz/workspace/ops.rs b/src/biz/workspace/ops.rs index 92dcd4d0..0d199f0c 100644 --- a/src/biz/workspace/ops.rs +++ b/src/biz/workspace/ops.rs @@ -1,5 +1,4 @@ use crate::biz::workspace::access_control::WorkspaceAccessControl; -use crate::state::GoTrueAdmin; use anyhow::Context; use app_error::AppError; use database::collab::upsert_collab_member_with_txn; @@ -21,7 +20,7 @@ use database_entity::dto::{ WorkspaceUsage, }; -use gotrue::params::{InviteUserParams, MagicLinkParams}; +use gotrue::params::MagicLinkParams; use shared_entity::dto::workspace_dto::{ CreateWorkspaceMember, WorkspaceMemberChangeset, WorkspaceMemberInvitation, }; @@ -31,7 +30,7 @@ use sqlx::{types::uuid, PgPool}; use std::collections::HashMap; use std::ops::DerefMut; use std::sync::Arc; -use tracing::{info, instrument}; +use tracing::instrument; use uuid::Uuid; use workspace_template::document::get_started::GetStartedDocumentTemplate;