Export interaction policies for local posts over ActivityPub (#35697)
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
class ActivityPub::NoteSerializer < ActivityPub::Serializer
|
||||
include FormattingHelper
|
||||
|
||||
context_extensions :atom_uri, :conversation, :sensitive, :voters_count, :quotes
|
||||
context_extensions :atom_uri, :conversation, :sensitive, :voters_count, :quotes, :interaction_policies
|
||||
|
||||
attributes :id, :type, :summary,
|
||||
:in_reply_to, :published, :url,
|
||||
@@ -35,6 +35,8 @@ class ActivityPub::NoteSerializer < ActivityPub::Serializer
|
||||
attribute :quote, key: :quote_uri, if: :quote?
|
||||
attribute :quote_authorization, if: :quote_authorization?
|
||||
|
||||
attribute :interaction_policy, if: -> { Mastodon::Feature.outgoing_quotes_enabled? }
|
||||
|
||||
def id
|
||||
ActivityPub::TagManager.instance.uri_for(object)
|
||||
end
|
||||
@@ -216,6 +218,23 @@ class ActivityPub::NoteSerializer < ActivityPub::Serializer
|
||||
ActivityPub::TagManager.instance.approval_uri_for(object.quote)
|
||||
end
|
||||
|
||||
def interaction_policy
|
||||
approved_uris = []
|
||||
|
||||
# On outgoing posts, only automatic approval is supported
|
||||
policy = object.quote_approval_policy >> 16
|
||||
approved_uris << ActivityPub::TagManager::COLLECTIONS[:public] if policy.anybits?(Status::QUOTE_APPROVAL_POLICY_FLAGS[:public])
|
||||
approved_uris << ActivityPub::TagManager.instance.followers_uri_for(object.account) if policy.anybits?(Status::QUOTE_APPROVAL_POLICY_FLAGS[:followers])
|
||||
approved_uris << ActivityPub::TagManager.instance.following_uri_for(object.account) if policy.anybits?(Status::QUOTE_APPROVAL_POLICY_FLAGS[:followed])
|
||||
approved_uris << ActivityPub::TagManager.instance.uri_for(object.account) if approved_uris.empty?
|
||||
|
||||
{
|
||||
canQuote: {
|
||||
automaticApproval: approved_uris,
|
||||
},
|
||||
}
|
||||
end
|
||||
|
||||
class MediaAttachmentSerializer < ActivityPub::Serializer
|
||||
context_extensions :blurhash, :focal_point
|
||||
|
||||
|
||||
Reference in New Issue
Block a user