summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Gleason <alex@alexgleason.me>2021-06-29 23:56:19 -0500
committerAlex Gleason <alex@alexgleason.me>2021-06-29 23:56:19 -0500
commita7929c4d89a07a7f577e7cde5638bde8b1cb586a (patch)
tree1a9164afd6e2d1e89b6d9ed60118b567b7457bcb
parent01c2d2a29670d8b3a4acee06c5f91b52e371fd00 (diff)
Deletions: preserve account status fields during purge, fix checks
-rw-r--r--lib/pleroma/user.ex22
-rw-r--r--test/pleroma/user_test.exs4
2 files changed, 14 insertions, 12 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex
index f3cf3c69b..5d8b936aa 100644
--- a/lib/pleroma/user.ex
+++ b/lib/pleroma/user.ex
@@ -1692,9 +1692,7 @@ defmodule Pleroma.User do
follower_count: 0,
following_count: 0,
is_locked: false,
- is_confirmed: true,
password_reset_pending: false,
- is_approved: true,
registration_reason: nil,
confirmation_token: nil,
domain_blocks: [],
@@ -1710,9 +1708,15 @@ defmodule Pleroma.User do
raw_fields: [],
is_discoverable: false,
also_known_as: []
+ # id: preserved
+ # ap_id: preserved
+ # nickname: preserved
})
end
+ # Purge doesn't delete the user from the database.
+ # It just nulls all its fields and deactivates it.
+ # See `User.purge_user_changeset/1` above.
def purge(%User{} = user) do
user
|> purge_user_changeset()
@@ -1729,20 +1733,18 @@ defmodule Pleroma.User do
BackgroundWorker.enqueue("delete_user", %{"user_id" => user.id})
end
+ # *Actually* delete the user from the DB
defp delete_from_db(%User{} = user) do
invalidate_cache(user)
Repo.delete(user)
end
- defp maybe_delete_from_db(%User{local: true} = user) do
- status = account_status(user)
+ # If the user never finalized their account, it's safe to delete them.
+ defp maybe_delete_from_db(%User{local: true, is_confirmed: false} = user),
+ do: delete_from_db(user)
- if status in [:confirmation_pending, :approval_pending] do
- delete_from_db(user)
- else
- {:ok, user}
- end
- end
+ defp maybe_delete_from_db(%User{local: true, is_approved: false} = user),
+ do: delete_from_db(user)
defp maybe_delete_from_db(user), do: {:ok, user}
diff --git a/test/pleroma/user_test.exs b/test/pleroma/user_test.exs
index 529f837e8..60bc58a48 100644
--- a/test/pleroma/user_test.exs
+++ b/test/pleroma/user_test.exs
@@ -1663,9 +1663,9 @@ defmodule Pleroma.UserTest do
follower_count: 0,
following_count: 0,
is_locked: false,
- is_confirmed: true,
+ is_confirmed: false,
password_reset_pending: false,
- is_approved: true,
+ is_approved: false,
registration_reason: nil,
confirmation_token: nil,
domain_blocks: [],