Переглянути джерело

add `user delete_activities` mix task

tags/v1.1.4
Egor Kislitsyn 5 роки тому
джерело
коміт
a14742f495
4 змінених файлів з 43 додано та 18 видалено
  1. +6
    -2
      lib/mix/tasks/pleroma/user.ex
  2. +17
    -16
      lib/pleroma/user.ex
  3. +10
    -0
      test/tasks/user_test.exs
  4. +10
    -0
      test/user_test.exs

+ 6
- 2
lib/mix/tasks/pleroma/user.ex Переглянути файл

@@ -23,7 +23,7 @@ defmodule Mix.Tasks.Pleroma.User do
- `--password PASSWORD` - the user's password
- `--moderator`/`--no-moderator` - whether the user is a moderator
- `--admin`/`--no-admin` - whether the user is an admin
- `-y`, `--assume-yes`/`--no-assume-yes` - whether to assume yes to all questions
- `-y`, `--assume-yes`/`--no-assume-yes` - whether to assume yes to all questions

## Generate an invite link.

@@ -33,6 +33,10 @@ defmodule Mix.Tasks.Pleroma.User do

mix pleroma.user rm NICKNAME

## Delete the user's activities.

mix pleroma.user delete_activities NICKNAME

## Deactivate or activate the user's account.

mix pleroma.user toggle_activated NICKNAME
@@ -309,7 +313,7 @@ defmodule Mix.Tasks.Pleroma.User do

with %User{local: true} = user <- User.get_by_nickname(nickname) do
User.delete_user_activities(user)
Mix.shell().info("User #{nickname} statuses deleted..")
Mix.shell().info("User #{nickname} statuses deleted.")
else
_ ->
Mix.shell().error("No local user #{nickname}")


+ 17
- 16
lib/pleroma/user.ex Переглянути файл

@@ -1088,29 +1088,30 @@ defmodule Pleroma.User do
# Remove all relationships
{:ok, followers} = User.get_followers(user)

followers
|> Enum.each(fn follower -> User.unfollow(follower, user) end)
Enum.each(followers, fn follower -> User.unfollow(follower, user) end)

{:ok, friends} = User.get_friends(user)

friends
|> Enum.each(fn followed -> User.unfollow(user, followed) end)
Enum.each(friends, fn followed -> User.unfollow(user, followed) end)

query =
from(a in Activity, where: a.actor == ^user.ap_id)
|> Activity.with_preloaded_object()
delete_user_activities(user)
end

Repo.all(query)
|> Enum.each(fn activity ->
case activity.data["type"] do
"Create" ->
ActivityPub.delete(Object.normalize(activity))
def delete_user_activities(%User{ap_id: ap_id} = user) do
Activity
|> where(actor: ^ap_id)
|> Activity.with_preloaded_object()
|> Repo.all()
|> Enum.each(fn
%{data: %{"type" => "Create"}} = activity ->
activity |> Object.normalize() |> ActivityPub.delete()

# TODO: Do something with likes, follows, repeats.
_ ->
"Doing nothing"
end
# TODO: Do something with likes, follows, repeats.
_ ->
"Doing nothing"
end)

{:ok, user}
end

def html_filter_policy(%User{info: %{no_rich_text: true}}) do


+ 10
- 0
test/tasks/user_test.exs Переглянути файл

@@ -248,4 +248,14 @@ defmodule Mix.Tasks.Pleroma.UserTest do
assert message =~ "Generated"
end
end

describe "running delete_activities" do
test "activities are deleted" do
%{nickname: nickname} = insert(:user)

assert :ok == Mix.Tasks.Pleroma.User.run(["delete_activities", nickname])
assert_received {:mix_shell, :info, [message]}
assert message == "User #{nickname} statuses deleted."
end
end
end

+ 10
- 0
test/user_test.exs Переглянути файл

@@ -792,6 +792,16 @@ defmodule Pleroma.UserTest do
assert false == user.info.deactivated
end

test ".delete_user_activities deletes all create activities" do
user = insert(:user)

{:ok, activity} = CommonAPI.post(user, %{"status" => "2hu"})
{:ok, _} = User.delete_user_activities(user)

# TODO: Remove favorites, repeats, delete activities.
refute Activity.get_by_id(activity.id)
end

test ".delete deactivates a user, all follow relationships and all create activities" do
user = insert(:user)
followed = insert(:user)


Завантаження…
Відмінити
Зберегти