end
def resource_params
- params.require(:domain_block).permit(:domain, :severity, :reject_media, :retroactive)
+ params.require(:domain_block).permit(:domain, :severity, :reject_media, :reject_reports, :retroactive)
end
def retroactive_unblock?
import { delegate } from 'rails-ujs';
-function handleDeleteStatus(event) {
- const [data] = event.detail;
- const element = document.querySelector(`[data-id="${data.id}"]`);
- if (element) {
- element.parentNode.removeChild(element);
- }
-}
-
-[].forEach.call(document.querySelectorAll('.trash-button'), (content) => {
- content.addEventListener('ajax:success', handleDeleteStatus);
-});
-
const batchCheckboxClassName = '.batch-checkbox input[type="checkbox"]';
delegate(document, '#batch_checkbox_all', 'change', ({ target }) => {
delegate(document, batchCheckboxClassName, 'change', () => {
const checkAllElement = document.querySelector('#batch_checkbox_all');
+
if (checkAllElement) {
checkAllElement.checked = [].every.call(document.querySelectorAll(batchCheckboxClassName), (content) => content.checked);
checkAllElement.indeterminate = !checkAllElement.checked && [].some.call(document.querySelectorAll(batchCheckboxClassName), (content) => content.checked);
});
delegate(document, '#domain_block_severity', 'change', ({ target }) => {
- const rejectMediaDiv = document.querySelector('.input.with_label.domain_block_reject_media');
+ const rejectMediaDiv = document.querySelector('.input.with_label.domain_block_reject_media');
+ const rejectReportsDiv = document.querySelector('.input.with_label.domain_block_reject_reports');
+
if (rejectMediaDiv) {
rejectMediaDiv.style.display = (target.value === 'suspend') ? 'none' : 'block';
}
+
+ if (rejectReportsDiv) {
+ rejectReportsDiv.style.display = (target.value === 'suspend') ? 'none' : 'block';
+ }
});
class ActivityPub::Activity::Flag < ActivityPub::Activity
def perform
+ return if skip_reports?
+
target_accounts = object_uris.map { |uri| account_from_uri(uri) }.compact.select(&:local?)
target_statuses_by_account = object_uris.map { |uri| status_from_uri(uri) }.compact.select(&:local?).group_by(&:account_id)
end
end
+ private
+
+ def skip_reports?
+ DomainBlock.find_by(domain: @account.domain)&.reject_reports?
+ end
+
def object_uris
@object_uris ||= Array(@object.is_a?(Array) ? @object.map { |item| value_or_id(item) } : value_or_id(@object))
end
#
# Table name: domain_blocks
#
-# id :bigint(8) not null, primary key
-# domain :string default(""), not null
-# created_at :datetime not null
-# updated_at :datetime not null
-# severity :integer default("silence")
-# reject_media :boolean default(FALSE), not null
+# id :bigint(8) not null, primary key
+# domain :string default(""), not null
+# created_at :datetime not null
+# updated_at :datetime not null
+# severity :integer default("silence")
+# reject_media :boolean default(FALSE), not null
+# reject_reports :boolean default(FALSE), not null
#
class DomainBlock < ApplicationRecord
%tr
- %td.domain
+ %td
%samp= domain_block.domain
%td.severity
= t("admin.domain_blocks.severities.#{domain_block.severity}")
%td.reject_media
- if domain_block.reject_media? || domain_block.suspend?
%i.fa.fa-check
+ %td.reject_reports
+ - if domain_block.reject_reports? || domain_block.suspend?
+ %i.fa.fa-check
%td
= table_link_to 'undo', t('admin.domain_blocks.undo'), admin_domain_block_path(domain_block)
%th= t('admin.domain_blocks.domain')
%th= t('admin.domain_blocks.severity')
%th= t('admin.domain_blocks.reject_media')
+ %th= t('admin.domain_blocks.reject_reports')
%th
%tbody
= render @domain_blocks
.fields-group
= f.input :reject_media, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_media'), hint: I18n.t('admin.domain_blocks.reject_media_hint')
+ .fields-group
+ = f.input :reject_reports, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_reports'), hint: I18n.t('admin.domain_blocks.reject_reports_hint')
+
.actions
= f.button :button, t('.create'), type: :submit
%tr
- %td.domain
+ %td
%samp= email_domain_block.domain
%td
= table_link_to 'trash', t('admin.email_domain_blocks.delete'), admin_email_domain_block_path(email_domain_block), method: :delete
%tr
- %td.domain
+ %td
= link_to instance.domain, admin_accounts_path(by_domain: instance.domain)
%td.count
= instance.accounts_count
title: New domain block
reject_media: Reject media files
reject_media_hint: Removes locally stored media files and refuses to download any in the future. Irrelevant for suspensions
+ reject_reports: Reject reports
+ reject_reports_hint: Ignore all reports coming from this domain. Irrelevant for suspensions
severities:
noop: None
silence: Silence
--- /dev/null
+require Rails.root.join('lib', 'mastodon', 'migration_helpers')
+
+class AddRejectReportsToDomainBlocks < ActiveRecord::Migration[5.2]
+ include Mastodon::MigrationHelpers
+
+ disable_ddl_transaction!
+
+ def up
+ safety_assured do
+ add_column_with_default :domain_blocks, :reject_reports, :boolean, default: false, allow_null: false
+ end
+ end
+
+ def down
+ remove_column :domain_blocks, :reject_reports
+ end
+end
t.datetime "updated_at", null: false
t.integer "severity", default: 0
t.boolean "reject_media", default: false, null: false
+ t.boolean "reject_reports", default: false, null: false
t.index ["domain"], name: "index_domain_blocks_on_domain", unique: true
end