forked from mirrors/akkoma
Remove unneccesary subscriptions on update.
This commit is contained in:
parent
fa3aa59248
commit
e5fcc51a06
2 changed files with 41 additions and 0 deletions
|
@ -204,6 +204,8 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
|
||||||
update: [set: [following: fragment("array_replace(?,?,?)", u.following, ^old_follower_address, ^user.follower_address)]]
|
update: [set: [following: fragment("array_replace(?,?,?)", u.following, ^old_follower_address, ^user.follower_address)]]
|
||||||
Repo.update_all(q, [])
|
Repo.update_all(q, [])
|
||||||
|
|
||||||
|
maybe_retire_websub(user.ap_id)
|
||||||
|
|
||||||
# Only do this for recent activties, don't go through the whole db.
|
# Only do this for recent activties, don't go through the whole db.
|
||||||
since = (Repo.aggregate(Activity, :max, :id) || 0) - 100_000
|
since = (Repo.aggregate(Activity, :max, :id) || 0) - 100_000
|
||||||
q = from a in Activity,
|
q = from a in Activity,
|
||||||
|
@ -236,4 +238,13 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
|
||||||
e -> e
|
e -> e
|
||||||
end
|
end
|
||||||
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
|
end
|
||||||
|
|
|
@ -4,6 +4,8 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do
|
||||||
alias Pleroma.Activity
|
alias Pleroma.Activity
|
||||||
alias Pleroma.User
|
alias Pleroma.User
|
||||||
alias Pleroma.Repo
|
alias Pleroma.Repo
|
||||||
|
alias Pleroma.Web.Websub.WebsubClientSubscription
|
||||||
|
alias Pleroma.Web.Websub.WebsubServerSubscription
|
||||||
import Ecto.Query
|
import Ecto.Query
|
||||||
|
|
||||||
import Pleroma.Factory
|
import Pleroma.Factory
|
||||||
|
@ -216,4 +218,32 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do
|
||||||
refute "..." in user_two.following
|
refute "..." in user_two.following
|
||||||
end
|
end
|
||||||
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
|
end
|
||||||
|
|
Loading…
Reference in a new issue