Skip to content

Commit

Permalink
Fix error when passing unknown filter param in REST API (mastodon#20626)
Browse files Browse the repository at this point in the history
  • Loading branch information
Gargron authored and kadoshita committed Nov 19, 2022
1 parent 3169b5b commit dfb80db
Show file tree
Hide file tree
Showing 16 changed files with 31 additions and 28 deletions.
2 changes: 1 addition & 1 deletion app/controllers/api/base_controller.rb
Expand Up @@ -57,7 +57,7 @@ class Api::BaseController < ApplicationController
render json: { error: I18n.t('errors.429') }, status: 429
end

rescue_from ActionController::ParameterMissing do |e|
rescue_from ActionController::ParameterMissing, Mastodon::InvalidParameterError do |e|
render json: { error: e.to_s }, status: 400
end

Expand Down
10 changes: 6 additions & 4 deletions app/models/account_filter.rb
Expand Up @@ -57,7 +57,7 @@ def scope_for(key, value)
when 'order'
order_scope(value)
else
raise "Unknown filter: #{key}"
raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end
end

Expand All @@ -68,7 +68,7 @@ def origin_scope(value)
when 'remote'
Account.remote
else
raise "Unknown origin: #{value}"
raise Mastodon::InvalidParameterError, "Unknown origin: #{value}"
end
end

Expand All @@ -84,8 +84,10 @@ def status_scope(value)
accounts_with_users.merge(User.disabled)
when 'silenced'
Account.silenced
when 'sensitized'
Account.sensitized
else
raise "Unknown status: #{value}"
raise Mastodon::InvalidParameterError, "Unknown status: #{value}"
end
end

Expand All @@ -96,7 +98,7 @@ def order_scope(value)
when 'recent'
Account.recent
else
raise "Unknown order: #{value}"
raise Mastodon::InvalidParameterError, "Unknown order: #{value}"
end
end

Expand Down
2 changes: 1 addition & 1 deletion app/models/admin/action_log_filter.rb
Expand Up @@ -95,7 +95,7 @@ def scope_for(key, value)
account = Account.find_or_initialize_by(id: value)
Admin::ActionLog.where(target: [account, account.user].compact)
else
raise "Unknown filter: #{key}"
raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end
end
end
4 changes: 2 additions & 2 deletions app/models/admin/appeal_filter.rb
Expand Up @@ -30,7 +30,7 @@ def scope_for(key, value)
when 'status'
status_scope(value)
else
raise "Unknown filter: #{key}"
raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end
end

Expand All @@ -43,7 +43,7 @@ def status_scope(value)
when 'pending'
Appeal.pending
else
raise "Unknown status: #{value}"
raise Mastodon::InvalidParameterError, "Unknown status: #{value}"
end
end
end
2 changes: 1 addition & 1 deletion app/models/admin/status_filter.rb
Expand Up @@ -32,7 +32,7 @@ def scope_for(key, _value)
when 'media'
Status.joins(:media_attachments).merge(@account.media_attachments.reorder(nil)).group(:id).reorder('statuses.id desc')
else
raise "Unknown filter: #{key}"
raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end
end
end
2 changes: 1 addition & 1 deletion app/models/announcement_filter.rb
Expand Up @@ -33,7 +33,7 @@ def scope_for(key, _value)
when 'unpublished'
Announcement.unpublished
else
raise "Unknown filter: #{key}"
raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end
end
end
2 changes: 1 addition & 1 deletion app/models/custom_emoji_filter.rb
Expand Up @@ -39,7 +39,7 @@ def scope_for(key, value)
when 'shortcode'
CustomEmoji.search(value.strip)
else
raise "Unknown filter: #{key}"
raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end
end
end
4 changes: 2 additions & 2 deletions app/models/instance_filter.rb
Expand Up @@ -36,7 +36,7 @@ def scope_for(key, value)
when 'availability'
availability_scope(value)
else
raise "Unknown filter: #{key}"
raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end
end

Expand All @@ -47,7 +47,7 @@ def availability_scope(value)
when 'unavailable'
Instance.joins(:unavailable_domain)
else
raise "Unknown availability: #{value}"
raise Mastodon::InvalidParameterError, "Unknown availability: #{value}"
end
end
end
2 changes: 1 addition & 1 deletion app/models/invite_filter.rb
Expand Up @@ -31,7 +31,7 @@ def scope_for(key, _value)
when 'expired'
Invite.expired
else
raise "Unknown filter: #{key}"
raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end
end
end
12 changes: 6 additions & 6 deletions app/models/relationship_filter.rb
Expand Up @@ -53,7 +53,7 @@ def scope_for(key, value)
when 'activity'
activity_scope(value)
else
raise "Unknown filter: #{key}"
raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end
end

Expand All @@ -68,7 +68,7 @@ def relationship_scope(value)
when 'invited'
Account.joins(user: :invite).merge(Invite.where(user: account.user)).eager_load(:account_stat).reorder(nil)
else
raise "Unknown relationship: #{value}"
raise Mastodon::InvalidParameterError, "Unknown relationship: #{value}"
end
end

Expand All @@ -83,7 +83,7 @@ def location_scope(value)
when 'remote'
Account.remote
else
raise "Unknown location: #{value}"
raise Mastodon::InvalidParameterError, "Unknown location: #{value}"
end
end

Expand All @@ -94,7 +94,7 @@ def status_scope(value)
when 'primary'
Account.where(moved_to_account_id: nil)
else
raise "Unknown status: #{value}"
raise Mastodon::InvalidParameterError, "Unknown status: #{value}"
end
end

Expand All @@ -105,7 +105,7 @@ def order_scope(value)
when 'recent'
params[:relationship] == 'invited' ? Account.recent : Follow.recent
else
raise "Unknown order: #{value}"
raise Mastodon::InvalidParameterError, "Unknown order: #{value}"
end
end

Expand All @@ -114,7 +114,7 @@ def activity_scope(value)
when 'dormant'
AccountStat.where(last_status_at: nil).or(AccountStat.where(AccountStat.arel_table[:last_status_at].lt(1.month.ago)))
else
raise "Unknown activity: #{value}"
raise Mastodon::InvalidParameterError, "Unknown activity: #{value}"
end
end
end
4 changes: 2 additions & 2 deletions app/models/report_filter.rb
Expand Up @@ -38,7 +38,7 @@ def scope_for(key, value)
when :target_origin
target_origin_scope(value)
else
raise "Unknown filter: #{key}"
raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end
end

Expand All @@ -49,7 +49,7 @@ def target_origin_scope(value)
when :remote
Report.where(target_account: Account.remote)
else
raise "Unknown value: #{value}"
raise Mastodon::InvalidParameterError, "Unknown value: #{value}"
end
end
end
2 changes: 1 addition & 1 deletion app/models/trends/preview_card_filter.rb
Expand Up @@ -40,7 +40,7 @@ def scope_for(key, value)
when 'locale'
PreviewCardTrend.where(language: value)
else
raise "Unknown filter: #{key}"
raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end
end

Expand Down
4 changes: 2 additions & 2 deletions app/models/trends/preview_card_provider_filter.rb
Expand Up @@ -30,7 +30,7 @@ def scope_for(key, value)
when 'status'
status_scope(value)
else
raise "Unknown filter: #{key}"
raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end
end

Expand All @@ -43,7 +43,7 @@ def status_scope(value)
when 'pending_review'
PreviewCardProvider.pending_review
else
raise "Unknown status: #{value}"
raise Mastodon::InvalidParameterError, "Unknown status: #{value}"
end
end
end
2 changes: 1 addition & 1 deletion app/models/trends/status_filter.rb
Expand Up @@ -40,7 +40,7 @@ def scope_for(key, value)
when 'locale'
StatusTrend.where(language: value)
else
raise "Unknown filter: #{key}"
raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end
end

Expand Down
1 change: 1 addition & 0 deletions lib/exceptions.rb
Expand Up @@ -11,6 +11,7 @@ class StreamValidationError < ValidationError; end
class RaceConditionError < Error; end
class RateLimitExceededError < Error; end
class SyntaxError < Error; end
class InvalidParameterError < Error; end

class UnexpectedResponseError < Error
attr_reader :response
Expand Down
4 changes: 2 additions & 2 deletions spec/models/custom_emoji_filter_spec.rb
Expand Up @@ -50,10 +50,10 @@
context 'else' do
let(:params) { { else: 'else' } }

it 'raises RuntimeError' do
it 'raises Mastodon::InvalidParameterError' do
expect do
subject
end.to raise_error(RuntimeError, /Unknown filter: else/)
end.to raise_error(Mastodon::InvalidParameterError, /Unknown filter: else/)
end
end
end
Expand Down

0 comments on commit dfb80db

Please sign in to comment.