diff options
author | multiple creatures <dev@multiple-creature.party> | 2019-08-08 09:59:14 -0500 |
---|---|---|
committer | multiple creatures <dev@multiple-creature.party> | 2019-08-08 12:46:17 -0500 |
commit | 4dfc40324b1f3b20550982621501e162d2ed3bed (patch) | |
tree | 1578cba8809b7db27dc82f4d439471194d5fad31 /app/models | |
parent | d019e55b7bc496d3c4d942fb4ffe65bb7e149249 (diff) |
add new `reject unknown` policy option to prevent spam & harassment from large/undermoderated servers
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/account.rb | 14 | ||||
-rw-r--r-- | app/models/account_warning.rb | 2 | ||||
-rw-r--r-- | app/models/admin/account_action.rb | 9 | ||||
-rw-r--r-- | app/models/domain_block.rb | 2 |
4 files changed, 26 insertions, 1 deletions
diff --git a/app/models/account.rb b/app/models/account.rb index 6528a7ae9..97b0e93e4 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -51,6 +51,7 @@ # gently :boolean default(FALSE), not null # kobold :boolean default(FALSE), not null # froze :boolean +# known :boolean default(FALSE), not null # class Account < ApplicationRecord @@ -213,6 +214,14 @@ class Account < ApplicationRecord ResolveAccountService.new.call(acct) end + def mark_unknown! + update!(known: false) + end + + def mark_known! + update!(known: true) + end + def force_unlisted! transaction do update!(force_unlisted: true) @@ -557,6 +566,7 @@ class Account < ApplicationRecord before_create :generate_keys before_create :set_domain_from_inbox_url + before_create :set_known, if: :local? before_validation :prepare_contents, if: :local? before_validation :prepare_username, on: :create before_destroy :clean_feed_manager @@ -579,6 +589,10 @@ class Account < ApplicationRecord nil end + def set_known + self.known = true + end + def generate_keys return unless local? && !Rails.env.test? diff --git a/app/models/account_warning.rb b/app/models/account_warning.rb index 4e06cf3d0..ddc3ff96e 100644 --- a/app/models/account_warning.rb +++ b/app/models/account_warning.rb @@ -13,7 +13,7 @@ # class AccountWarning < ApplicationRecord - enum action: %i(none disable force_sensitive force_unlisted silence suspend), _suffix: :action + enum action: %i(none disable force_sensitive force_unlisted silence suspend mark_unknown), _suffix: :action belongs_to :account, inverse_of: :account_warnings belongs_to :target_account, class_name: 'Account', inverse_of: :targeted_account_warnings diff --git a/app/models/admin/account_action.rb b/app/models/admin/account_action.rb index 1ed464423..2195dc6a9 100644 --- a/app/models/admin/account_action.rb +++ b/app/models/admin/account_action.rb @@ -12,6 +12,7 @@ class Admin::AccountAction force_unlisted silence suspend + mark_unknown ).freeze attr_accessor :target_account, @@ -66,6 +67,8 @@ class Admin::AccountAction handle_silence! when 'suspend' handle_suspend! + when 'mark_unknown' + handle_mark_unknown! end end @@ -128,6 +131,12 @@ class Admin::AccountAction queue_suspension_worker! end + def handle_mark_unknown! + authorize(target_account, :mark_unknown?) + log_action(:mark_unknown, target_account.user) + target_account.mark_unknown! + end + def text_for_warning [warning_preset&.text, text].compact.join("\n\n") end diff --git a/app/models/domain_block.rb b/app/models/domain_block.rb index e4baee5f0..7d3b65720 100644 --- a/app/models/domain_block.rb +++ b/app/models/domain_block.rb @@ -12,6 +12,7 @@ # reject_reports :boolean default(FALSE), not null # force_sensitive :boolean default(FALSE), not null # reason :text +# reject_unknown :boolean default(FALSE), not null # class DomainBlock < ApplicationRecord @@ -52,6 +53,7 @@ class DomainBlock < ApplicationRecord additionals << "force sensitive media" if force_sensitive? additionals << "reject media" if reject_media? additionals << "reject reports" if reject_reports? + additionals << "reject unknown accounts" if reject_unknown? additionals end |