Add optional OAuth application to reports (#30539)
This commit is contained in:
parent
fa54b61216
commit
aa88aca0ad
11 changed files with 47 additions and 3 deletions
|
@ -10,7 +10,7 @@ class Api::V1::ReportsController < Api::BaseController
|
||||||
@report = ReportService.new.call(
|
@report = ReportService.new.call(
|
||||||
current_account,
|
current_account,
|
||||||
reported_account,
|
reported_account,
|
||||||
report_params
|
report_params.merge(application: doorkeeper_token.application)
|
||||||
)
|
)
|
||||||
|
|
||||||
render json: @report, serializer: REST::ReportSerializer
|
render json: @report, serializer: REST::ReportSerializer
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
# category :integer default("other"), not null
|
# category :integer default("other"), not null
|
||||||
# action_taken_at :datetime
|
# action_taken_at :datetime
|
||||||
# rule_ids :bigint(8) is an Array
|
# rule_ids :bigint(8) is an Array
|
||||||
|
# application_id :bigint(8)
|
||||||
#
|
#
|
||||||
|
|
||||||
class Report < ApplicationRecord
|
class Report < ApplicationRecord
|
||||||
|
@ -31,6 +32,7 @@ class Report < ApplicationRecord
|
||||||
rate_limit by: :account, family: :reports
|
rate_limit by: :account, family: :reports
|
||||||
|
|
||||||
belongs_to :account
|
belongs_to :account
|
||||||
|
belongs_to :application, class_name: 'Doorkeeper::Application', optional: true
|
||||||
|
|
||||||
with_options class_name: 'Account' do
|
with_options class_name: 'Account' do
|
||||||
belongs_to :target_account
|
belongs_to :target_account
|
||||||
|
|
|
@ -10,6 +10,7 @@ class ReportService < BaseService
|
||||||
@comment = options.delete(:comment).presence || ''
|
@comment = options.delete(:comment).presence || ''
|
||||||
@category = options[:rule_ids].present? ? 'violation' : (options.delete(:category).presence || 'other')
|
@category = options[:rule_ids].present? ? 'violation' : (options.delete(:category).presence || 'other')
|
||||||
@rule_ids = options.delete(:rule_ids).presence
|
@rule_ids = options.delete(:rule_ids).presence
|
||||||
|
@application = options.delete(:application).presence
|
||||||
@options = options
|
@options = options
|
||||||
|
|
||||||
raise ActiveRecord::RecordNotFound if @target_account.unavailable?
|
raise ActiveRecord::RecordNotFound if @target_account.unavailable?
|
||||||
|
@ -35,7 +36,8 @@ class ReportService < BaseService
|
||||||
uri: @options[:uri],
|
uri: @options[:uri],
|
||||||
forwarded: forward_to_origin?,
|
forwarded: forward_to_origin?,
|
||||||
category: @category,
|
category: @category,
|
||||||
rule_ids: @rule_ids
|
rule_ids: @rule_ids,
|
||||||
|
application: @application
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,12 @@
|
||||||
= admin_account_link_to report.account
|
= admin_account_link_to report.account
|
||||||
- else
|
- else
|
||||||
= report.account.domain
|
= report.account.domain
|
||||||
|
- if report.application.present?
|
||||||
|
.report-header__details__item
|
||||||
|
.report-header__details__item__header
|
||||||
|
%strong= t('admin.reports.reported_with_application')
|
||||||
|
.report-header__details__item__content
|
||||||
|
= report.application.name
|
||||||
.report-header__details__item
|
.report-header__details__item
|
||||||
.report-header__details__item__header
|
.report-header__details__item__header
|
||||||
%strong= t('admin.reports.status')
|
%strong= t('admin.reports.status')
|
||||||
|
|
|
@ -639,6 +639,7 @@ en:
|
||||||
report: 'Report #%{id}'
|
report: 'Report #%{id}'
|
||||||
reported_account: Reported account
|
reported_account: Reported account
|
||||||
reported_by: Reported by
|
reported_by: Reported by
|
||||||
|
reported_with_application: Reported with application
|
||||||
resolved: Resolved
|
resolved: Resolved
|
||||||
resolved_msg: Report successfully resolved!
|
resolved_msg: Report successfully resolved!
|
||||||
skip_to_actions: Skip to actions
|
skip_to_actions: Skip to actions
|
||||||
|
|
8
db/migrate/20240713171841_add_application_to_reports.rb
Normal file
8
db/migrate/20240713171841_add_application_to_reports.rb
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
class AddApplicationToReports < ActiveRecord::Migration[7.1]
|
||||||
|
def change
|
||||||
|
add_column :reports, :application_id, :bigint, null: true
|
||||||
|
add_foreign_key :reports, :oauth_applications, column: :application_id, on_delete: :nullify, validate: false
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,7 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
class ValidateAddApplicationToReports < ActiveRecord::Migration[7.1]
|
||||||
|
def change
|
||||||
|
validate_foreign_key :reports, :oauth_applications
|
||||||
|
end
|
||||||
|
end
|
|
@ -10,7 +10,7 @@
|
||||||
#
|
#
|
||||||
# It's strongly recommended that you check this file into your version control system.
|
# It's strongly recommended that you check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema[7.1].define(version: 2024_07_12_064044) do
|
ActiveRecord::Schema[7.1].define(version: 2024_07_13_171909) do
|
||||||
# These are extensions that must be enabled in order to support this database
|
# These are extensions that must be enabled in order to support this database
|
||||||
enable_extension "plpgsql"
|
enable_extension "plpgsql"
|
||||||
|
|
||||||
|
@ -929,6 +929,7 @@ ActiveRecord::Schema[7.1].define(version: 2024_07_12_064044) do
|
||||||
t.integer "category", default: 0, null: false
|
t.integer "category", default: 0, null: false
|
||||||
t.datetime "action_taken_at", precision: nil
|
t.datetime "action_taken_at", precision: nil
|
||||||
t.bigint "rule_ids", array: true
|
t.bigint "rule_ids", array: true
|
||||||
|
t.bigint "application_id"
|
||||||
t.index ["account_id"], name: "index_reports_on_account_id"
|
t.index ["account_id"], name: "index_reports_on_account_id"
|
||||||
t.index ["action_taken_by_account_id"], name: "index_reports_on_action_taken_by_account_id", where: "(action_taken_by_account_id IS NOT NULL)"
|
t.index ["action_taken_by_account_id"], name: "index_reports_on_action_taken_by_account_id", where: "(action_taken_by_account_id IS NOT NULL)"
|
||||||
t.index ["assigned_account_id"], name: "index_reports_on_assigned_account_id", where: "(assigned_account_id IS NOT NULL)"
|
t.index ["assigned_account_id"], name: "index_reports_on_assigned_account_id", where: "(assigned_account_id IS NOT NULL)"
|
||||||
|
@ -1361,6 +1362,7 @@ ActiveRecord::Schema[7.1].define(version: 2024_07_12_064044) do
|
||||||
add_foreign_key "reports", "accounts", column: "assigned_account_id", on_delete: :nullify
|
add_foreign_key "reports", "accounts", column: "assigned_account_id", on_delete: :nullify
|
||||||
add_foreign_key "reports", "accounts", column: "target_account_id", name: "fk_eb37af34f0", on_delete: :cascade
|
add_foreign_key "reports", "accounts", column: "target_account_id", name: "fk_eb37af34f0", on_delete: :cascade
|
||||||
add_foreign_key "reports", "accounts", name: "fk_4b81f7522c", on_delete: :cascade
|
add_foreign_key "reports", "accounts", name: "fk_4b81f7522c", on_delete: :cascade
|
||||||
|
add_foreign_key "reports", "oauth_applications", column: "application_id", on_delete: :nullify
|
||||||
add_foreign_key "scheduled_statuses", "accounts", on_delete: :cascade
|
add_foreign_key "scheduled_statuses", "accounts", on_delete: :cascade
|
||||||
add_foreign_key "session_activations", "oauth_access_tokens", column: "access_token_id", name: "fk_957e5bda89", on_delete: :cascade
|
add_foreign_key "session_activations", "oauth_access_tokens", column: "access_token_id", name: "fk_957e5bda89", on_delete: :cascade
|
||||||
add_foreign_key "session_activations", "users", name: "fk_e5fda67334", on_delete: :cascade
|
add_foreign_key "session_activations", "users", name: "fk_e5fda67334", on_delete: :cascade
|
||||||
|
|
|
@ -36,6 +36,7 @@ RSpec.describe ActivityPub::Activity::Flag do
|
||||||
expect(report).to_not be_nil
|
expect(report).to_not be_nil
|
||||||
expect(report.comment).to eq 'Boo!!'
|
expect(report.comment).to eq 'Boo!!'
|
||||||
expect(report.status_ids).to eq [status.id]
|
expect(report.status_ids).to eq [status.id]
|
||||||
|
expect(report.application).to be_nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -47,6 +47,7 @@ RSpec.describe 'Reports' do
|
||||||
|
|
||||||
expect(target_account.targeted_reports).to_not be_empty
|
expect(target_account.targeted_reports).to_not be_empty
|
||||||
expect(target_account.targeted_reports.first.comment).to eq 'reasons'
|
expect(target_account.targeted_reports.first.comment).to eq 'reasons'
|
||||||
|
expect(target_account.targeted_reports.first.application).to eq token.application
|
||||||
|
|
||||||
expect(emails.size)
|
expect(emails.size)
|
||||||
.to eq(1)
|
.to eq(1)
|
||||||
|
|
|
@ -23,6 +23,11 @@ RSpec.describe ReportService do
|
||||||
stub_request(:post, 'http://example.com/inbox').to_return(status: 200)
|
stub_request(:post, 'http://example.com/inbox').to_return(status: 200)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'does not have an application' do
|
||||||
|
report = subject.call(source_account, remote_account)
|
||||||
|
expect(report.application).to be_nil
|
||||||
|
end
|
||||||
|
|
||||||
context 'when forward is true', :inline_jobs do
|
context 'when forward is true', :inline_jobs do
|
||||||
let(:forward) { true }
|
let(:forward) { true }
|
||||||
|
|
||||||
|
@ -96,6 +101,15 @@ RSpec.describe ReportService do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'when passed an application' do
|
||||||
|
let(:application) { Fabricate(:application) }
|
||||||
|
|
||||||
|
it 'has an application' do
|
||||||
|
report = subject.call(source_account, target_account, application: application)
|
||||||
|
expect(report.application).to eq application
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context 'when the reported status is a DM' do
|
context 'when the reported status is a DM' do
|
||||||
subject do
|
subject do
|
||||||
-> { described_class.new.call(source_account, target_account, status_ids: [status.id]) }
|
-> { described_class.new.call(source_account, target_account, status_ids: [status.id]) }
|
||||||
|
|
Loading…
Reference in a new issue