MM-63342:Bot accounts OAuth gating (#30466)

Этот коммит содержится в:
catalintomai
2025-04-14 11:51:46 +02:00
коммит произвёл GitHub
родитель f7976254bb
Коммит 04676582cd
2 изменённых файлов: 69 добавлений и 0 удалений

Просмотреть файл

@@ -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) {