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/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/2 b/admin_frontend/templates/oc similarity index 100% rename from 2 rename to admin_frontend/templates/oc diff --git a/admin_frontend/templates/pages/login.html b/admin_frontend/templates/pages/login.html index 4722299e..ad33401a 100644 --- a/admin_frontend/templates/pages/login.html +++ b/admin_frontend/templates/pages/login.html @@ -107,22 +107,46 @@ {% 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..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; +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; @@ -164,7 +163,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 +173,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#redirect_to=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(