summaryrefslogtreecommitdiffstats
path: root/app/models
diff options
context:
space:
mode:
Diffstat (limited to 'app/models')
-rw-r--r--app/models/account.rb9
-rw-r--r--app/models/account_deletion_request.rb20
-rw-r--r--app/models/admin/account_action.rb2
-rw-r--r--app/models/concerns/account_associations.rb3
-rw-r--r--app/models/form/account_batch.rb2
-rw-r--r--app/models/invite.rb2
-rw-r--r--app/models/user.rb4
7 files changed, 31 insertions, 11 deletions
diff --git a/app/models/account.rb b/app/models/account.rb
index 6b7ebda9e67..5acc8d621cb 100644
--- a/app/models/account.rb
+++ b/app/models/account.rb
@@ -222,23 +222,20 @@ class Account < ApplicationRecord
def suspend!(date = Time.now.utc)
transaction do
- user&.disable! if local?
+ create_deletion_request!
update!(suspended_at: date)
end
end
def unsuspend!
transaction do
- user&.enable! if local?
+ deletion_request&.destroy!
update!(suspended_at: nil)
end
end
def memorialize!
- transaction do
- user&.disable! if local?
- update!(memorial: true)
- end
+ update!(memorial: true)
end
def sign?
diff --git a/app/models/account_deletion_request.rb b/app/models/account_deletion_request.rb
new file mode 100644
index 00000000000..7d0c346cc27
--- /dev/null
+++ b/app/models/account_deletion_request.rb
@@ -0,0 +1,20 @@
+# frozen_string_literal: true
+
+# == Schema Information
+#
+# Table name: account_deletion_requests
+#
+# id :bigint(8) not null, primary key
+# account_id :bigint(8)
+# created_at :datetime not null
+# updated_at :datetime not null
+#
+class AccountDeletionRequest < ApplicationRecord
+ DELAY_TO_DELETION = 30.days.freeze
+
+ belongs_to :account
+
+ def due_at
+ created_at + DELAY_TO_DELETION
+ end
+end
diff --git a/app/models/admin/account_action.rb b/app/models/admin/account_action.rb
index 9edd152f57b..c4ac09520ef 100644
--- a/app/models/admin/account_action.rb
+++ b/app/models/admin/account_action.rb
@@ -134,7 +134,7 @@ class Admin::AccountAction
end
def process_email!
- UserMailer.warning(target_account.user, warning, status_ids).deliver_now! if warnable?
+ UserMailer.warning(target_account.user, warning, status_ids).deliver_later! if warnable?
end
def warnable?
diff --git a/app/models/concerns/account_associations.rb b/app/models/concerns/account_associations.rb
index cca3a17fa41..98849f8fcfa 100644
--- a/app/models/concerns/account_associations.rb
+++ b/app/models/concerns/account_associations.rb
@@ -60,5 +60,8 @@ module AccountAssociations
# Hashtags
has_and_belongs_to_many :tags
has_many :featured_tags, -> { includes(:tag) }, dependent: :destroy, inverse_of: :account
+
+ # Account deletion requests
+ has_one :deletion_request, class_name: 'AccountDeletionRequest', inverse_of: :account, dependent: :destroy
end
end
diff --git a/app/models/form/account_batch.rb b/app/models/form/account_batch.rb
index 0b285fde92c..7b9e40f6855 100644
--- a/app/models/form/account_batch.rb
+++ b/app/models/form/account_batch.rb
@@ -69,6 +69,6 @@ class Form::AccountBatch
records = accounts.includes(:user)
records.each { |account| authorize(account.user, :reject?) }
- .each { |account| SuspendAccountService.new.call(account, reserve_email: false, reserve_username: false) }
+ .each { |account| DeleteAccountService.new.call(account, reserve_email: false, reserve_username: false) }
end
end
diff --git a/app/models/invite.rb b/app/models/invite.rb
index 29d25eae801..7ea4e2f9841 100644
--- a/app/models/invite.rb
+++ b/app/models/invite.rb
@@ -28,7 +28,7 @@ class Invite < ApplicationRecord
before_validation :set_code
def valid_for_use?
- (max_uses.nil? || uses < max_uses) && !expired? && !(user.nil? || user.disabled?)
+ (max_uses.nil? || uses < max_uses) && !expired? && user&.functional?
end
private
diff --git a/app/models/user.rb b/app/models/user.rb
index dbee0898824..6b21d6ed674 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -168,7 +168,7 @@ class User < ApplicationRecord
end
def active_for_authentication?
- true
+ !account.memorial?
end
def suspicious_sign_in?(ip)
@@ -176,7 +176,7 @@ class User < ApplicationRecord
end
def functional?
- confirmed? && approved? && !disabled? && !account.suspended? && account.moved_to_account_id.nil?
+ confirmed? && approved? && !disabled? && !account.suspended? && !account.memorial? && account.moved_to_account_id.nil?
end
def unconfirmed_or_pending?