feat: admin frontend delete account button
This commit is contained in:
parent
95460924f8
commit
de8f992377
|
|
@ -278,3 +278,18 @@ pub async fn verify_token_cloud(
|
||||||
let _: SignInTokenResponse = from_json_response(resp).await?;
|
let _: SignInTokenResponse = from_json_response(resp).await?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn delete_current_user(
|
||||||
|
access_token: &str,
|
||||||
|
appflowy_cloud_base_url: &str,
|
||||||
|
) -> Result<(), Error> {
|
||||||
|
let http_client = reqwest::Client::new();
|
||||||
|
let url = format!("{}/api/user", appflowy_cloud_base_url);
|
||||||
|
let resp = http_client
|
||||||
|
.delete(url)
|
||||||
|
.header("Authorization", format!("Bearer {}", access_token))
|
||||||
|
.send()
|
||||||
|
.await?;
|
||||||
|
check_response(resp).await?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,13 +27,6 @@ pub struct WorkspaceMember {
|
||||||
pub role: String,
|
pub role: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
|
||||||
pub struct WorkspaceUsageLimit {
|
|
||||||
pub total_blob_size: i64,
|
|
||||||
pub single_blob_size: i64,
|
|
||||||
pub member_count: i64,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Deserialize, Serialize)]
|
#[derive(Deserialize, Serialize)]
|
||||||
pub struct WorkspaceBlobUsage {
|
pub struct WorkspaceBlobUsage {
|
||||||
pub consumed_capacity: u64,
|
pub consumed_capacity: u64,
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,6 @@
|
||||||
use axum::response::{IntoResponse, Response};
|
use axum::response::{IntoResponse, Response};
|
||||||
use serde::Deserialize;
|
|
||||||
use shared_entity::response::AppResponseError;
|
use shared_entity::response::AppResponseError;
|
||||||
|
|
||||||
#[derive(Deserialize, Debug)]
|
|
||||||
pub struct AppFlowyCloudError {
|
|
||||||
pub code: String,
|
|
||||||
pub message: String,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum Error {
|
pub enum Error {
|
||||||
NotOk(u16, String), // HTTP status code, payload
|
NotOk(u16, String), // HTTP status code, payload
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
use crate::error::WebApiError;
|
use crate::error::WebApiError;
|
||||||
use crate::ext::api::{
|
use crate::ext::api::{
|
||||||
accept_workspace_invitation, invite_user_to_workspace, leave_workspace, verify_token_cloud,
|
accept_workspace_invitation, delete_current_user, invite_user_to_workspace, leave_workspace,
|
||||||
|
verify_token_cloud,
|
||||||
};
|
};
|
||||||
use crate::models::{
|
use crate::models::{
|
||||||
WebApiAdminCreateUserRequest, WebApiChangePasswordRequest, WebApiCreateSSOProviderRequest,
|
WebApiAdminCreateUserRequest, WebApiChangePasswordRequest, WebApiCreateSSOProviderRequest,
|
||||||
|
|
@ -39,6 +40,7 @@ pub fn router() -> Router<AppState> {
|
||||||
.route("/workspace/:workspace_id/leave", post(leave_workspace_handler))
|
.route("/workspace/:workspace_id/leave", post(leave_workspace_handler))
|
||||||
.route("/invite/:invite_id/accept", post(invite_accept_handler))
|
.route("/invite/:invite_id/accept", post(invite_accept_handler))
|
||||||
.route("/open_app", post(open_app_handler))
|
.route("/open_app", post(open_app_handler))
|
||||||
|
.route("/delete-account", delete(delete_account_handler))
|
||||||
|
|
||||||
// admin
|
// admin
|
||||||
.route("/admin/user", post(admin_add_user_handler))
|
.route("/admin/user", post(admin_add_user_handler))
|
||||||
|
|
@ -115,6 +117,15 @@ async fn open_app_handler(session: UserSession) -> Result<HeaderMap, WebApiError
|
||||||
Ok(htmx_redirect(&app_sign_in_url))
|
Ok(htmx_redirect(&app_sign_in_url))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Delete the user account and all associated data.
|
||||||
|
async fn delete_account_handler(
|
||||||
|
state: State<AppState>,
|
||||||
|
session: UserSession,
|
||||||
|
) -> Result<HeaderMap, WebApiError<'static>> {
|
||||||
|
delete_current_user(&session.token.access_token, &state.appflowy_cloud_url).await?;
|
||||||
|
Ok(htmx_redirect("/web/login"))
|
||||||
|
}
|
||||||
|
|
||||||
// Invite another user, this will trigger email sending
|
// Invite another user, this will trigger email sending
|
||||||
// to the target user
|
// to the target user
|
||||||
async fn invite_handler(
|
async fn invite_handler(
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,13 @@
|
||||||
>
|
>
|
||||||
{{ user.email|escape }}
|
{{ user.email|escape }}
|
||||||
</div>
|
</div>
|
||||||
|
<div
|
||||||
|
hx-delete="/web-api/delete-account"
|
||||||
|
hx-confirm="This will erase all data associated with this account. Are you sure?"
|
||||||
|
class="button red"
|
||||||
|
>
|
||||||
|
Delete Account
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="top-menu-bar-right">
|
<div id="top-menu-bar-right">
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue