Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/workers/delete_user_worker.rb')
-rw-r--r--app/workers/delete_user_worker.rb32
1 files changed, 31 insertions, 1 deletions
diff --git a/app/workers/delete_user_worker.rb b/app/workers/delete_user_worker.rb
index 6a375a0cdd4..4634ea8ff4f 100644
--- a/app/workers/delete_user_worker.rb
+++ b/app/workers/delete_user_worker.rb
@@ -14,7 +14,7 @@ class DeleteUserWorker # rubocop:disable Scalability/IdempotentWorker
delete_user = User.find_by_id(delete_user_id)
return unless delete_user.present?
- return if delete_user.banned? && ::Feature.enabled?(:delay_delete_own_user)
+ return if skip_own_account_deletion?(delete_user)
current_user = User.find_by_id(current_user_id)
return unless current_user.present?
@@ -23,4 +23,34 @@ class DeleteUserWorker # rubocop:disable Scalability/IdempotentWorker
rescue Gitlab::Access::AccessDeniedError => e
Gitlab::AppLogger.warn("User could not be destroyed: #{e}")
end
+
+ private
+
+ def skip_own_account_deletion?(user)
+ return false unless ::Feature.enabled?(:delay_delete_own_user)
+
+ skip =
+ if user.banned?
+ true
+ else
+ # User is blocked when they delete their own account. Skip record deletion
+ # when user has been unblocked (e.g. when the user's account is reinstated
+ # by Trust & Safety)
+ user.deleted_own_account? && !user.blocked?
+ end
+
+ if skip
+ user.custom_attributes.by_key(UserCustomAttribute::DELETED_OWN_ACCOUNT_AT).first&.destroy
+ UserCustomAttribute.set_skipped_account_deletion_at(user)
+
+ Gitlab::AppLogger.info(
+ message: 'Skipped own account deletion.',
+ reason: "User has been #{user.banned? ? 'banned' : 'unblocked'}.",
+ user_id: user.id,
+ username: user.username
+ )
+ end
+
+ skip
+ end
end