Rails.logger.debug "Going to webfinger #{username}@#{domain}"
- return FollowRemoteAccountService.new.call("#{username}@#{domain}")
+ account = FollowRemoteAccountService.new.call("#{username}@#{domain}")
+ UpdateRemoteProfileService.new.call(xml, account) unless account.nil?
+ account
rescue TypeError
Rails.logger.debug "Unparseable URL given: #{url}"
nil
NotifyService.new.call(target_account, follow_request)
else
NotificationWorker.perform_async(stream_entry_to_xml(follow_request.stream_entry), source_account.id, target_account.id)
+ AfterRemoteFollowRequestWorker.perform_async(follow_request.id)
end
follow_request
else
subscribe_service.call(target_account) unless target_account.subscribed?
NotificationWorker.perform_async(stream_entry_to_xml(follow.stream_entry), source_account.id, target_account.id)
+ AfterRemoteFollowWorker.perform_async(follow.id)
end
MergeWorker.perform_async(target_account.id, source_account.id)
--- /dev/null
+# frozen_string_literal: true
+
+class AfterRemoteFollowRequestWorker
+ include Sidekiq::Worker
+
+ sidekiq_options retry: 5
+
+ def perform(follow_request_id)
+ follow_request = FollowRequest.find(follow_request_id)
+ updated_account = FetchRemoteAccountService.new.call(follow_request.target_account.remote_url)
+
+ return if updated_account.locked?
+
+ follow_request.destroy
+ FollowService.new.call(follow_request.account, updated_account.acct)
+ end
+end
--- /dev/null
+# frozen_string_literal: true
+
+class AfterRemoteFollowWorker
+ include Sidekiq::Worker
+
+ sidekiq_options retry: 5
+
+ def perform(follow_id)
+ follow = Follow.find(follow_id)
+ updated_account = FetchRemoteAccountService.new.call(follow.target_account.remote_url)
+
+ return unless updated_account.locked?
+
+ follow.destroy
+ FollowService.new.call(follow.account, updated_account.acct)
+ end
+end
before do
stub_request(:get, "https://quitter.no/.well-known/host-meta").to_return(request_fixture('.host-meta.txt'))
stub_request(:get, "https://quitter.no/.well-known/webfinger?resource=acct:gargron@quitter.no").to_return(request_fixture('webfinger.txt'))
+ stub_request(:head, "https://quitter.no/api/statuses/user_timeline/7477.atom").to_return(:status => 405, :body => "", :headers => {})
stub_request(:get, "https://quitter.no/api/statuses/user_timeline/7477.atom").to_return(request_fixture('feed.txt'))
stub_request(:get, "https://quitter.no/avatar/7477-300-20160211190340.png").to_return(request_fixture('avatar.txt'))
stub_request(:post, "https://quitter.no/main/push/hub").to_return(:status => 200, :body => "", :headers => {})