Refactor StatusReachFinder to be used in more places

This commit is contained in:
Eugen Rochko 2021-09-25 00:17:36 +02:00
parent c99d28369a
commit ce463ccb50
13 changed files with 321 additions and 99 deletions

View file

@ -1,13 +0,0 @@
# frozen_string_literal: true
class ActivityPub::PrepareFollowersSynchronizationService < BaseService
include JsonLdHelper
def call(account, params)
@account = account
return if params['collectionId'] != @account.followers_url || invalid_origin?(params['url']) || @account.local_followers_hash == params['digest']
ActivityPub::FollowersSynchronizationWorker.perform_async(@account.id, params['url'])
end
end

View file

@ -0,0 +1,36 @@
# frozen_string_literal: true
class ActivityPub::ProcessCollectionSynchronizationService < BaseService
include JsonLdHelper
def call(account, value)
return unless collection_synchronization_enabled?
@account = account
@params = parse_value(value)
return if unknown_collection? || collection_up_to_date?
ActivityPub::FollowersSynchronizationWorker.perform_async(@account.id, @params['url'])
rescue Parslet::ParseFailed
Rails.logger.warn 'Error parsing Collection-Synchronization header'
end
private
def parse_value(value)
SignatureVerification::SignatureParamsTransformer.new.apply(SignatureVerification::SignatureParamsParser.new.parse(value))
end
def unknown_collection?
@params['collectionId'] != @account.followers_url || invalid_origin?(@params['url'])
end
def collection_up_to_date?
@account.local_followers_hash == @params['digest']
end
def collection_synchronization_enabled?
ENV['DISABLE_FOLLOWERS_SYNCHRONIZATION'] != 'true'
end
end