Add initial support for ingesting and verifying remote quote posts (#34370)
This commit is contained in:
		@@ -45,9 +45,12 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
 | 
			
		||||
    @unresolved_mentions  = []
 | 
			
		||||
    @silenced_account_ids = []
 | 
			
		||||
    @params               = {}
 | 
			
		||||
    @quote                = nil
 | 
			
		||||
    @quote_uri            = nil
 | 
			
		||||
 | 
			
		||||
    process_status_params
 | 
			
		||||
    process_tags
 | 
			
		||||
    process_quote
 | 
			
		||||
    process_audience
 | 
			
		||||
 | 
			
		||||
    ApplicationRecord.transaction do
 | 
			
		||||
@@ -55,6 +58,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
 | 
			
		||||
      attach_tags(@status)
 | 
			
		||||
      attach_mentions(@status)
 | 
			
		||||
      attach_counts(@status)
 | 
			
		||||
      attach_quote(@status)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    resolve_thread(@status)
 | 
			
		||||
@@ -189,6 +193,16 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def attach_quote(status)
 | 
			
		||||
    return if @quote.nil?
 | 
			
		||||
 | 
			
		||||
    @quote.status = status
 | 
			
		||||
    @quote.save
 | 
			
		||||
    ActivityPub::VerifyQuoteService.new.call(@quote, fetchable_quoted_uri: @quote_uri, request_id: @options[:request_id])
 | 
			
		||||
  rescue Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS
 | 
			
		||||
    ActivityPub::RefetchAndVerifyQuoteWorker.perform_in(rand(30..600).seconds, @quote.id, @quote_uri, { 'request_id' => @options[:request_id] })
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def process_tags
 | 
			
		||||
    return if @object['tag'].nil?
 | 
			
		||||
 | 
			
		||||
@@ -203,6 +217,17 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def process_quote
 | 
			
		||||
    return unless Mastodon::Feature.inbound_quotes_enabled?
 | 
			
		||||
 | 
			
		||||
    @quote_uri = @status_parser.quote_uri
 | 
			
		||||
    return if @quote_uri.blank?
 | 
			
		||||
 | 
			
		||||
    approval_uri = @status_parser.quote_approval_uri
 | 
			
		||||
    approval_uri = nil if unsupported_uri_scheme?(approval_uri)
 | 
			
		||||
    @quote = Quote.new(account: @account, approval_uri: approval_uri)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def process_hashtag(tag)
 | 
			
		||||
    return if tag['name'].blank?
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user