users: set is_deleted flag when account is deleted.

* Set the `is_deleted` flag when the user is deleted.
* Return the `is_deleted` flag in the /users.json API.
This commit is contained in:
evazion
2022-11-06 13:04:05 -06:00
parent 0a78a6188d
commit 6f08e1427b
5 changed files with 20 additions and 9 deletions

View File

@@ -87,15 +87,11 @@ class UserDeletion
end
def reset_password
user.update!(password: SecureRandom.hex(16))
user.update!(is_deleted: true, password: SecureRandom.hex(16))
end
def rename
name = "user_#{user.id}"
name += "~" while User.exists?(name: name)
request = UserNameChangeRequest.new(user: user, desired_name: name, original_name: user.name)
request.save!(validate: false) # XXX don't validate so that the 1 name change per week rule doesn't interfere
UserNameChangeRequest.create!(user: user, desired_name: "user_#{user.id}", original_name: user.name, is_deletion: true)
end
def validate_deletion

View File

@@ -88,6 +88,7 @@ class User < ApplicationRecord
attribute :theme, default: :auto
attribute :upload_points, default: Danbooru.config.initial_upload_points.to_i
attribute :bit_prefs, default: 0
attribute :is_deleted, default: false
has_bit_flags BOOLEAN_ATTRIBUTES, :field => "bit_prefs"
enum theme: { auto: 0, light: 50, dark: 100 }, _suffix: true

View File

@@ -3,11 +3,11 @@
class UserNameChangeRequest < ApplicationRecord
belongs_to :user
attr_accessor :updater
attr_accessor :updater, :is_deletion
validate :not_limited, on: :create
validates :original_name, presence: true
validates :desired_name, user_name: true, presence: true, on: :create
validates :desired_name, presence: true, user_name: true, on: :create, unless: :is_deletion
after_create :update_name!
after_create :create_mod_action
@@ -33,6 +33,7 @@ class UserNameChangeRequest < ApplicationRecord
end
def not_limited
return if is_deletion
return if user.name_invalid?
return if updater && updater != user

View File

@@ -65,7 +65,7 @@ class UserPolicy < ApplicationPolicy
def api_attributes
attributes = %i[
id created_at name inviter_id level level_string
post_upload_count post_update_count note_update_count is_banned
post_upload_count post_update_count note_update_count is_banned is_deleted
]
if record.id == user.id