discourse/app/services/user_anonymizer.rb
jeremylan d95728dd16 Fixed anonymizer when 'full name required' setting is on
When the setting 'full name required' is on the anonymizer was trying to set the user name to nil and this caused the user name and email to remain not anonymized.
Now in this scenario the user name is set to the anonimized username and the email is anonymized correctly.
2016-03-17 17:50:04 +11:00

68 lines
2.0 KiB
Ruby

class UserAnonymizer
def initialize(user, actor=nil)
@user = user
@actor = actor
end
def self.make_anonymous(user, actor=nil)
self.new(user, actor).make_anonymous
end
def make_anonymous
User.transaction do
prev_email = @user.email
prev_username = @user.username
if !UsernameChanger.change(@user, make_anon_username)
raise "Failed to change username"
end
@user.reload
@user.password = SecureRandom.hex
@user.email = "#{@user.username}@example.com"
@user.name = SiteSetting.full_name_required ? @user.username : nil
@user.date_of_birth = nil
@user.title = nil
@user.uploaded_avatar_id = nil
@user.save
options = @user.user_option
options.email_always = false
options.mailing_list_mode = false
options.email_digests = false
options.email_private_messages = false
options.email_direct = false
options.save
profile = @user.user_profile
profile.destroy if profile
@user.create_user_profile
@user.user_avatar.try(:destroy)
@user.twitter_user_info.try(:destroy)
@user.google_user_info.try(:destroy)
@user.github_user_info.try(:destroy)
@user.facebook_user_info.try(:destroy)
@user.single_sign_on_record.try(:destroy)
@user.oauth2_user_info.try(:destroy)
@user.user_open_ids.find_each { |x| x.destroy }
@user.api_key.try(:destroy)
UserHistory.create( action: UserHistory.actions[:anonymize_user],
target_user_id: @user.id,
acting_user_id: @actor ? @actor.id : @user.id,
email: prev_email,
details: "username: #{prev_username}" )
end
@user
end
def make_anon_username
100.times do
new_username = "anon#{(SecureRandom.random_number * 100000000).to_i}"
return new_username unless User.where(username_lower: new_username).exists?
end
raise "Failed to generate an anon username"
end
end