commit: ad892dbc0c377d82b2cae349f189a41708a1e6af
parent: 075d6a1e13aa6477c656e9dbe03e6720cb4e2b32
Author: Eugen Rochko <eugen@zeonfederated.com>
Date: Thu, 17 Aug 2017 21:35:00 +0200
Add _:atomUri property for deduplicating OStatus/ActivityPub legacy records (#4593)
Diffstat:
2 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb
@@ -4,7 +4,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
def perform
return if delete_arrived_first?(object_uri) || unsupported_object_type?
- status = Status.find_by(uri: object_uri)
+ status = find_existing_status
return status unless status.nil?
@@ -23,6 +23,12 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
private
+ def find_existing_status
+ status = Status.find_by(uri: object_uri)
+ status ||= Status.find_by(uri: @object['_:atomUri']) if @object['_:atomUri'].present?
+ status
+ end
+
def status_params
{
uri: @object['id'],
diff --git a/app/serializers/activitypub/note_serializer.rb b/app/serializers/activitypub/note_serializer.rb
@@ -8,6 +8,8 @@ class ActivityPub::NoteSerializer < ActiveModel::Serializer
has_many :media_attachments, key: :attachment
has_many :virtual_tags, key: :tag
+ attribute :atom_uri, key: '_:atomUri', if: :local?
+
def id
ActivityPub::TagManager.instance.uri_for(object)
end
@@ -52,6 +54,14 @@ class ActivityPub::NoteSerializer < ActiveModel::Serializer
object.mentions + object.tags
end
+ def atom_uri
+ ::TagManager.instance.uri_for(object)
+ end
+
+ def local?
+ object.account.local?
+ end
+
class MediaAttachmentSerializer < ActiveModel::Serializer
include RoutingHelper