update: [set: [following: fragment("array_replace(?,?,?)", u.following, ^old_follower_address, ^user.follower_address)]]
Repo.update_all(q, [])
+ maybe_retire_websub(user.ap_id)
+
# Only do this for recent activties, don't go through the whole db.
since = (Repo.aggregate(Activity, :max, :id) || 0) - 100_000
q = from a in Activity,
e -> e
end
end
+
+ def maybe_retire_websub(ap_id) do
+ # some sanity checks
+ if is_binary(ap_id) && (String.length(ap_id) > 8) do
+ q = from ws in Pleroma.Web.Websub.WebsubClientSubscription,
+ where: fragment("? like ?", ws.topic, ^"#{ap_id}%")
+ Repo.delete_all(q)
+ end
+ end
end
alias Pleroma.Activity
alias Pleroma.User
alias Pleroma.Repo
+ alias Pleroma.Web.Websub.WebsubClientSubscription
+ alias Pleroma.Web.Websub.WebsubServerSubscription
import Ecto.Query
import Pleroma.Factory
refute "..." in user_two.following
end
end
+
+ describe "maybe_retire_websub" do
+ test "it deletes all websub client subscripitions with the user as topic" do
+ subscription = %WebsubClientSubscription{topic: "https://niu.moe/users/rye.atom"}
+ {:ok, ws} = Repo.insert(subscription)
+
+ subscription = %WebsubClientSubscription{topic: "https://niu.moe/users/pasty.atom"}
+ {:ok, ws2} = Repo.insert(subscription)
+
+ Transmogrifier.maybe_retire_websub("https://niu.moe/users/rye")
+
+ refute Repo.get(WebsubClientSubscription, ws.id)
+ assert Repo.get(WebsubClientSubscription, ws2.id)
+ end
+
+ test "it deletes all websub server subscriptions with the server as callback" do
+ subscription = %WebsubClientSubscription{topic: "https://niu.moe/users/rye.atom"}
+ {:ok, ws} = Repo.insert(subscription)
+
+ subscription = %WebsubClientSubscription{topic: "https://niu.moe/users/pasty.atom"}
+ {:ok, ws2} = Repo.insert(subscription)
+
+ Transmogrifier.maybe_retire_websub("https://niu.moe/users/rye")
+
+ refute Repo.get(WebsubClientSubscription, ws.id)
+ assert Repo.get(WebsubClientSubscription, ws2.id)
+ end
+ end
end