Browse Source

user deletion

chore/expose-invalidation-to-adminfe
Alexander Strizhakov 4 years ago
parent
commit
287f781808
No known key found for this signature in database GPG Key ID: 22896A53AEF1381
3 changed files with 72 additions and 8 deletions
  1. +20
    -8
      lib/pleroma/user.ex
  2. +27
    -0
      test/user_test.exs
  3. +25
    -0
      test/web/activity_pub/side_effects_test.exs

+ 20
- 8
lib/pleroma/user.ex View File

@@ -1431,6 +1431,25 @@ defmodule Pleroma.User do
BackgroundWorker.enqueue("delete_user", %{"user_id" => user.id})
end

defp delete_and_invalidate_cache(%User{} = user) do
invalidate_cache(user)
Repo.delete(user)
end

defp delete_or_deactivate(%User{local: false} = user), do: delete_and_invalidate_cache(user)

defp delete_or_deactivate(%User{local: true} = user) do
status = account_status(user)

if status == :confirmation_pending do
delete_and_invalidate_cache(user)
else
user
|> change(%{deactivated: true, email: nil})
|> update_and_set_cache()
end
end

def perform(:force_password_reset, user), do: force_password_reset(user)

@spec perform(atom(), User.t()) :: {:ok, User.t()}
@@ -1452,14 +1471,7 @@ defmodule Pleroma.User do

delete_user_activities(user)

if user.local do
user
|> change(%{deactivated: true, email: nil})
|> update_and_set_cache()
else
invalidate_cache(user)
Repo.delete(user)
end
delete_or_deactivate(user)
end

def perform(:deactivate_async, user, status), do: deactivate(user, status)


+ 27
- 0
test/user_test.exs View File

@@ -1171,6 +1171,33 @@ defmodule Pleroma.UserTest do
end
end

describe "delete/1 when confirmation is pending" do
setup do
user = insert(:user, confirmation_pending: true)
{:ok, user: user}
end

test "deletes user from database when activation required", %{user: user} do
clear_config([:instance, :account_activation_required], true)

{:ok, job} = User.delete(user)
{:ok, _} = ObanHelpers.perform(job)

refute User.get_cached_by_id(user.id)
refute User.get_by_id(user.id)
end

test "deactivates user when activation is not required", %{user: user} do
clear_config([:instance, :account_activation_required], false)

{:ok, job} = User.delete(user)
{:ok, _} = ObanHelpers.perform(job)

assert %{deactivated: true} = User.get_cached_by_id(user.id)
assert %{deactivated: true} = User.get_by_id(user.id)
end
end

test "get_public_key_for_ap_id fetches a user that's not in the db" do
assert {:ok, _key} = User.get_public_key_for_ap_id("http://mastodon.example.org/users/admin")
end


+ 25
- 0
test/web/activity_pub/side_effects_test.exs View File

@@ -99,6 +99,31 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do
end
end

describe "delete users with confirmation pending" do
setup do
user = insert(:user, confirmation_pending: true)
{:ok, delete_user_data, _meta} = Builder.delete(user, user.ap_id)
{:ok, delete_user, _meta} = ActivityPub.persist(delete_user_data, local: true)
{:ok, delete: delete_user, user: user}
end

test "when activation is not required", %{delete: delete, user: user} do
clear_config([:instance, :account_activation_required], false)
{:ok, _, _} = SideEffects.handle(delete)
ObanHelpers.perform_all()

assert User.get_cached_by_id(user.id).deactivated
end

test "when activation is required", %{delete: delete, user: user} do
clear_config([:instance, :account_activation_required], true)
{:ok, _, _} = SideEffects.handle(delete)
ObanHelpers.perform_all()

refute User.get_cached_by_id(user.id)
end
end

describe "Undo objects" do
setup do
poster = insert(:user)


Loading…
Cancel
Save