Add option to obfuscate domain name in public list of domain blocks (#15355)
- Replace the middle of the domain with * characters (except for periods) - Add SHA-256 digest of the domain name in tooltipgh/stable
parent
b1feb47055
commit
8a95867693
|
@ -74,11 +74,11 @@ module Admin
|
||||||
end
|
end
|
||||||
|
|
||||||
def update_params
|
def update_params
|
||||||
params.require(:domain_block).permit(:severity, :reject_media, :reject_reports, :private_comment, :public_comment)
|
params.require(:domain_block).permit(:severity, :reject_media, :reject_reports, :private_comment, :public_comment, :obfuscate)
|
||||||
end
|
end
|
||||||
|
|
||||||
def resource_params
|
def resource_params
|
||||||
params.require(:domain_block).permit(:domain, :severity, :reject_media, :reject_reports, :private_comment, :public_comment)
|
params.require(:domain_block).permit(:domain, :severity, :reject_media, :reject_reports, :private_comment, :public_comment, :obfuscate)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
# reject_reports :boolean default(FALSE), not null
|
# reject_reports :boolean default(FALSE), not null
|
||||||
# private_comment :text
|
# private_comment :text
|
||||||
# public_comment :text
|
# public_comment :text
|
||||||
|
# obfuscate :boolean default(FALSE), not null
|
||||||
#
|
#
|
||||||
|
|
||||||
class DomainBlock < ApplicationRecord
|
class DomainBlock < ApplicationRecord
|
||||||
|
@ -73,4 +74,23 @@ class DomainBlock < ApplicationRecord
|
||||||
scope = suspend? ? accounts.where(suspended_at: created_at) : accounts.where(silenced_at: created_at)
|
scope = suspend? ? accounts.where(suspended_at: created_at) : accounts.where(silenced_at: created_at)
|
||||||
scope.count
|
scope.count
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def public_domain
|
||||||
|
return domain unless obfuscate?
|
||||||
|
|
||||||
|
length = domain.size
|
||||||
|
visible_ratio = length / 4
|
||||||
|
|
||||||
|
domain.chars.map.with_index do |chr, i|
|
||||||
|
if i > visible_ratio && i < length - visible_ratio && chr != '.'
|
||||||
|
'*'
|
||||||
|
else
|
||||||
|
chr
|
||||||
|
end
|
||||||
|
end.join
|
||||||
|
end
|
||||||
|
|
||||||
|
def domain_digest
|
||||||
|
Digest::SHA256.hexdigest(domain)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -7,6 +7,6 @@
|
||||||
- domain_blocks.each do |domain_block|
|
- domain_blocks.each do |domain_block|
|
||||||
%tr
|
%tr
|
||||||
%td.nowrap
|
%td.nowrap
|
||||||
%span{ title: domain_block.domain }= domain_block.domain
|
%span{ title: "SHA-256: #{domain_block.domain_digest}" }= domain_block.public_domain
|
||||||
%td
|
%td
|
||||||
= domain_block.public_comment if display_blocks_rationale?
|
= domain_block.public_comment if display_blocks_rationale?
|
||||||
|
|
|
@ -20,6 +20,9 @@
|
||||||
.fields-group
|
.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')
|
= 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')
|
||||||
|
|
||||||
|
.fields-group
|
||||||
|
= f.input :obfuscate, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.obfuscate'), hint: I18n.t('admin.domain_blocks.obfuscate_hint')
|
||||||
|
|
||||||
.field-group
|
.field-group
|
||||||
= f.input :private_comment, wrapper: :with_label, label: I18n.t('admin.domain_blocks.private_comment'), hint: t('admin.domain_blocks.private_comment_hint'), rows: 6
|
= f.input :private_comment, wrapper: :with_label, label: I18n.t('admin.domain_blocks.private_comment'), hint: t('admin.domain_blocks.private_comment_hint'), rows: 6
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,9 @@
|
||||||
.fields-group
|
.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')
|
= 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')
|
||||||
|
|
||||||
|
.fields-group
|
||||||
|
= f.input :obfuscate, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.obfuscate'), hint: I18n.t('admin.domain_blocks.obfuscate_hint')
|
||||||
|
|
||||||
.field-group
|
.field-group
|
||||||
= f.input :private_comment, wrapper: :with_label, label: I18n.t('admin.domain_blocks.private_comment'), hint: t('admin.domain_blocks.private_comment_hint'), rows: 6
|
= f.input :private_comment, wrapper: :with_label, label: I18n.t('admin.domain_blocks.private_comment'), hint: t('admin.domain_blocks.private_comment_hint'), rows: 6
|
||||||
|
|
||||||
|
|
|
@ -402,6 +402,8 @@ en:
|
||||||
silence: Silence
|
silence: Silence
|
||||||
suspend: Suspend
|
suspend: Suspend
|
||||||
title: New domain block
|
title: New domain block
|
||||||
|
obfuscate: Obfuscate domain name
|
||||||
|
obfuscate_hint: Partially obfuscate the domain name in the list if advertising the list of domain limitations is enabled
|
||||||
private_comment: Private comment
|
private_comment: Private comment
|
||||||
private_comment_hint: Comment about this domain limitation for internal use by the moderators.
|
private_comment_hint: Comment about this domain limitation for internal use by the moderators.
|
||||||
public_comment: Public comment
|
public_comment: Public comment
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
require Rails.root.join('lib', 'mastodon', 'migration_helpers')
|
||||||
|
|
||||||
|
class AddObfuscateToDomainBlocks < ActiveRecord::Migration[5.2]
|
||||||
|
include Mastodon::MigrationHelpers
|
||||||
|
|
||||||
|
disable_ddl_transaction!
|
||||||
|
|
||||||
|
def up
|
||||||
|
safety_assured { add_column_with_default :domain_blocks, :obfuscate, :boolean, default: false, allow_null: false }
|
||||||
|
end
|
||||||
|
|
||||||
|
def down
|
||||||
|
remove_column :domain_blocks, :obfuscate
|
||||||
|
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.define(version: 2020_12_06_004238) do
|
ActiveRecord::Schema.define(version: 2020_12_18_054746) 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"
|
||||||
|
@ -360,6 +360,7 @@ ActiveRecord::Schema.define(version: 2020_12_06_004238) do
|
||||||
t.boolean "reject_reports", default: false, null: false
|
t.boolean "reject_reports", default: false, null: false
|
||||||
t.text "private_comment"
|
t.text "private_comment"
|
||||||
t.text "public_comment"
|
t.text "public_comment"
|
||||||
|
t.boolean "obfuscate", default: false, null: false
|
||||||
t.index ["domain"], name: "index_domain_blocks_on_domain", unique: true
|
t.index ["domain"], name: "index_domain_blocks_on_domain", unique: true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Reference in New Issue