docbrown/app/services/moderator/banish_user.rb
Andy Zhao 0fca6a6f35
Permanently delete users from Mailchimp automatically (#17395)
* Rename unsubscribe to remove_from_mailchimp_newsletters

* Permanently delete from mailchimp instead of unsubscribing

* Rename method and remove comment

* Don't use i18n because of error message

We don't want to use i18n here because e.title comes from the error response. If a Forem
was using a different locale and Mailchimp for newsletters, they would still receive the
error response in English (because of Mailchimp).

* Refactor and rename a bit

* Rename methods in tests accordingly

* Remove now moot test

* Rename method in other places it was previously called

* Remove unused translation, see 62fee247ee2565e4d3d14919a8636a76ce5ecc9f

* Fix typo and report error if not 404
2022-04-26 09:48:50 -04:00

51 lines
1.5 KiB
Ruby

module Moderator
class BanishUser < ManageActivityAndRoles
DEFAULT_PROFILE_IMAGE =
"https://thepracticaldev.s3.amazonaws.com/i/99mvlsfu5tfj9m7ku25d.png".freeze
attr_reader :user, :admin
def self.call(admin:, user:)
new(user: user, admin: admin).banish
end
def initialize(admin:, user:)
super(user: user, admin: admin, user_params: {})
end
def banish
BanishedUser.create(username: user.username, banished_by: admin)
user.remove_from_mailchimp_newsletters if user.email?
remove_profile_info
handle_user_status("Suspend", I18n.t("services.moderator.banish_user.spam_account"))
delete_user_activity
delete_comments
delete_articles
reassign_and_bust_username
delete_vomit_reactions
end
private
def reassign_and_bust_username
new_name = "spam_#{rand(1_000_000)}"
new_username = "spam_#{rand(1_000_000)}"
if User.find_by(name: new_name) || User.find_by(username: new_username)
new_name = "spam_#{rand(1_000_000)}"
new_username = "spam_#{rand(1_000_000)}"
end
user.update_columns(name: new_name, username: new_username, old_username: user.username,
profile_updated_at: Time.current)
EdgeCache::Bust.call("/#{user.old_username}")
end
def remove_profile_info
user.profile.clear!
user.update_columns(profile_image: DEFAULT_PROFILE_IMAGE)
end
def delete_vomit_reactions
Reaction.where(reactable: user, category: "vomit").delete_all
end
end
end