aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorrinpatch <rinpatch@sdf.org>2020-04-29 14:26:31 +0300
committerrinpatch <rinpatch@sdf.org>2020-05-01 00:38:58 +0300
commit61889e00fc4a77e92ed7af3b6a270d10d5b2f34b (patch)
tree05eadfdac17a8c6cb2e01a8fcb5b1a9558319f74 /lib
parent3b15a0eecc62f79465620a697f12b576ed87b0fc (diff)
downloadpleroma-61889e00fc4a77e92ed7af3b6a270d10d5b2f34b.tar.gz
Deactivate local users on deletion instead of deleting the record
Prevents the possibility of re-registration, which allowed to read DMs of the deleted account. Also includes a migration that tries to find any already deleted accounts and insert skeletons for them. Closes pleroma/pleroma#1687
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/user.ex11
-rw-r--r--lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex5
2 files changed, 13 insertions, 3 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex
index 0115abed5..0e5121694 100644
--- a/lib/pleroma/user.ex
+++ b/lib/pleroma/user.ex
@@ -1416,8 +1416,15 @@ defmodule Pleroma.User do
end)
delete_user_activities(user)
- invalidate_cache(user)
- Repo.delete(user)
+
+ if user.local do
+ user
+ |> change(%{deactivated: true, email: nil})
+ |> update_and_set_cache()
+ else
+ invalidate_cache(user)
+ Repo.delete(user)
+ end
end
def perform(:deactivate_async, user, status), do: deactivate(user, status)
diff --git a/lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex b/lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex
index dae7f0f2f..41677d04d 100644
--- a/lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex
+++ b/lib/pleroma/web/pleroma_api/controllers/pleroma_api_controller.ex
@@ -53,7 +53,10 @@ defmodule Pleroma.Web.PleromaAPI.PleromaAPIController do
else
users =
Enum.map(user_ap_ids, &User.get_cached_by_ap_id/1)
- |> Enum.filter(& &1)
+ |> Enum.filter(fn
+ %{deactivated: false} -> true
+ _ -> false
+ end)
%{
name: emoji,