Skip to content
This repository has been archived by the owner on Dec 21, 2023. It is now read-only.

Commit

Permalink
Add option to obfuscate domain name in public list of domain blocks (m…
Browse files Browse the repository at this point in the history
…astodon#15355)

- Replace the middle of the domain with * characters (except for periods)
- Add SHA-256 digest of the domain name in tooltip
  • Loading branch information
Gargron authored Dec 18, 2020
1 parent b1feb47 commit 8a95867
Show file tree
Hide file tree
Showing 8 changed files with 48 additions and 4 deletions.
4 changes: 2 additions & 2 deletions app/controllers/admin/domain_blocks_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -74,11 +74,11 @@ def set_domain_block
end

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

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
20 changes: 20 additions & 0 deletions app/models/domain_block.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
# reject_reports :boolean default(FALSE), not null
# private_comment :text
# public_comment :text
# obfuscate :boolean default(FALSE), not null
#

class DomainBlock < ApplicationRecord
Expand Down Expand Up @@ -73,4 +74,23 @@ def affected_accounts_count
scope = suspend? ? accounts.where(suspended_at: created_at) : accounts.where(silenced_at: created_at)
scope.count
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
2 changes: 1 addition & 1 deletion app/views/about/_domain_blocks.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@
- domain_blocks.each do |domain_block|
%tr
%td.nowrap
%span{ title: domain_block.domain }= domain_block.domain
%span{ title: "SHA-256: #{domain_block.domain_digest}" }= domain_block.public_domain
%td
= domain_block.public_comment if display_blocks_rationale?
3 changes: 3 additions & 0 deletions app/views/admin/domain_blocks/edit.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@
.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')

.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
= 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

Expand Down
3 changes: 3 additions & 0 deletions app/views/admin/domain_blocks/new.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@
.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')

.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
= 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

Expand Down
2 changes: 2 additions & 0 deletions config/locales/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -402,6 +402,8 @@ en:
silence: Silence
suspend: Suspend
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_hint: Comment about this domain limitation for internal use by the moderators.
public_comment: Public comment
Expand Down
15 changes: 15 additions & 0 deletions db/migrate/20201218054746_add_obfuscate_to_domain_blocks.rb
Original file line number Diff line number Diff line change
@@ -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
3 changes: 2 additions & 1 deletion db/schema.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
#
# 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
enable_extension "plpgsql"
Expand Down Expand Up @@ -360,6 +360,7 @@
t.boolean "reject_reports", default: false, null: false
t.text "private_comment"
t.text "public_comment"
t.boolean "obfuscate", default: false, null: false
t.index ["domain"], name: "index_domain_blocks_on_domain", unique: true
end

Expand Down

0 comments on commit 8a95867

Please sign in to comment.