After FollowService, re-fetch remote account asynchronously, do nothing
if account lock info was up to date, otherwise re-do the FollowService with now updated information
This commit is contained in:
		| @@ -22,7 +22,9 @@ class FetchRemoteAccountService < BaseService | ||||
|  | ||||
|     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 | ||||
|   | ||||
| @@ -28,6 +28,7 @@ class FollowService < BaseService | ||||
|       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 | ||||
| @@ -41,6 +42,7 @@ class FollowService < BaseService | ||||
|     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) | ||||
|   | ||||
							
								
								
									
										17
									
								
								app/workers/after_remote_follow_request_worker.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								app/workers/after_remote_follow_request_worker.rb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| # 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 | ||||
							
								
								
									
										17
									
								
								app/workers/after_remote_follow_worker.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								app/workers/after_remote_follow_worker.rb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| # 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 | ||||
| @@ -14,6 +14,7 @@ RSpec.describe Api::V1::FollowsController, type: :controller do | ||||
|     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 => {}) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user