FEATURE: log all username and name changes
This commit is contained in:
parent
0e3def7d2b
commit
b32d3d66e5
|
@ -62,7 +62,8 @@ class UserHistory < ActiveRecord::Base
|
||||||
change_readonly_mode: 44,
|
change_readonly_mode: 44,
|
||||||
backup_download: 45,
|
backup_download: 45,
|
||||||
backup_destroy: 46,
|
backup_destroy: 46,
|
||||||
notified_about_get_a_room: 47)
|
notified_about_get_a_room: 47,
|
||||||
|
change_name: 48)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Staff actions is a subset of all actions, used to audit actions taken by staff users.
|
# Staff actions is a subset of all actions, used to audit actions taken by staff users.
|
||||||
|
|
|
@ -164,6 +164,16 @@ class StaffActionLogger
|
||||||
}))
|
}))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def log_name_change(user_id, old_name, new_name, opts={})
|
||||||
|
raise Discourse::InvalidParameters.new(:user) unless user_id
|
||||||
|
UserHistory.create( params(opts).merge({
|
||||||
|
action: UserHistory.actions[:change_name],
|
||||||
|
target_user_id: user_id,
|
||||||
|
previous_value: old_name,
|
||||||
|
new_value: new_name
|
||||||
|
}))
|
||||||
|
end
|
||||||
|
|
||||||
def log_user_suspend(user, reason, opts={})
|
def log_user_suspend(user, reason, opts={})
|
||||||
raise Discourse::InvalidParameters.new(:user) unless user
|
raise Discourse::InvalidParameters.new(:user) unless user
|
||||||
UserHistory.create( params(opts).merge({
|
UserHistory.create( params(opts).merge({
|
||||||
|
|
|
@ -39,6 +39,7 @@ class UserUpdater
|
||||||
def initialize(actor, user)
|
def initialize(actor, user)
|
||||||
@user = user
|
@user = user
|
||||||
@guardian = Guardian.new(actor)
|
@guardian = Guardian.new(actor)
|
||||||
|
@actor = actor
|
||||||
end
|
end
|
||||||
|
|
||||||
def update(attributes = {})
|
def update(attributes = {})
|
||||||
|
@ -52,7 +53,6 @@ class UserUpdater
|
||||||
user_profile.profile_background = attributes.fetch(:profile_background) { user_profile.profile_background }
|
user_profile.profile_background = attributes.fetch(:profile_background) { user_profile.profile_background }
|
||||||
user_profile.card_background = attributes.fetch(:card_background) { user_profile.card_background }
|
user_profile.card_background = attributes.fetch(:card_background) { user_profile.card_background }
|
||||||
|
|
||||||
user.name = attributes.fetch(:name) { user.name }
|
|
||||||
user.locale = attributes.fetch(:locale) { user.locale }
|
user.locale = attributes.fetch(:locale) { user.locale }
|
||||||
user.date_of_birth = attributes.fetch(:date_of_birth) { user.date_of_birth }
|
user.date_of_birth = attributes.fetch(:date_of_birth) { user.date_of_birth }
|
||||||
|
|
||||||
|
@ -94,6 +94,14 @@ class UserUpdater
|
||||||
end
|
end
|
||||||
|
|
||||||
User.transaction do
|
User.transaction do
|
||||||
|
# log name changes
|
||||||
|
if attributes[:name].present? && user.name.downcase != attributes.fetch(:name).downcase
|
||||||
|
StaffActionLogger.new(@actor).log_name_change(user.id, user.name, attributes.fetch(:name))
|
||||||
|
elsif attributes[:name].blank? && user.name.present?
|
||||||
|
StaffActionLogger.new(@actor).log_name_change(user.id, user.name, "")
|
||||||
|
end
|
||||||
|
user.name = attributes.fetch(:name) { user.name }
|
||||||
|
|
||||||
if attributes.key?(:muted_usernames)
|
if attributes.key?(:muted_usernames)
|
||||||
update_muted_users(attributes[:muted_usernames])
|
update_muted_users(attributes[:muted_usernames])
|
||||||
end
|
end
|
||||||
|
|
|
@ -11,7 +11,7 @@ class UsernameChanger
|
||||||
end
|
end
|
||||||
|
|
||||||
def change
|
def change
|
||||||
if @actor && @actor != @user
|
if @actor
|
||||||
StaffActionLogger.new(@actor).log_username_change(@user, @user.username, @new_username)
|
StaffActionLogger.new(@actor).log_username_change(@user, @user.username, @new_username)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -190,5 +190,10 @@ describe UserUpdater do
|
||||||
expect(user.reload.custom_fields).to eq({'import_username' => 'my_old_username'})
|
expect(user.reload.custom_fields).to eq({'import_username' => 'my_old_username'})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "logs the action" do
|
||||||
|
user = Fabricate(:user, name: 'Billy Bob')
|
||||||
|
expect { described_class.new(acting_user, user).update(name: 'Jim Tom') }.to change { UserHistory.count }.by(1)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -62,6 +62,10 @@ describe UsernameChanger do
|
||||||
described_class.change(myself, "HanSolo")
|
described_class.change(myself, "HanSolo")
|
||||||
expect(myself.reload.username).to eq('HanSolo')
|
expect(myself.reload.username).to eq('HanSolo')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "logs the action" do
|
||||||
|
expect { described_class.change(myself, "HanSolo", myself) }.to change { UserHistory.count }.by(1)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'allow custom minimum username length from site settings' do
|
describe 'allow custom minimum username length from site settings' do
|
||||||
|
|
Loading…
Reference in New Issue