From 103c226b63f0b16eab68c2aaf9720c6f11f0ce52 Mon Sep 17 00:00:00 2001 From: Felix Ableitner Date: Wed, 22 Nov 2023 12:21:54 +0100 Subject: [PATCH] Prevent purged user getting refetched from home instance (fixes #3815) --- crates/api/src/site/purge/person.rs | 30 ++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/crates/api/src/site/purge/person.rs b/crates/api/src/site/purge/person.rs index c59e06931..3f1447786 100644 --- a/crates/api/src/site/purge/person.rs +++ b/crates/api/src/site/purge/person.rs @@ -10,7 +10,7 @@ use lemmy_db_schema::{ source::{ image_upload::ImageUpload, moderator::{AdminPurgePerson, AdminPurgePersonForm}, - person::Person, + person::{Person, PersonUpdateForm}, }, traits::Crud, }; @@ -29,17 +29,29 @@ pub async fn purge_person( // Read the person to get their images let person_id = data.person_id; - let local_user = LocalUserView::read_person(&mut context.pool(), person_id).await?; - let pictrs_uploads = - ImageUpload::get_all_by_local_user_id(&mut context.pool(), &local_user.local_user.id).await?; + if let Ok(local_user) = LocalUserView::read_person(&mut context.pool(), person_id).await { + let pictrs_uploads = + ImageUpload::get_all_by_local_user_id(&mut context.pool(), &local_user.local_user.id).await?; - for upload in pictrs_uploads { - delete_image_from_pictrs(&upload.pictrs_alias, &upload.pictrs_delete_token, &context) - .await - .ok(); + for upload in pictrs_uploads { + delete_image_from_pictrs(&upload.pictrs_alias, &upload.pictrs_delete_token, &context) + .await + .ok(); + } } - Person::delete(&mut context.pool(), person_id).await?; + // Clear profile data. + Person::delete_account(&mut context.pool(), person_id).await?; + // Keep person record, but mark as banned to prevent login or refetching from home instance. + Person::update( + &mut context.pool(), + person_id, + &PersonUpdateForm { + banned: Some(true), + ..Default::default() + }, + ) + .await?; // Mod tables let form = AdminPurgePersonForm {