| 
									
										
										
										
											2017-08-08 19:52:15 +00:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-30 09:10:46 +00:00
										 |  |  | class ActivityPub::InboxesController < ActivityPub::BaseController | 
					
						
							| 
									
										
										
										
											2017-08-08 19:52:15 +00:00
										 |  |  |   include SignatureVerification | 
					
						
							| 
									
										
										
										
											2019-03-20 16:20:16 +00:00
										 |  |  |   include JsonLdHelper | 
					
						
							| 
									
										
										
										
											2019-07-08 10:03:45 +00:00
										 |  |  |   include AccountOwnedConcern | 
					
						
							| 
									
										
										
										
											2017-08-08 19:52:15 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-11 18:11:09 +00:00
										 |  |  |   before_action :skip_unknown_actor_delete | 
					
						
							|  |  |  |   before_action :require_signature! | 
					
						
							| 
									
										
										
										
											2019-10-24 20:45:35 +00:00
										 |  |  |   skip_before_action :authenticate_user! | 
					
						
							| 
									
										
										
										
											2019-07-11 18:11:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-08 19:52:15 +00:00
										 |  |  |   def create | 
					
						
							| 
									
										
										
										
											2019-07-11 18:11:09 +00:00
										 |  |  |     upgrade_account | 
					
						
							|  |  |  |     process_payload | 
					
						
							|  |  |  |     head 202
 | 
					
						
							| 
									
										
										
										
											2017-08-08 19:52:15 +00:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   private | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-11 18:11:09 +00:00
										 |  |  |   def skip_unknown_actor_delete | 
					
						
							|  |  |  |     head 202 if unknown_deleted_account? | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-20 16:20:16 +00:00
										 |  |  |   def unknown_deleted_account? | 
					
						
							|  |  |  |     json = Oj.load(body, mode: :strict) | 
					
						
							| 
									
										
										
										
											2019-07-11 18:11:09 +00:00
										 |  |  |     json.is_a?(Hash) && json['type'] == 'Delete' && json['actor'].present? && json['actor'] == value_or_id(json['object']) && !Account.where(uri: json['actor']).exists? | 
					
						
							| 
									
										
										
										
											2019-03-20 16:20:16 +00:00
										 |  |  |   rescue Oj::ParseError | 
					
						
							|  |  |  |     false | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-08 10:03:45 +00:00
										 |  |  |   def account_required? | 
					
						
							|  |  |  |     params[:account_username].present? | 
					
						
							| 
									
										
										
										
											2017-08-08 19:52:15 +00:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def body | 
					
						
							| 
									
										
										
										
											2019-03-31 15:27:24 +00:00
										 |  |  |     return @body if defined?(@body) | 
					
						
							| 
									
										
										
										
											2019-07-11 18:11:09 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     @body = request.body.read | 
					
						
							|  |  |  |     @body.force_encoding('UTF-8') if @body.present? | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-31 15:27:24 +00:00
										 |  |  |     request.body.rewind if request.body.respond_to?(:rewind) | 
					
						
							| 
									
										
										
										
											2019-07-11 18:11:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-31 15:27:24 +00:00
										 |  |  |     @body | 
					
						
							| 
									
										
										
										
											2017-08-08 19:52:15 +00:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-20 23:14:40 +00:00
										 |  |  |   def upgrade_account | 
					
						
							| 
									
										
										
										
											2017-09-02 23:11:23 +00:00
										 |  |  |     if signed_request_account.ostatus? | 
					
						
							|  |  |  |       signed_request_account.update(last_webfingered_at: nil) | 
					
						
							| 
									
										
										
										
											2018-01-22 13:25:09 +00:00
										 |  |  |       ResolveAccountWorker.perform_async(signed_request_account.acct) | 
					
						
							| 
									
										
										
										
											2017-09-02 23:11:23 +00:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-29 01:16:20 +00:00
										 |  |  |     DeliveryFailureTracker.track_inverse_success!(signed_request_account) | 
					
						
							| 
									
										
										
										
											2017-08-20 23:14:40 +00:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-08 19:52:15 +00:00
										 |  |  |   def process_payload | 
					
						
							| 
									
										
										
										
											2019-03-20 16:20:16 +00:00
										 |  |  |     ActivityPub::ProcessingWorker.perform_async(signed_request_account.id, body, @account&.id) | 
					
						
							| 
									
										
										
										
											2017-08-08 19:52:15 +00:00
										 |  |  |   end | 
					
						
							|  |  |  | end |