Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Refactor controllers for statuses, accounts, and more (#11249)
- Loading branch information
Showing
41 changed files
with
299 additions
and
289 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
# frozen_string_literal: true | ||
|
||
class ActivityPub::RepliesController < Api::BaseController | ||
include SignatureAuthentication | ||
include Authorization | ||
include AccountOwnedConcern | ||
|
||
DESCENDANTS_LIMIT = 60 | ||
|
||
before_action :set_status | ||
before_action :set_cache_headers | ||
before_action :set_replies | ||
|
||
def index | ||
render json: replies_collection_presenter, serializer: ActivityPub::CollectionSerializer, adapter: ActivityPub::Adapter, content_type: 'application/activity+json', skip_activities: true | ||
end | ||
|
||
private | ||
|
||
def set_status | ||
@status = @account.statuses.find(params[:status_id]) | ||
authorize @status, :show? | ||
rescue Mastodon::NotPermittedError | ||
raise ActiveRecord::RecordNotFound | ||
end | ||
|
||
def set_replies | ||
@replies = page_params[:other_accounts] ? Status.where.not(account_id: @account.id) : @account.statuses | ||
@replies = @replies.where(in_reply_to_id: @status.id, visibility: [:public, :unlisted]) | ||
@replies = @replies.paginate_by_min_id(DESCENDANTS_LIMIT, params[:min_id]) | ||
end | ||
|
||
def replies_collection_presenter | ||
page = ActivityPub::CollectionPresenter.new( | ||
id: account_status_replies_url(@account, @status, page_params), | ||
type: :unordered, | ||
part_of: account_status_replies_url(@account, @status), | ||
next: next_page, | ||
items: @replies.map { |status| status.local ? status : status.id } | ||
) | ||
|
||
return page if page_requested? | ||
|
||
ActivityPub::CollectionPresenter.new( | ||
id: account_status_replies_url(@account, @status), | ||
type: :unordered, | ||
first: page | ||
) | ||
end | ||
|
||
def page_requested? | ||
params[:page] == 'true' | ||
end | ||
|
||
def next_page | ||
account_status_replies_url( | ||
@account, | ||
@status, | ||
page: true, | ||
min_id: @replies&.last&.id, | ||
other_accounts: !(@replies&.last&.account_id == @account.id && @replies.size == DESCENDANTS_LIMIT) | ||
) | ||
end | ||
|
||
def page_params | ||
params_slice(:other_accounts, :min_id).merge(page: true) | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
# frozen_string_literal: true | ||
|
||
module AccountOwnedConcern | ||
extend ActiveSupport::Concern | ||
|
||
included do | ||
before_action :set_account, if: :account_required? | ||
before_action :check_account_approval, if: :account_required? | ||
before_action :check_account_suspension, if: :account_required? | ||
end | ||
|
||
private | ||
|
||
def account_required? | ||
true | ||
end | ||
|
||
def set_account | ||
@account = Account.find_local!(username_param) | ||
end | ||
|
||
def username_param | ||
params[:account_username] | ||
end | ||
|
||
def check_account_approval | ||
not_found if @account.local? && @account.user_pending? | ||
end | ||
|
||
def check_account_suspension | ||
expires_in(3.minutes, public: true) && gone if @account.suspended? | ||
end | ||
end |
Oops, something went wrong.