summaryrefslogtreecommitdiffstats
path: root/app/import.go
diff options
context:
space:
mode:
authorGeorge Goldberg <george@gberg.me>2017-10-12 18:00:05 +0100
committerChristopher Speller <crspeller@gmail.com>2017-10-12 10:00:05 -0700
commitfe410223536cd561c2e679ac635592a5af091602 (patch)
treec8c06d1e30d3852b774955c095ec5ff25a811dc3 /app/import.go
parent785cc06f6ecfd9d10de58eaad8ed24ac3d24b828 (diff)
downloadchat-fe410223536cd561c2e679ac635592a5af091602.tar.gz
chat-fe410223536cd561c2e679ac635592a5af091602.tar.bz2
chat-fe410223536cd561c2e679ac635592a5af091602.zip
PLT-7883: Fix database race in bulk importer in GetByUsername. (#7611)
Diffstat (limited to 'app/import.go')
-rw-r--r--app/import.go39
1 files changed, 20 insertions, 19 deletions
diff --git a/app/import.go b/app/import.go
index 6a309ad3e..f7f9cf144 100644
--- a/app/import.go
+++ b/app/import.go
@@ -644,28 +644,30 @@ func (a *App) ImportUser(data *UserImportData, dryRun bool) *model.AppError {
}
}
+ var err *model.AppError
+ var savedUser *model.User
if user.Id == "" {
- if _, err := a.createUser(user); err != nil {
+ if savedUser, err = a.createUser(user); err != nil {
return err
}
} else {
if hasUserChanged {
- if _, err := a.UpdateUser(user, false); err != nil {
+ if savedUser, err = a.UpdateUser(user, false); err != nil {
return err
}
}
if hasUserRolesChanged {
- if _, err := a.UpdateUserRoles(user.Id, roles); err != nil {
+ if savedUser, err = a.UpdateUserRoles(user.Id, roles); err != nil {
return err
}
}
if hasNotifyPropsChanged {
- if _, err := a.UpdateUserNotifyProps(user.Id, user.NotifyProps); err != nil {
+ if savedUser, err = a.UpdateUserNotifyProps(user.Id, user.NotifyProps); err != nil {
return err
}
}
if len(password) > 0 {
- if err := a.UpdatePassword(user, password); err != nil {
+ if err = a.UpdatePassword(user, password); err != nil {
return err
}
} else {
@@ -684,12 +686,16 @@ func (a *App) ImportUser(data *UserImportData, dryRun bool) *model.AppError {
}
}
+ if savedUser == nil {
+ savedUser = user
+ }
+
// Preferences.
var preferences model.Preferences
if data.Theme != nil {
preferences = append(preferences, model.Preference{
- UserId: user.Id,
+ UserId: savedUser.Id,
Category: model.PREFERENCE_CATEGORY_THEME,
Name: "",
Value: *data.Theme,
@@ -698,7 +704,7 @@ func (a *App) ImportUser(data *UserImportData, dryRun bool) *model.AppError {
if data.UseMilitaryTime != nil {
preferences = append(preferences, model.Preference{
- UserId: user.Id,
+ UserId: savedUser.Id,
Category: model.PREFERENCE_CATEGORY_DISPLAY_SETTINGS,
Name: "use_military_time",
Value: *data.UseMilitaryTime,
@@ -707,7 +713,7 @@ func (a *App) ImportUser(data *UserImportData, dryRun bool) *model.AppError {
if data.CollapsePreviews != nil {
preferences = append(preferences, model.Preference{
- UserId: user.Id,
+ UserId: savedUser.Id,
Category: model.PREFERENCE_CATEGORY_DISPLAY_SETTINGS,
Name: "collapse_previews",
Value: *data.CollapsePreviews,
@@ -716,7 +722,7 @@ func (a *App) ImportUser(data *UserImportData, dryRun bool) *model.AppError {
if data.MessageDisplay != nil {
preferences = append(preferences, model.Preference{
- UserId: user.Id,
+ UserId: savedUser.Id,
Category: model.PREFERENCE_CATEGORY_DISPLAY_SETTINGS,
Name: "message_display",
Value: *data.MessageDisplay,
@@ -725,7 +731,7 @@ func (a *App) ImportUser(data *UserImportData, dryRun bool) *model.AppError {
if data.ChannelDisplayMode != nil {
preferences = append(preferences, model.Preference{
- UserId: user.Id,
+ UserId: savedUser.Id,
Category: model.PREFERENCE_CATEGORY_DISPLAY_SETTINGS,
Name: "channel_display_mode",
Value: *data.ChannelDisplayMode,
@@ -734,9 +740,9 @@ func (a *App) ImportUser(data *UserImportData, dryRun bool) *model.AppError {
if data.TutorialStep != nil {
preferences = append(preferences, model.Preference{
- UserId: user.Id,
+ UserId: savedUser.Id,
Category: model.PREFERENCE_CATEGORY_TUTORIAL_STEPS,
- Name: user.Id,
+ Name: savedUser.Id,
Value: *data.TutorialStep,
})
}
@@ -747,19 +753,14 @@ func (a *App) ImportUser(data *UserImportData, dryRun bool) *model.AppError {
}
}
- return a.ImportUserTeams(*data.Username, data.Teams)
+ return a.ImportUserTeams(savedUser, data.Teams)
}
-func (a *App) ImportUserTeams(username string, data *[]UserTeamImportData) *model.AppError {
+func (a *App) ImportUserTeams(user *model.User, data *[]UserTeamImportData) *model.AppError {
if data == nil {
return nil
}
- user, err := a.GetUserByUsername(username)
- if err != nil {
- return err
- }
-
for _, tdata := range *data {
team, err := a.GetTeamByName(*tdata.Name)
if err != nil {