| 
									
										
										
										
											2017-02-11 02:12:05 +01:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class AuthorizeFollowService < BaseService | 
					
						
							| 
									
										
										
										
											2017-12-06 19:41:57 +09:00
										 |  |  |   def call(source_account, target_account, **options) | 
					
						
							| 
									
										
										
										
											2017-08-20 16:53:47 +02:00
										 |  |  |     if options[:skip_follow_request] | 
					
						
							| 
									
										
										
										
											2018-08-17 14:08:17 +02:00
										 |  |  |       follow_request = FollowRequest.new(account: source_account, target_account: target_account, uri: options[:follow_request_uri]) | 
					
						
							| 
									
										
										
										
											2017-08-20 16:53:47 +02:00
										 |  |  |     else | 
					
						
							|  |  |  |       follow_request = FollowRequest.find_by!(account: source_account, target_account: target_account) | 
					
						
							|  |  |  |       follow_request.authorize! | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-13 00:44:41 +02:00
										 |  |  |     create_notification(follow_request) unless source_account.local? | 
					
						
							|  |  |  |     follow_request | 
					
						
							| 
									
										
										
										
											2017-02-12 00:48:53 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   private | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-13 00:44:41 +02:00
										 |  |  |   def create_notification(follow_request) | 
					
						
							|  |  |  |     if follow_request.account.ostatus? | 
					
						
							|  |  |  |       NotificationWorker.perform_async(build_xml(follow_request), follow_request.target_account_id, follow_request.account_id) | 
					
						
							|  |  |  |     elsif follow_request.account.activitypub? | 
					
						
							|  |  |  |       ActivityPub::DeliveryWorker.perform_async(build_json(follow_request), follow_request.target_account_id, follow_request.account.inbox_url) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def build_json(follow_request) | 
					
						
							| 
									
										
										
										
											2018-12-30 09:48:59 +01:00
										 |  |  |     ActiveModelSerializers::SerializableResource.new( | 
					
						
							| 
									
										
										
										
											2017-08-13 00:44:41 +02:00
										 |  |  |       follow_request, | 
					
						
							|  |  |  |       serializer: ActivityPub::AcceptFollowSerializer, | 
					
						
							|  |  |  |       adapter: ActivityPub::Adapter | 
					
						
							| 
									
										
										
										
											2018-12-30 09:48:59 +01:00
										 |  |  |     ).to_json | 
					
						
							| 
									
										
										
										
											2017-08-13 00:44:41 +02:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-12 00:48:53 +01:00
										 |  |  |   def build_xml(follow_request) | 
					
						
							| 
									
										
										
										
											2017-07-19 01:37:26 +02:00
										 |  |  |     OStatus::AtomSerializer.render(OStatus::AtomSerializer.new.authorize_follow_request_salmon(follow_request)) | 
					
						
							| 
									
										
										
										
											2017-02-11 02:12:05 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | end |