Fix error when passing unknown filter param in REST API (#20626)

Fix #19156
main^2
Eugen Rochko 1 year ago committed by GitHub
parent 5c826c408d
commit b31afc6294
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      app/controllers/api/base_controller.rb
  2. 10
      app/models/account_filter.rb
  3. 2
      app/models/admin/action_log_filter.rb
  4. 4
      app/models/admin/appeal_filter.rb
  5. 2
      app/models/admin/status_filter.rb
  6. 2
      app/models/announcement_filter.rb
  7. 2
      app/models/custom_emoji_filter.rb
  8. 4
      app/models/instance_filter.rb
  9. 2
      app/models/invite_filter.rb
  10. 12
      app/models/relationship_filter.rb
  11. 4
      app/models/report_filter.rb
  12. 2
      app/models/trends/preview_card_filter.rb
  13. 4
      app/models/trends/preview_card_provider_filter.rb
  14. 2
      app/models/trends/status_filter.rb
  15. 1
      lib/exceptions.rb
  16. 4
      spec/models/custom_emoji_filter_spec.rb

@ -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

@ -57,7 +57,7 @@ class AccountFilter
when 'order'
order_scope(value)
else
raise "Unknown filter: #{key}"
raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end
end
@ -68,7 +68,7 @@ class AccountFilter
when 'remote'
Account.remote
else
raise "Unknown origin: #{value}"
raise Mastodon::InvalidParameterError, "Unknown origin: #{value}"
end
end
@ -84,8 +84,10 @@ class AccountFilter
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
@ -96,7 +98,7 @@ class AccountFilter
when 'recent'
Account.recent
else
raise "Unknown order: #{value}"
raise Mastodon::InvalidParameterError, "Unknown order: #{value}"
end
end

@ -95,7 +95,7 @@ class Admin::ActionLogFilter
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

@ -30,7 +30,7 @@ class Admin::AppealFilter
when 'status'
status_scope(value)
else
raise "Unknown filter: #{key}"
raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end
end
@ -43,7 +43,7 @@ class Admin::AppealFilter
when 'pending'
Appeal.pending
else
raise "Unknown status: #{value}"
raise Mastodon::InvalidParameterError, "Unknown status: #{value}"
end
end
end

@ -32,7 +32,7 @@ class Admin::StatusFilter
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

@ -33,7 +33,7 @@ class AnnouncementFilter
when 'unpublished'
Announcement.unpublished
else
raise "Unknown filter: #{key}"
raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end
end
end

@ -39,7 +39,7 @@ class CustomEmojiFilter
when 'shortcode'
CustomEmoji.search(value.strip)
else
raise "Unknown filter: #{key}"
raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end
end
end

@ -36,7 +36,7 @@ class InstanceFilter
when 'availability'
availability_scope(value)
else
raise "Unknown filter: #{key}"
raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end
end
@ -47,7 +47,7 @@ class InstanceFilter
when 'unavailable'
Instance.joins(:unavailable_domain)
else
raise "Unknown availability: #{value}"
raise Mastodon::InvalidParameterError, "Unknown availability: #{value}"
end
end
end

@ -31,7 +31,7 @@ class InviteFilter
when 'expired'
Invite.expired
else
raise "Unknown filter: #{key}"
raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end
end
end

@ -53,7 +53,7 @@ class RelationshipFilter
when 'activity'
activity_scope(value)
else
raise "Unknown filter: #{key}"
raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end
end
@ -68,7 +68,7 @@ class RelationshipFilter
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
@ -83,7 +83,7 @@ class RelationshipFilter
when 'remote'
Account.remote
else
raise "Unknown location: #{value}"
raise Mastodon::InvalidParameterError, "Unknown location: #{value}"
end
end
@ -94,7 +94,7 @@ class RelationshipFilter
when 'primary'
Account.where(moved_to_account_id: nil)
else
raise "Unknown status: #{value}"
raise Mastodon::InvalidParameterError, "Unknown status: #{value}"
end
end
@ -105,7 +105,7 @@ class RelationshipFilter
when 'recent'
params[:relationship] == 'invited' ? Account.recent : Follow.recent
else
raise "Unknown order: #{value}"
raise Mastodon::InvalidParameterError, "Unknown order: #{value}"
end
end
@ -114,7 +114,7 @@ class RelationshipFilter
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

@ -38,7 +38,7 @@ class ReportFilter
when :target_origin
target_origin_scope(value)
else
raise "Unknown filter: #{key}"
raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end
end
@ -49,7 +49,7 @@ class ReportFilter
when :remote
Report.where(target_account: Account.remote)
else
raise "Unknown value: #{value}"
raise Mastodon::InvalidParameterError, "Unknown value: #{value}"
end
end
end

@ -40,7 +40,7 @@ class Trends::PreviewCardFilter
when 'locale'
PreviewCardTrend.where(language: value)
else
raise "Unknown filter: #{key}"
raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end
end

@ -30,7 +30,7 @@ class Trends::PreviewCardProviderFilter
when 'status'
status_scope(value)
else
raise "Unknown filter: #{key}"
raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end
end
@ -43,7 +43,7 @@ class Trends::PreviewCardProviderFilter
when 'pending_review'
PreviewCardProvider.pending_review
else
raise "Unknown status: #{value}"
raise Mastodon::InvalidParameterError, "Unknown status: #{value}"
end
end
end

@ -40,7 +40,7 @@ class Trends::StatusFilter
when 'locale'
StatusTrend.where(language: value)
else
raise "Unknown filter: #{key}"
raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
end
end

@ -11,6 +11,7 @@ module Mastodon
class RaceConditionError < Error; end
class RateLimitExceededError < Error; end
class SyntaxError < Error; end
class InvalidParameterError < Error; end
class UnexpectedResponseError < Error
attr_reader :response

@ -50,10 +50,10 @@ RSpec.describe CustomEmojiFilter do
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

Loading…
Cancel
Save