Do not persist remote transient activities

This commit is contained in:
FloatingGhost 2022-12-01 10:19:01 +00:00
parent f69b4e8573
commit 5bc9abff46
8 changed files with 103 additions and 24 deletions

View File

@ -105,6 +105,23 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
end
end
@unpersisted_activity_types ~w[Undo Delete Remove]
@impl true
def persist(%{"type" => type} = object, [local: false] = meta)
when type in @unpersisted_activity_types do
{:ok, object, meta}
{recipients, _, _} = get_recipients(object)
unpersisted = %Activity{
data: object,
local: false,
recipients: recipients,
actor: object["actor"]
}
{:ok, unpersisted, meta}
end
@impl true
def persist(object, meta) do
with local <- Keyword.fetch!(meta, :local),

View File

@ -288,7 +288,6 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do
# Tasks this handles:
# - Delete and unpins the create activity
# - Replace object with Tombstone
# - Set up notification
# - Reduce the user note count
# - Reduce the reply count

View File

@ -14,11 +14,10 @@ defmodule Pleroma.Workers.SearchIndexingWorker do
end
def perform(%Job{args: %{"op" => "remove_from_index", "object" => object_id}}) do
object = Pleroma.Object.get_by_id(object_id)
search_module = Pleroma.Config.get([Pleroma.Search, :module])
search_module.remove_from_index(object)
# Fake the object so we can remove it from the index without having to keep it in the DB
search_module.remove_from_index(%Pleroma.Object{id: object_id})
:ok
end

View File

@ -1,16 +0,0 @@
defmodule Pleroma.Repo.Migrations.DeleteDeliveriesOnObjectDelete do
use Ecto.Migration
def up do
drop constraint(:deliveries, "deliveries_object_id_fkey")
alter table(:deliveries) do
modify :object_id, references(:objects, type: :id, on_delete: :delete_all), null: false
end
end
def down do
drop constraint(:deliveries, "deliveries_object_id_fkey")
alter table(:deliveries) do
modify :object_id, references(:objects, type: :id), null: false
end
end
end

View File

@ -2,16 +2,18 @@ defmodule Pleroma.Repo.Migrations.AddCascadeToReportNotesOnActivityDelete do
use Ecto.Migration
def up do
drop constraint(:report_notes, "report_notes_activity_id_fkey")
drop(constraint(:report_notes, "report_notes_activity_id_fkey"))
alter table(:report_notes) do
modify :activity_id, references(:activities, type: :uuid, on_delete: :delete_all)
modify(:activity_id, references(:activities, type: :uuid, on_delete: :delete_all))
end
end
def down do
drop constraint(:report_notes, "report_notes_activity_id_fkey")
drop(constraint(:report_notes, "report_notes_activity_id_fkey"))
alter table(:report_notes) do
modify :activity_id, references(:activities, type: :uuid)
modify(:activity_id, references(:activities, type: :uuid))
end
end
end

BIN
priv/static/logo-512.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

53
priv/static/logo.svg Executable file
View File

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 794.02 449.34">
<defs>
<style>
.cls-1 {
fill: #fff;
}
.cls-2 {
fill: #2d2053;
}
.cls-3 {
fill: #462d7a;
}
.cls-4 {
stroke: #2c1e50;
}
.cls-4, .cls-5 {
stroke-miterlimit: 10;
}
.cls-5 {
stroke: #fff;
}
.cls-6 {
fill: #181127;
}
</style>
</defs>
<g id="Layer_2" data-name="Layer 2">
<path class="cls-3" d="M157.78,328.03c14.93,10.84,39.31-.17,41.84-1.23,17.72-7.43,29.58-23.57,49.21-50.87,13.76-19.14,15.81-25.23,20.91-24.94,15.15,.87,11.81,53.95,44.44,73.73,9.91,6.01,26.49,9.9,36.77,3.3,38.25-24.54,5.94-204.91-77.79-226.32-5-1.28-17.72-3.92-33.51,0-22.2,5.51-36.13,19.6-42.39,26.14-42.45,44.34-78.04,172.18-39.49,200.18Z"/>
</g>
<g id="Layer_7" data-name="Layer 7">
<path class="cls-2" d="M204.07,121.19c-1.95,2.08-2.59,2.62-4.05,4.07-3.72,3.69-6.99,6.64-7.27,7.66-2.34,8.62,150,55.54,152.87,47.02,.21-.62-.7-2.8-2.53-7.15,0,0-1.6-3.8-3.52-7.29-25.29-45.91-48.81-56.9-48.81-56.9-42.56-19.27-85.38,11.19-86.69,12.6Z"/>
</g>
<g id="Layer_9" data-name="Layer 9">
<path class="cls-4" d="M351.37,193.16c-5.77-11.54-85.59,16.83-154.76,27.39-21.09,3.22-38.13,4.31-47.3,4.75-.74,2.91-1.76,7.02-2.87,11.97-1.93,8.6-2.89,12.89-2.6,13.78,3.3,9.95,59.73-.88,99.18-7.64,32.67-5.6,115.14-18.96,114.61-30.77-.03-.69-1.11-4.01-3.27-10.65-1.78-5.47-2.67-8.2-2.98-8.83Z"/>
</g>
<g id="Layer_6" data-name="Layer 6">
<path class="cls-1" d="M253.58,138.31c-27.39-.52-46.38,38.21-37.98,54.55,10.09,19.62,65.5,18.26,74.77-3.3,7.21-16.78-11.38-50.77-36.79-51.24Z"/>
</g>
<g id="Layer_4" data-name="Layer 4">
<path d="M151,82.48c-6.55,27.74,252.45,113.97,267.56,89.66,9.24-14.87-64.9-83.62-163.53-97.57-39.06-5.52-100.95-5.14-104.03,7.91Z"/>
</g>
<g id="Layer_5" data-name="Layer 5">
<path class="cls-5" d="M221.03,89.73c.41-5.25,6.51-5.74,28.85-19.42,26.97-16.51,28.85-22.38,56.86-40.83,30.07-19.81,48.46-31.94,54.82-26.61,9.72,8.15-25.18,43.33-21.31,99.35,.87,12.61,3.12,17.79-.86,23.01-18.25,23.95-120.07-13.68-118.35-35.5Z"/>
<path class="cls-6" d="M791.6,449.34c3.22,0,3.22-5,0-5s-3.22,5,0,5h0Z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@ -8,6 +8,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do
alias Pleroma.Activity
alias Pleroma.Builders.ActivityBuilder
alias Pleroma.Web.ActivityPub.Builder
alias Pleroma.Config
alias Pleroma.Notification
alias Pleroma.Object
@ -2613,4 +2614,28 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do
{:ok, user} = ActivityPub.make_user_from_ap_id("https://princess.cat/users/mewmew")
assert user.name == " "
end
describe "persist/1" do
test "should not persist remote delete activities" do
poster = insert(:user, local: false)
{:ok, post} = CommonAPI.post(poster, %{status: "hhhhhh"})
{:ok, delete_data, meta} = Builder.delete(poster, post)
local_opts = Keyword.put(meta, :local, false)
{:ok, act, _meta} = ActivityPub.persist(delete_data, local_opts)
refute act.inserted_at
end
test "should not persist remote undo activities" do
poster = insert(:user, local: false)
liker = insert(:user, local: false)
{:ok, post} = CommonAPI.post(poster, %{status: "hhhhhh"})
{:ok, like} = CommonAPI.favorite(liker, post.id)
{:ok, undo_data, meta} = Builder.undo(liker, like)
local_opts = Keyword.put(meta, :local, false)
{:ok, act, _meta} = ActivityPub.persist(undo_data, local_opts)
refute act.inserted_at
end
end
end