about summary refs log tree commit diff
path: root/app/models
diff options
context:
space:
mode:
Diffstat (limited to 'app/models')
-rw-r--r--app/models/account.rb14
-rw-r--r--app/models/account_warning.rb2
-rw-r--r--app/models/admin/account_action.rb9
-rw-r--r--app/models/domain_block.rb2
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