Files
mastodon/app/services/activitypub/verify_featured_item_service.rb
2026-03-09 14:59:57 +00:00

35 lines
1.0 KiB
Ruby

# frozen_string_literal: true
class ActivityPub::VerifyFeaturedItemService
include JsonLdHelper
def call(collection_item)
@collection_item = collection_item
@authorization = fetch_resource(@collection_item.approval_uri, true, raise_on_error: :temporary)
if @authorization.nil?
@collection_item.update!(state: :rejected)
return
end
return if non_matching_uri_hosts?(@collection_item.approval_uri, @authorization['interactionTarget'])
return unless matching_type? && matching_collection_uri?
account = Account.where(uri: @collection_item.object_uri).first
account ||= ActivityPub::FetchRemoteAccountService.new.call(@collection_item.object_uri)
return if account.blank?
@collection_item.update!(account:, state: :accepted)
end
private
def matching_type?
supported_context?(@authorization) && equals_or_includes?(@authorization['type'], 'FeatureAuthorization')
end
def matching_collection_uri?
@collection_item.collection.uri == @authorization['interactingObject']
end
end