def find_existing_status
status = status_from_uri(object_uri)
- status ||= Status.find_by(uri: @object['_:atomUri']) if @object['_:atomUri'].present?
+ status ||= Status.find_by(uri: @object['atomUri']) if @object['atomUri'].present?
status
end
sensitive: @object['sensitive'] || false,
visibility: visibility_from_audience,
thread: replied_to_status,
- conversation: conversation_from_uri(@object['_:conversation']),
+ conversation: conversation_from_uri(@object['conversation']),
}
end
@replied_to_status = nil
else
@replied_to_status = status_from_uri(in_reply_to_uri)
- @replied_to_status ||= status_from_uri(@object['_:inReplyToAtomUri']) if @object['_:inReplyToAtomUri'].present?
+ @replied_to_status ||= status_from_uri(@object['inReplyToAtomUri']) if @object['inReplyToAtomUri'].present?
@replied_to_status
end
end
def delete_note
status = Status.find_by(uri: object_uri, account: @account)
- status ||= Status.find_by(uri: @object['_:atomUri'], account: @account) if @object.is_a?(Hash) && @object['_:atomUri'].present?
+ status ||= Status.find_by(uri: @object['atomUri'], account: @account) if @object.is_a?(Hash) && @object['atomUri'].present?
delete_later!(object_uri)
# frozen_string_literal: true
class ActivityPub::Adapter < ActiveModelSerializers::Adapter::Base
+ CONTEXT = {
+ '@context': [
+ 'https://www.w3.org/ns/activitystreams',
+ 'https://w3id.org/security/v1',
+
+ {
+ 'locked' => 'as:locked',
+ 'sensitive' => 'as:sensitive',
+ 'Hashtag' => 'as:Hashtag',
+
+ 'ostatus' => 'http://ostatus.org#',
+ 'atomUri' => 'ostatus:atomUri',
+ 'inReplyToAtomUri' => 'ostatus:inReplyToAtomUri',
+ 'conversation' => 'ostatus:conversation',
+ },
+ ],
+ }.freeze
+
def self.default_key_transform
:camel_lower
end
def serializable_hash(options = nil)
options = serialization_options(options)
- serialized_hash = { '@context': [ActivityPub::TagManager::CONTEXT, 'https://w3id.org/security/v1'] }.merge(ActiveModelSerializers::Adapter::Attributes.new(serializer, instance_options).serializable_hash(options))
+ serialized_hash = CONTEXT.merge(ActiveModelSerializers::Adapter::Attributes.new(serializer, instance_options).serializable_hash(options))
self.class.transform_key_casing!(serialized_hash, instance_options)
end
end
attributes :id, :type, :following, :followers,
:inbox, :outbox, :shared_inbox,
:preferred_username, :name, :summary,
- :url
+ :url, :locked
has_one :public_key, serializer: ActivityPub::PublicKeySerializer
- attribute :locked, key: '_:locked'
-
class ImageSerializer < ActiveModel::Serializer
include RoutingHelper
class ActivityPub::DeleteSerializer < ActiveModel::Serializer
class TombstoneSerializer < ActiveModel::Serializer
- attributes :id, :type
- attribute :atom_uri, key: '_:atomUri'
+ attributes :id, :type, :atom_uri
def id
ActivityPub::TagManager.instance.uri_for(object)
class ActivityPub::NoteSerializer < ActiveModel::Serializer
attributes :id, :type, :summary, :content,
:in_reply_to, :published, :url,
- :attributed_to, :to, :cc, :sensitive
+ :attributed_to, :to, :cc, :sensitive,
+ :atom_uri, :in_reply_to_atom_uri,
+ :conversation
has_many :media_attachments, key: :attachment
has_many :virtual_tags, key: :tag
- attribute :atom_uri, key: '_:atomUri', if: :local?
- attribute :in_reply_to_atom_uri, key: '_:inReplyToAtomUri'
-
def id
ActivityPub::TagManager.instance.uri_for(object)
end
end
def atom_uri
+ return unless object.local?
+
::TagManager.instance.uri_for(object)
end
::TagManager.instance.uri_for(object.thread)
end
+ def conversation
+ if object.conversation.uri?
+ object.conversation.uri
+ else
+ TagManager.instance.unique_tag(object.conversation.created_at, object.conversation.id, 'Conversation')
+ end
+ end
+
def local?
object.account.local?
end
def activity_json
if %w(Note Article).include? @json['type']
{
- 'type' => 'Create',
- 'actor' => first_of_value(@json['attributedTo']),
+ 'type' => 'Create',
+ 'actor' => first_of_value(@json['attributedTo']),
'object' => @json,
}
else
@account.avatar_remote_url = image_url('icon')
@account.header_remote_url = image_url('image')
@account.public_key = public_key || ''
- @account.locked = @json['_:locked'] || false
+ @account.locked = @json['locked'] || false
@account.save!
end