| 
									
										
										
										
											2017-04-19 07:52:37 -04:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class FollowerAccountsController < ApplicationController | 
					
						
							|  |  |  |   include AccountControllerConcern | 
					
						
							| 
									
										
										
										
											2019-07-11 20:11:09 +02:00
										 |  |  |   include SignatureVerification | 
					
						
							| 
									
										
										
										
											2017-04-19 07:52:37 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-11 20:11:09 +02:00
										 |  |  |   before_action :require_signature!, if: -> { request.format == :json && authorized_fetch_mode? } | 
					
						
							| 
									
										
										
										
											2019-04-04 01:30:44 +02:00
										 |  |  |   before_action :set_cache_headers | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-12 22:26:07 +02:00
										 |  |  |   skip_around_action :set_locale, if: -> { request.format == :json } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-19 07:52:37 -04:00
										 |  |  |   def index | 
					
						
							| 
									
										
										
										
											2017-07-15 03:01:39 +02:00
										 |  |  |     respond_to do |format| | 
					
						
							| 
									
										
										
										
											2018-02-26 16:18:41 +01:00
										 |  |  |       format.html do | 
					
						
							| 
									
										
										
										
											2019-07-08 12:03:45 +02:00
										 |  |  |         expires_in 0, public: true unless user_signed_in? | 
					
						
							| 
									
										
										
										
											2019-03-17 09:39:25 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-18 02:26:51 +02:00
										 |  |  |         next if @account.user_hides_network? | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-04 20:17:01 +02:00
										 |  |  |         follows | 
					
						
							|  |  |  |         @relationships = AccountRelationshipsPresenter.new(follows.map(&:account_id), current_user.account_id) if user_signed_in? | 
					
						
							| 
									
										
										
										
											2018-02-26 16:18:41 +01:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2017-07-15 03:01:39 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |       format.json do | 
					
						
							| 
									
										
										
										
											2019-07-11 20:11:09 +02:00
										 |  |  |         raise Mastodon::NotPermittedError if page_requested? && @account.user_hides_network? | 
					
						
							| 
									
										
										
										
											2018-05-18 02:26:51 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-11 20:11:09 +02:00
										 |  |  |         expires_in(page_requested? ? 0 : 3.minutes, public: public_fetch_mode?) | 
					
						
							| 
									
										
										
										
											2019-04-04 01:30:44 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-07 17:43:42 +02:00
										 |  |  |         render json: collection_presenter, | 
					
						
							|  |  |  |                serializer: ActivityPub::CollectionSerializer, | 
					
						
							|  |  |  |                adapter: ActivityPub::Adapter, | 
					
						
							|  |  |  |                content_type: 'application/activity+json' | 
					
						
							| 
									
										
										
										
											2017-07-15 03:01:39 +02:00
										 |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   private | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-04 20:17:01 +02:00
										 |  |  |   def follows | 
					
						
							|  |  |  |     @follows ||= Follow.where(target_account: @account).recent.page(params[:page]).per(FOLLOW_PER_PAGE).preload(:account) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-11 20:11:09 +02:00
										 |  |  |   def page_requested? | 
					
						
							|  |  |  |     params[:page].present? | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-19 23:37:06 +09:00
										 |  |  |   def page_url(page) | 
					
						
							|  |  |  |     account_followers_url(@account, page: page) unless page.nil? | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-15 03:01:39 +02:00
										 |  |  |   def collection_presenter | 
					
						
							| 
									
										
										
										
											2019-07-11 20:11:09 +02:00
										 |  |  |     if page_requested? | 
					
						
							| 
									
										
										
										
											2018-05-04 20:17:01 +02:00
										 |  |  |       ActivityPub::CollectionPresenter.new( | 
					
						
							|  |  |  |         id: account_followers_url(@account, page: params.fetch(:page, 1)), | 
					
						
							|  |  |  |         type: :ordered, | 
					
						
							|  |  |  |         size: @account.followers_count, | 
					
						
							|  |  |  |         items: follows.map { |f| ActivityPub::TagManager.instance.uri_for(f.account) }, | 
					
						
							|  |  |  |         part_of: account_followers_url(@account), | 
					
						
							|  |  |  |         next: page_url(follows.next_page), | 
					
						
							|  |  |  |         prev: page_url(follows.prev_page) | 
					
						
							|  |  |  |       ) | 
					
						
							| 
									
										
										
										
											2017-09-19 23:37:06 +09:00
										 |  |  |     else | 
					
						
							|  |  |  |       ActivityPub::CollectionPresenter.new( | 
					
						
							|  |  |  |         id: account_followers_url(@account), | 
					
						
							|  |  |  |         type: :ordered, | 
					
						
							|  |  |  |         size: @account.followers_count, | 
					
						
							| 
									
										
										
										
											2018-05-04 20:17:01 +02:00
										 |  |  |         first: page_url(1) | 
					
						
							| 
									
										
										
										
											2017-09-19 23:37:06 +09:00
										 |  |  |       ) | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2017-04-19 07:52:37 -04:00
										 |  |  |   end | 
					
						
							|  |  |  | end |