From 55436d582313631b67fe9a3694ef9110005111f3 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Sat, 3 Dec 2022 22:05:48 +0000 Subject: [PATCH] Also prune rejected Follow activities --- lib/pleroma/activity/pruner.ex | 11 ++++++++ test/pleroma/activity/pruner_test.exs | 36 +++++++++++++++++++++++++++ test/support/factory.ex | 1 + 3 files changed, 48 insertions(+) diff --git a/lib/pleroma/activity/pruner.ex b/lib/pleroma/activity/pruner.ex index 054ee514a..7f561ebae 100644 --- a/lib/pleroma/activity/pruner.ex +++ b/lib/pleroma/activity/pruner.ex @@ -35,6 +35,17 @@ defmodule Pleroma.Activity.Pruner do |> Repo.delete_all(timeout: :infinity) end + def prune_stale_follow_requests do + before_time = cutoff() + + from(a in Activity, + where: + fragment("?->>'type' = ?", a.data, "Follow") and a.inserted_at < ^before_time and + fragment("?->>'state' = ?", a.data, "reject") + ) + |> Repo.delete_all(timeout: :infinity) + end + defp cutoff do DateTime.utc_now() |> Timex.shift(days: -@cutoff) end diff --git a/test/pleroma/activity/pruner_test.exs b/test/pleroma/activity/pruner_test.exs index 312d4f5e4..2a2b0916d 100644 --- a/test/pleroma/activity/pruner_test.exs +++ b/test/pleroma/activity/pruner_test.exs @@ -24,4 +24,40 @@ defmodule Pleroma.Activity.PrunerTest do refute Activity.get_by_id(old_delete.id) end end + + describe "prune_stale_follow_requests" do + test "it prunes old follow requests" do + follower = insert(:user) + followee = insert(:user) + + new_follow_request = + insert( + :follow_activity, + follower: follower, + followd: followee, + state: "reject" + ) + + old_not_rejected_request = + insert(:follow_activity, + follower: follower, + followd: followee, + state: "pending", + inserted_at: DateTime.utc_now() |> DateTime.add(-31 * 24, :hour) + ) + + old_follow_request = + insert(:follow_activity, + follower: follower, + followd: followee, + inserted_at: DateTime.utc_now() |> DateTime.add(-31 * 24, :hour), + state: "reject" + ) + + Pruner.prune_stale_follow_requests() + assert Activity.get_by_id(new_follow_request.id) + assert Activity.get_by_id(old_not_rejected_request.id) + refute Activity.get_by_id(old_follow_request.id) + end + end end diff --git a/test/support/factory.ex b/test/support/factory.ex index 3e426c565..6ce4decbc 100644 --- a/test/support/factory.ex +++ b/test/support/factory.ex @@ -469,6 +469,7 @@ defmodule Pleroma.Factory do data: data, actor: follower.ap_id } + |> Map.merge(attrs) end def report_activity_factory(attrs \\ %{}) do