Fixing websockets updates for promote/demote (#11799)

* Fixing websockets updates for promote/demote

* Adding extra test check

* Addressing PR comments
This commit is contained in:
Jesús Espino
2019-08-16 08:39:34 +02:00
committed by GitHub
parent 135acbb0b0
commit 83197ec5ff
3 changed files with 50 additions and 10 deletions

View File

@@ -2247,14 +2247,31 @@ func (a *App) PromoteGuestToUser(user *model.User, requestorId string) *model.Ap
promotedUser, err := a.GetUser(user.Id)
if err != nil {
return err
mlog.Error(err.Error())
} else {
a.sendUpdatedUserEvent(*promotedUser)
a.UpdateSessionsIsGuest(promotedUser.Id, promotedUser.IsGuest())
}
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_USER_UPDATED, "", "", "", nil)
message.Add("user", promotedUser)
a.Publish(message)
teamMembers, err := a.GetTeamMembersForUser(user.Id)
if err != nil {
mlog.Error(err.Error())
}
a.UpdateSessionsIsGuest(promotedUser.Id, promotedUser.IsGuest())
for _, member := range teamMembers {
a.sendUpdatedMemberRoleEvent(user.Id, member)
channelMembers, err := a.GetChannelMembersForUser(member.TeamId, user.Id)
if err != nil {
mlog.Error(err.Error())
}
for _, member := range *channelMembers {
evt := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_CHANNEL_MEMBER_UPDATED, "", "", user.Id, nil)
evt.Add("channelMember", member.ToJson())
a.Publish(evt)
}
}
return nil
}
@@ -2269,14 +2286,31 @@ func (a *App) DemoteUserToGuest(user *model.User) *model.AppError {
demotedUser, err := a.GetUser(user.Id)
if err != nil {
return err
mlog.Error(err.Error())
} else {
a.sendUpdatedUserEvent(*demotedUser)
a.UpdateSessionsIsGuest(demotedUser.Id, demotedUser.IsGuest())
}
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_USER_UPDATED, "", "", "", nil)
message.Add("user", demotedUser)
a.Publish(message)
teamMembers, err := a.GetTeamMembersForUser(user.Id)
if err != nil {
mlog.Error(err.Error())
}
a.UpdateSessionsIsGuest(demotedUser.Id, demotedUser.IsGuest())
for _, member := range teamMembers {
a.sendUpdatedMemberRoleEvent(user.Id, member)
channelMembers, err := a.GetChannelMembersForUser(member.TeamId, user.Id)
if err != nil {
mlog.Error(err.Error())
}
for _, member := range *channelMembers {
evt := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_CHANNEL_MEMBER_UPDATED, "", "", user.Id, nil)
evt.Add("channelMember", member.ToJson())
a.Publish(evt)
}
}
return nil
}

View File

@@ -1635,8 +1635,10 @@ func (us SqlUserStore) PromoteGuestToUser(userId string) *model.AppError {
}
}
curTime := model.GetMillis()
query := us.getQueryBuilder().Update("Users").
Set("Roles", strings.Join(roles, " ")).
Set("UpdateAt", curTime).
Where(sq.Eq{"Id": userId})
queryString, args, err := query.ToSql()
@@ -1705,8 +1707,10 @@ func (us SqlUserStore) DemoteUserToGuest(userId string) *model.AppError {
}
}
curTime := model.GetMillis()
query := us.getQueryBuilder().Update("Users").
Set("Roles", strings.Join(newRoles, " ")).
Set("UpdateAt", curTime).
Where(sq.Eq{"Id": userId})
queryString, args, err := query.ToSql()

View File

@@ -4280,6 +4280,7 @@ func testUserStorePromoteGuestToUser(t *testing.T, ss store.Store) {
updatedUser, err := ss.User().Get(user.Id)
assert.Nil(t, err)
require.Equal(t, "system_user", updatedUser.Roles)
require.True(t, user.UpdateAt < updatedUser.UpdateAt)
updatedTeamMember, err := ss.Team().GetMember(teamId, user.Id)
require.Nil(t, err)
@@ -4586,6 +4587,7 @@ func testUserStoreDemoteUserToGuest(t *testing.T, ss store.Store) {
updatedUser, err := ss.User().Get(user.Id)
assert.Nil(t, err)
require.Equal(t, "system_guest", updatedUser.Roles)
require.True(t, user.UpdateAt < updatedUser.UpdateAt)
updatedTeamMember, err := ss.Team().GetMember(teamId, user.Id)
require.Nil(t, err)