diff --git a/server/channels/app/bot.go b/server/channels/app/bot.go index 677efdd325..abecb70f09 100644 --- a/server/channels/app/bot.go +++ b/server/channels/app/bot.go @@ -614,5 +614,9 @@ func (a *App) ConvertUserToBot(rctx request.CTX, user *model.User) (*model.Bot, return nil, model.NewAppError("CreateBot", "app.bot.createbot.internal_error", nil, "", http.StatusInternalServerError).Wrap(err) } } + if err := a.RevokeAllSessions(rctx, user.Id); err != nil { + return nil, err + } + return bot, nil } diff --git a/server/channels/app/bot_test.go b/server/channels/app/bot_test.go index 7c3fdfe694..7599898946 100644 --- a/server/channels/app/bot_test.go +++ b/server/channels/app/bot_test.go @@ -872,21 +872,34 @@ func TestConvertUserToBot(t *testing.T) { }) }) - t.Run("valid user", func(t *testing.T) { + t.Run("valid user and session revoked", func(t *testing.T) { th := Setup(t).InitBasic() defer th.TearDown() + session, err := th.App.CreateSession(th.Context, &model.Session{UserId: th.BasicUser.Id, Props: model.StringMap{}}) + require.Nil(t, err) + + // make sure session is valid + testSession, err := th.App.GetSession(session.Token) + require.Nil(t, err) + require.False(t, testSession.IsExpired()) + bot, err := th.App.ConvertUserToBot(th.Context, &model.User{ Username: "username", Id: th.BasicUser.Id, }) require.Nil(t, err) defer func() { - err := th.App.PermanentDeleteBot(th.Context, bot.UserId) + err = th.App.PermanentDeleteBot(th.Context, bot.UserId) require.Nil(t, err) }() assert.Equal(t, "username", bot.Username) assert.Equal(t, th.BasicUser.Id, bot.OwnerId) + + // make sure session is no longer valid + _, err = th.App.GetSession(session.Token) + require.NotNil(t, err) + require.Equal(t, "api.context.invalid_token.error", err.Id) }) }