end
def process_payload
- ActivityPub::ProcessingWorker.perform_async(signed_request_account.id, body.force_encoding('UTF-8'))
+ ActivityPub::ProcessingWorker.perform_async(signed_request_account.id, body.force_encoding('UTF-8'), @account&.id)
end
end
@mentions << Mention.new(account: account, silent: true)
# If there is at least one silent mention, then the status can be considered
- # as a limited-audience status, and not strictly a direct message
+ # as a limited-audience status, and not strictly a direct message, but only
+ # if we considered a direct message in the first place
next unless @params[:visibility] == :direct
@params[:visibility] = :limited
end
+
+ # If the payload was delivered to a specific inbox, the inbox owner must have
+ # access to it, unless they already have access to it anyway
+ return if @options[:delivered_to_account_id].nil? || @mentions.any? { mention.account_id == @options[:delivered_to_account_id] }
+
+ @mentions << Mention.new(account_id: @options[:delivered_to_account_id], silent: true)
+
+ return unless @param[:visibility] == :direct
+
+ @params[:visibility] = :limited
end
def attach_tags(status)
sidekiq_options backtrace: true
- def perform(account_id, body)
- ActivityPub::ProcessCollectionService.new.call(body, Account.find(account_id), override_timestamps: true)
+ def perform(account_id, body, delivered_to_account_id = nil)
+ ActivityPub::ProcessCollectionService.new.call(body, Account.find(account_id), override_timestamps: true, delivered_to_account_id: delivered_to_account_id)
end
end