| 
									
										
										
										
											2017-08-10 22:33:12 +02:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ActivityPub::Activity::Accept < ActivityPub::Activity | 
					
						
							|  |  |  |   def perform | 
					
						
							| 
									
										
										
										
											2018-01-08 10:57:52 +01:00
										 |  |  |     case @object['type'] | 
					
						
							|  |  |  |     when 'Follow' | 
					
						
							|  |  |  |       accept_follow | 
					
						
							| 
									
										
										
										
											2017-08-10 22:33:12 +02:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   private | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-08 10:57:52 +01:00
										 |  |  |   def accept_follow | 
					
						
							| 
									
										
										
										
											2018-08-12 18:16:26 +02:00
										 |  |  |     return accept_follow_for_relay if relay_follow? | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-08 10:57:52 +01:00
										 |  |  |     target_account = account_from_uri(target_uri) | 
					
						
							| 
									
										
										
										
											2017-08-10 22:33:12 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     return if target_account.nil? || !target_account.local? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     follow_request = FollowRequest.find_by(account: target_account, target_account: @account) | 
					
						
							|  |  |  |     follow_request&.authorize! | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-12 18:16:26 +02:00
										 |  |  |   def accept_follow_for_relay | 
					
						
							|  |  |  |     relay.update!(state: :accepted) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def relay | 
					
						
							| 
									
										
										
										
											2018-10-03 23:44:13 +02:00
										 |  |  |     @relay ||= Relay.find_by(follow_activity_id: object_uri) unless object_uri.nil? | 
					
						
							| 
									
										
										
										
											2018-08-12 18:16:26 +02:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def relay_follow? | 
					
						
							|  |  |  |     relay.present? | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-08 10:57:52 +01:00
										 |  |  |   def target_uri | 
					
						
							|  |  |  |     @target_uri ||= value_or_id(@object['actor']) | 
					
						
							| 
									
										
										
										
											2017-08-10 22:33:12 +02:00
										 |  |  |   end | 
					
						
							|  |  |  | end |