forked from fedi/mastodon
Fix reported accounts not being whitelisted when resolving a spamcheck report (#13289)
This commit is contained in:
parent
c39ad4ab2f
commit
61f35c1a8a
|
@ -62,8 +62,6 @@ class Admin::AccountAction
|
||||||
|
|
||||||
def process_action!
|
def process_action!
|
||||||
case type
|
case type
|
||||||
when 'none'
|
|
||||||
handle_resolve!
|
|
||||||
when 'disable'
|
when 'disable'
|
||||||
handle_disable!
|
handle_disable!
|
||||||
when 'silence'
|
when 'silence'
|
||||||
|
@ -105,16 +103,6 @@ class Admin::AccountAction
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def handle_resolve!
|
|
||||||
if with_report? && report.account_id == -99 && target_account.trust_level == Account::TRUST_LEVELS[:untrusted]
|
|
||||||
# This is an automated report and it is being dismissed, so it's
|
|
||||||
# a false positive, in which case update the account's trust level
|
|
||||||
# to prevent further spam checks
|
|
||||||
|
|
||||||
target_account.update(trust_level: Account::TRUST_LEVELS[:trusted])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def handle_disable!
|
def handle_disable!
|
||||||
authorize(target_account.user, :disable?)
|
authorize(target_account.user, :disable?)
|
||||||
log_action(:disable, target_account.user)
|
log_action(:disable, target_account.user)
|
||||||
|
|
|
@ -59,6 +59,14 @@ class Report < ApplicationRecord
|
||||||
end
|
end
|
||||||
|
|
||||||
def resolve!(acting_account)
|
def resolve!(acting_account)
|
||||||
|
if account_id == -99 && target_account.trust_level == Account::TRUST_LEVELS[:untrusted]
|
||||||
|
# This is an automated report and it is being dismissed, so it's
|
||||||
|
# a false positive, in which case update the account's trust level
|
||||||
|
# to prevent further spam checks
|
||||||
|
|
||||||
|
target_account.update(trust_level: Account::TRUST_LEVELS[:trusted])
|
||||||
|
end
|
||||||
|
|
||||||
RemovalWorker.push_bulk(Status.with_discarded.discarded.where(id: status_ids).pluck(:id)) { |status_id| [status_id, { immediate: true }] }
|
RemovalWorker.push_bulk(Status.with_discarded.discarded.where(id: status_ids).pluck(:id)) { |status_id| [status_id, { immediate: true }] }
|
||||||
update!(action_taken: true, action_taken_by_account_id: acting_account.id)
|
update!(action_taken: true, action_taken_by_account_id: acting_account.id)
|
||||||
end
|
end
|
||||||
|
|
|
@ -46,6 +46,26 @@ describe Admin::ReportsController do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe 'POST #resolve' do
|
||||||
|
it 'resolves the report' do
|
||||||
|
report = Fabricate(:report)
|
||||||
|
|
||||||
|
put :resolve, params: { id: report }
|
||||||
|
expect(response).to redirect_to(admin_reports_path)
|
||||||
|
report.reload
|
||||||
|
expect(report.action_taken_by_account).to eq user.account
|
||||||
|
expect(report.action_taken).to eq true
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'sets trust level when the report is an antispam one' do
|
||||||
|
report = Fabricate(:report, account: Account.representative)
|
||||||
|
|
||||||
|
put :resolve, params: { id: report }
|
||||||
|
report.reload
|
||||||
|
expect(report.target_account.trust_level).to eq Account::TRUST_LEVELS[:trusted]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe 'POST #reopen' do
|
describe 'POST #reopen' do
|
||||||
it 'reopens the report' do
|
it 'reopens the report' do
|
||||||
report = Fabricate(:report)
|
report = Fabricate(:report)
|
||||||
|
|
Loading…
Reference in a new issue