MM-63342:Bot accounts OAuth gating (#30466)
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
f7976254bb
Коммит
04676582cd
@@ -604,6 +604,27 @@ func (a *App) getDisableBotSysadminMessage(user *model.User, userBots model.BotL
|
||||
|
||||
// ConvertUserToBot converts a user to bot.
|
||||
func (a *App) ConvertUserToBot(rctx request.CTX, user *model.User) (*model.Bot, *model.AppError) {
|
||||
// Clear OAuth credentials before converting to bot
|
||||
if user.AuthService != "" {
|
||||
emptyString := ""
|
||||
userAuth := &model.UserAuth{
|
||||
AuthService: "",
|
||||
AuthData: &emptyString,
|
||||
}
|
||||
|
||||
_, err := a.UpdateUserAuth(rctx, user.Id, userAuth)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Refresh user data
|
||||
updatedUser, err := a.GetUser(user.Id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
user = updatedUser
|
||||
}
|
||||
|
||||
bot, err := a.Srv().Store().Bot().Save(model.BotFromUser(user))
|
||||
if err != nil {
|
||||
var appErr *model.AppError
|
||||
|
||||
@@ -901,6 +901,54 @@ func TestConvertUserToBot(t *testing.T) {
|
||||
require.NotNil(t, err)
|
||||
require.Equal(t, "api.context.invalid_token.error", err.Id)
|
||||
})
|
||||
|
||||
t.Run("user with oauth credentials", func(t *testing.T) {
|
||||
th := Setup(t).InitBasic()
|
||||
defer th.TearDown()
|
||||
|
||||
// Create a user first
|
||||
oauthUser := &model.User{
|
||||
Email: "oauth_user@example.com",
|
||||
Username: "oauth_user",
|
||||
Password: "password",
|
||||
EmailVerified: true,
|
||||
}
|
||||
|
||||
oauthUser, err := th.App.CreateUser(th.Context, oauthUser)
|
||||
require.Nil(t, err)
|
||||
|
||||
// Set OAuth credentials
|
||||
authData := "google_auth_data"
|
||||
userAuth := &model.UserAuth{
|
||||
AuthData: &authData,
|
||||
AuthService: "google",
|
||||
}
|
||||
_, err = th.App.UpdateUserAuth(th.Context, oauthUser.Id, userAuth)
|
||||
require.Nil(t, err)
|
||||
|
||||
// Verify OAuth credentials are set
|
||||
oauthUser, appErr := th.App.GetUser(oauthUser.Id)
|
||||
require.Nil(t, appErr)
|
||||
require.Equal(t, "google", oauthUser.AuthService)
|
||||
require.NotNil(t, oauthUser.AuthData)
|
||||
|
||||
// Convert user to bot
|
||||
bot, err := th.App.ConvertUserToBot(th.Context, oauthUser)
|
||||
require.Nil(t, err)
|
||||
defer func() {
|
||||
err = th.App.PermanentDeleteBot(th.Context, bot.UserId)
|
||||
require.Nil(t, err)
|
||||
}()
|
||||
|
||||
// Get updated user and verify OAuth credentials are cleared
|
||||
updatedUser, err := th.App.GetUser(oauthUser.Id)
|
||||
require.Nil(t, err)
|
||||
assert.Empty(t, updatedUser.AuthService)
|
||||
// AuthData may be empty string instead of nil in the database
|
||||
if updatedUser.AuthData != nil {
|
||||
assert.Empty(t, *updatedUser.AuthData)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestGetSystemBot(t *testing.T) {
|
||||
|
||||
Ссылка в новой задаче
Block a user