diff --git a/store/sqlstore/user_store.go b/store/sqlstore/user_store.go index 453c797193..b5cdb68f88 100644 --- a/store/sqlstore/user_store.go +++ b/store/sqlstore/user_store.go @@ -11,7 +11,6 @@ import ( "sort" "strings" - "github.com/Masterminds/squirrel" sq "github.com/Masterminds/squirrel" "github.com/mattermost/gorp" @@ -329,21 +328,44 @@ func (us SqlUserStore) UpdateMfaActive(userId string, active bool) *model.AppErr } func (us SqlUserStore) Get(id string) (*model.User, *model.AppError) { - query := us.usersQuery.Where("Id = ?", id) + failure := func(err error, id string, statusCode int) *model.AppError { + details := "user_id=" + id + ", " + err.Error() + return model.NewAppError("SqlUserStore.Get", id, nil, details, statusCode) + } + query := us.usersQuery.Where("Id = ?", id) queryString, args, err := query.ToSql() if err != nil { - return nil, model.NewAppError("SqlUserStore.Get", "store.sql_user.app_error", nil, err.Error(), http.StatusInternalServerError) + return nil, failure(err, "store.sql_user.get.app_error", http.StatusInternalServerError) + } + row := us.GetReplica().Db.QueryRow(queryString, args...) + + var user model.User + var props, notifyProps, timezone []byte + err = row.Scan(&user.Id, &user.CreateAt, &user.UpdateAt, &user.DeleteAt, &user.Username, + &user.Password, &user.AuthData, &user.AuthService, &user.Email, &user.EmailVerified, + &user.Nickname, &user.FirstName, &user.LastName, &user.Position, &user.Roles, + &user.AllowMarketing, &props, ¬ifyProps, &user.LastPasswordUpdate, &user.LastPictureUpdate, + &user.FailedAttempts, &user.Locale, &timezone, &user.MfaActive, &user.MfaSecret, + &user.IsBot, &user.BotDescription, &user.BotLastIconUpdate) + if err != nil { + if err == sql.ErrNoRows { + return nil, failure(err, store.MISSING_ACCOUNT_ERROR, http.StatusNotFound) + } + return nil, failure(err, "store.sql_user.get.app_error", http.StatusInternalServerError) + + } + if err = json.Unmarshal(props, &user.Props); err != nil { + return nil, failure(err, "store.sql_user.get.app_error", http.StatusInternalServerError) + } + if err = json.Unmarshal(notifyProps, &user.NotifyProps); err != nil { + return nil, failure(err, "store.sql_user.get.app_error", http.StatusInternalServerError) + } + if err = json.Unmarshal(timezone, &user.Timezone); err != nil { + return nil, failure(err, "store.sql_user.get.app_error", http.StatusInternalServerError) } - user := &model.User{} - if err := us.GetReplica().SelectOne(user, queryString, args...); err == sql.ErrNoRows { - return nil, model.NewAppError("SqlUserStore.Get", store.MISSING_ACCOUNT_ERROR, nil, "user_id="+id, http.StatusNotFound) - } else if err != nil { - return nil, model.NewAppError("SqlUserStore.Get", "store.sql_user.get.app_error", nil, "user_id="+id+", "+err.Error(), http.StatusInternalServerError) - } - - return user, nil + return &user, nil } func (us SqlUserStore) GetAll() ([]*model.User, *model.AppError) { @@ -809,7 +831,7 @@ func (us SqlUserStore) GetProfileByIds(userIds []string, options *store.UserGetB OrderBy("u.Username ASC") if options.Since > 0 { - query = query.Where(squirrel.Gt(map[string]interface{}{ + query = query.Where(sq.Gt(map[string]interface{}{ "u.UpdateAt": options.Since, })) } diff --git a/store/storetest/user_store.go b/store/storetest/user_store.go index 6756f7583a..4844123139 100644 --- a/store/storetest/user_store.go +++ b/store/storetest/user_store.go @@ -3607,7 +3607,7 @@ func testUserStoreGetUsersBatchForIndexing(t *testing.T, ss store.Store) { // First and last user should be outside the range res1List, err := ss.User().GetUsersBatchForIndexing(startTime, endTime, 100) - assert.Nil(t, err) + require.Nil(t, err) assert.Len(t, res1List, 1) assert.Equal(t, res1List[0].Username, u2.Username) @@ -3617,7 +3617,7 @@ func testUserStoreGetUsersBatchForIndexing(t *testing.T, ss store.Store) { // Update startTime to include first user startTime = u1.CreateAt res2List, err := ss.User().GetUsersBatchForIndexing(startTime, endTime, 100) - assert.Nil(t, err) + require.Nil(t, err) assert.Len(t, res2List, 2) assert.Equal(t, res2List[0].Username, u1.Username) @@ -3628,7 +3628,7 @@ func testUserStoreGetUsersBatchForIndexing(t *testing.T, ss store.Store) { // Update endTime to include last user endTime = model.GetMillis() res3List, err := ss.User().GetUsersBatchForIndexing(startTime, endTime, 100) - assert.Nil(t, err) + require.Nil(t, err) assert.Len(t, res3List, 3) assert.Equal(t, res3List[0].Username, u1.Username) @@ -3639,7 +3639,7 @@ func testUserStoreGetUsersBatchForIndexing(t *testing.T, ss store.Store) { // Testing the limit res4List, err := ss.User().GetUsersBatchForIndexing(startTime, endTime, 2) - assert.Nil(t, err) + require.Nil(t, err) assert.Len(t, res4List, 2) assert.Equal(t, res4List[0].Username, u1.Username) @@ -3919,9 +3919,9 @@ func testUserStorePromoteGuestToUser(t *testing.T, ss store.Store) { require.Nil(t, err) err = ss.User().PromoteGuestToUser(user.Id) - assert.Nil(t, err) + require.Nil(t, err) updatedUser, err := ss.User().Get(user.Id) - assert.Nil(t, err) + require.Nil(t, err) require.Equal(t, "system_user", updatedUser.Roles) require.True(t, user.UpdateAt < updatedUser.UpdateAt) @@ -3965,9 +3965,9 @@ func testUserStorePromoteGuestToUser(t *testing.T, ss store.Store) { require.Nil(t, err) err = ss.User().PromoteGuestToUser(user.Id) - assert.Nil(t, err) + require.Nil(t, err) updatedUser, err := ss.User().Get(user.Id) - assert.Nil(t, err) + require.Nil(t, err) require.Equal(t, "system_user system_admin", updatedUser.Roles) updatedTeamMember, err := ss.Team().GetMember(teamId, user.Id) @@ -3996,9 +3996,9 @@ func testUserStorePromoteGuestToUser(t *testing.T, ss store.Store) { defer func() { require.Nil(t, ss.User().PermanentDelete(user.Id)) }() err = ss.User().PromoteGuestToUser(user.Id) - assert.Nil(t, err) + require.Nil(t, err) updatedUser, err := ss.User().Get(user.Id) - assert.Nil(t, err) + require.Nil(t, err) require.Equal(t, "system_user", updatedUser.Roles) }) @@ -4021,9 +4021,9 @@ func testUserStorePromoteGuestToUser(t *testing.T, ss store.Store) { require.Nil(t, err) err = ss.User().PromoteGuestToUser(user.Id) - assert.Nil(t, err) + require.Nil(t, err) updatedUser, err := ss.User().Get(user.Id) - assert.Nil(t, err) + require.Nil(t, err) require.Equal(t, "system_user", updatedUser.Roles) updatedTeamMember, err := ss.Team().GetMember(teamId, user.Id) @@ -4061,9 +4061,9 @@ func testUserStorePromoteGuestToUser(t *testing.T, ss store.Store) { require.Nil(t, err) err = ss.User().PromoteGuestToUser(user.Id) - assert.Nil(t, err) + require.Nil(t, err) updatedUser, err := ss.User().Get(user.Id) - assert.Nil(t, err) + require.Nil(t, err) require.Equal(t, "system_user", updatedUser.Roles) updatedTeamMember, err := ss.Team().GetMember(teamId, user.Id) @@ -4106,9 +4106,9 @@ func testUserStorePromoteGuestToUser(t *testing.T, ss store.Store) { require.Nil(t, err) err = ss.User().PromoteGuestToUser(user.Id) - assert.Nil(t, err) + require.Nil(t, err) updatedUser, err := ss.User().Get(user.Id) - assert.Nil(t, err) + require.Nil(t, err) require.Equal(t, "system_user custom_role", updatedUser.Roles) updatedTeamMember, err := ss.Team().GetMember(teamId, user.Id) @@ -4172,9 +4172,9 @@ func testUserStorePromoteGuestToUser(t *testing.T, ss store.Store) { require.Nil(t, err) err = ss.User().PromoteGuestToUser(user1.Id) - assert.Nil(t, err) + require.Nil(t, err) updatedUser, err := ss.User().Get(user1.Id) - assert.Nil(t, err) + require.Nil(t, err) require.Equal(t, "system_user", updatedUser.Roles) updatedTeamMember, err := ss.Team().GetMember(teamId1, user1.Id) @@ -4188,7 +4188,7 @@ func testUserStorePromoteGuestToUser(t *testing.T, ss store.Store) { require.True(t, updatedChannelMember.SchemeUser) notUpdatedUser, err := ss.User().Get(user2.Id) - assert.Nil(t, err) + require.Nil(t, err) require.Equal(t, "system_guest", notUpdatedUser.Roles) notUpdatedTeamMember, err := ss.Team().GetMember(teamId2, user2.Id) @@ -4234,9 +4234,9 @@ func testUserStoreDemoteUserToGuest(t *testing.T, ss store.Store) { require.Nil(t, err) err = ss.User().DemoteUserToGuest(user.Id) - assert.Nil(t, err) + require.Nil(t, err) updatedUser, err := ss.User().Get(user.Id) - assert.Nil(t, err) + require.Nil(t, err) require.Equal(t, "system_guest", updatedUser.Roles) require.True(t, user.UpdateAt < updatedUser.UpdateAt) @@ -4280,9 +4280,9 @@ func testUserStoreDemoteUserToGuest(t *testing.T, ss store.Store) { require.Nil(t, err) err = ss.User().DemoteUserToGuest(user.Id) - assert.Nil(t, err) + require.Nil(t, err) updatedUser, err := ss.User().Get(user.Id) - assert.Nil(t, err) + require.Nil(t, err) require.Equal(t, "system_guest", updatedUser.Roles) updatedTeamMember, err := ss.Team().GetMember(teamId, user.Id) @@ -4311,9 +4311,9 @@ func testUserStoreDemoteUserToGuest(t *testing.T, ss store.Store) { defer func() { require.Nil(t, ss.User().PermanentDelete(user.Id)) }() err = ss.User().DemoteUserToGuest(user.Id) - assert.Nil(t, err) + require.Nil(t, err) updatedUser, err := ss.User().Get(user.Id) - assert.Nil(t, err) + require.Nil(t, err) require.Equal(t, "system_guest", updatedUser.Roles) }) @@ -4336,9 +4336,9 @@ func testUserStoreDemoteUserToGuest(t *testing.T, ss store.Store) { require.Nil(t, err) err = ss.User().DemoteUserToGuest(user.Id) - assert.Nil(t, err) + require.Nil(t, err) updatedUser, err := ss.User().Get(user.Id) - assert.Nil(t, err) + require.Nil(t, err) require.Equal(t, "system_guest", updatedUser.Roles) updatedTeamMember, err := ss.Team().GetMember(teamId, user.Id) @@ -4376,9 +4376,9 @@ func testUserStoreDemoteUserToGuest(t *testing.T, ss store.Store) { require.Nil(t, err) err = ss.User().DemoteUserToGuest(user.Id) - assert.Nil(t, err) + require.Nil(t, err) updatedUser, err := ss.User().Get(user.Id) - assert.Nil(t, err) + require.Nil(t, err) require.Equal(t, "system_guest", updatedUser.Roles) updatedTeamMember, err := ss.Team().GetMember(teamId, user.Id) @@ -4387,7 +4387,7 @@ func testUserStoreDemoteUserToGuest(t *testing.T, ss store.Store) { require.False(t, updatedTeamMember.SchemeUser) updatedChannelMember, err := ss.Channel().GetMember(channel.Id, user.Id) - assert.Nil(t, err) + require.Nil(t, err) require.True(t, updatedChannelMember.SchemeGuest) require.False(t, updatedChannelMember.SchemeUser) }) @@ -4421,9 +4421,9 @@ func testUserStoreDemoteUserToGuest(t *testing.T, ss store.Store) { require.Nil(t, err) err = ss.User().DemoteUserToGuest(user.Id) - assert.Nil(t, err) + require.Nil(t, err) updatedUser, err := ss.User().Get(user.Id) - assert.Nil(t, err) + require.Nil(t, err) require.Equal(t, "system_guest custom_role", updatedUser.Roles) updatedTeamMember, err := ss.Team().GetMember(teamId, user.Id) @@ -4432,7 +4432,7 @@ func testUserStoreDemoteUserToGuest(t *testing.T, ss store.Store) { require.False(t, updatedTeamMember.SchemeUser) updatedChannelMember, err := ss.Channel().GetMember(channel.Id, user.Id) - assert.Nil(t, err) + require.Nil(t, err) require.True(t, updatedChannelMember.SchemeGuest) require.False(t, updatedChannelMember.SchemeUser) }) @@ -4487,9 +4487,9 @@ func testUserStoreDemoteUserToGuest(t *testing.T, ss store.Store) { require.Nil(t, err) err = ss.User().DemoteUserToGuest(user1.Id) - assert.Nil(t, err) + require.Nil(t, err) updatedUser, err := ss.User().Get(user1.Id) - assert.Nil(t, err) + require.Nil(t, err) require.Equal(t, "system_guest", updatedUser.Roles) updatedTeamMember, err := ss.Team().GetMember(teamId1, user1.Id) @@ -4498,12 +4498,12 @@ func testUserStoreDemoteUserToGuest(t *testing.T, ss store.Store) { require.False(t, updatedTeamMember.SchemeUser) updatedChannelMember, err := ss.Channel().GetMember(channel.Id, user1.Id) - assert.Nil(t, err) + require.Nil(t, err) require.True(t, updatedChannelMember.SchemeGuest) require.False(t, updatedChannelMember.SchemeUser) notUpdatedUser, err := ss.User().Get(user2.Id) - assert.Nil(t, err) + require.Nil(t, err) require.Equal(t, "system_user", notUpdatedUser.Roles) notUpdatedTeamMember, err := ss.Team().GetMember(teamId2, user2.Id) @@ -4512,7 +4512,7 @@ func testUserStoreDemoteUserToGuest(t *testing.T, ss store.Store) { require.True(t, notUpdatedTeamMember.SchemeUser) notUpdatedChannelMember, err := ss.Channel().GetMember(channel.Id, user2.Id) - assert.Nil(t, err) + require.Nil(t, err) require.False(t, notUpdatedChannelMember.SchemeGuest) require.True(t, notUpdatedChannelMember.SchemeUser) })