[GH-21566] Add request context and logger to all public methods in server/channels/app/authentication.go (#25270)

This commit is contained in:
KIMBOH LOVETTE 2023-11-08 14:39:09 +01:00 committed by GitHub
parent dd46afacd6
commit a6ba7163c8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 61 additions and 61 deletions

View File

@ -1297,7 +1297,7 @@ func updateUser(c *Context, w http.ResponseWriter, r *http.Request) {
// If eMail update is attempted by the currently logged in user, check if correct password was provided
if user.Email != "" && ouser.Email != user.Email && c.AppContext.Session().UserId == c.Params.UserId {
err = c.App.DoubleCheckPassword(ouser, user.Password)
err = c.App.DoubleCheckPassword(c.AppContext, ouser, user.Password)
if err != nil {
c.SetInvalidParam("password")
return
@ -1378,7 +1378,7 @@ func patchUser(c *Context, w http.ResponseWriter, r *http.Request) {
return
}
if err = c.App.DoubleCheckPassword(ouser, *patch.Password); err != nil {
if err = c.App.DoubleCheckPassword(c.AppContext, ouser, *patch.Password); err != nil {
c.Err = err
return
}

View File

@ -2002,14 +2002,14 @@ func TestPatchUser(t *testing.T) {
require.Equal(t, "America/New_York", ruser.Timezone["automaticTimezone"], "automaticTimezone should update properly")
require.Empty(t, ruser.Timezone["manualTimezone"], "manualTimezone should update properly")
appErr := th.App.CheckPasswordAndAllCriteria(ruser, *patch.Password, "")
appErr := th.App.CheckPasswordAndAllCriteria(th.Context, user, *patch.Password, "")
require.NotNil(t, appErr, "Password should not match")
currentPassword := user.Password
user, appErr = th.App.GetUser(ruser.Id)
require.Nil(t, appErr)
appErr = th.App.CheckPasswordAndAllCriteria(user, currentPassword, "")
appErr = th.App.CheckPasswordAndAllCriteria(th.Context, user, currentPassword, "")
require.Nil(t, appErr, "Password should still match")
patch = &model.UserPatch{}

View File

@ -362,7 +362,7 @@ type AppIface interface {
// Ensure the zip file name ends with a .zip
CreateZipFileAndAddFiles(fileBackend filestore.FileBackend, fileDatas []model.FileData, zipFileName, directory string) error
// This to be used for places we check the users password when they are already logged in
DoubleCheckPassword(user *model.User, password string) *model.AppError
DoubleCheckPassword(rctx request.CTX, user *model.User, password string) *model.AppError
// UpdateBotActive marks a bot as active or inactive, along with its corresponding user.
UpdateBotActive(c request.CTX, botUserId string, active bool) (*model.Bot, *model.AppError)
// UpdateBotOwner changes a bot's owner to the given value.
@ -450,13 +450,13 @@ type AppIface interface {
CheckForClientSideCert(r *http.Request) (string, string, string)
CheckIntegrity() <-chan model.IntegrityCheckResult
CheckMandatoryS3Fields(settings *model.FileSettings) *model.AppError
CheckPasswordAndAllCriteria(user *model.User, password string, mfaToken string) *model.AppError
CheckPasswordAndAllCriteria(rctx request.CTX, user *model.User, password string, mfaToken string) *model.AppError
CheckPostReminders()
CheckRolesExist(roleNames []string) *model.AppError
CheckUserAllAuthenticationCriteria(user *model.User, mfaToken string) *model.AppError
CheckUserMfa(user *model.User, token string) *model.AppError
CheckUserPostflightAuthenticationCriteria(user *model.User) *model.AppError
CheckUserPreflightAuthenticationCriteria(user *model.User, mfaToken string) *model.AppError
CheckUserAllAuthenticationCriteria(rctx request.CTX, user *model.User, mfaToken string) *model.AppError
CheckUserMfa(rctx request.CTX, user *model.User, token string) *model.AppError
CheckUserPostflightAuthenticationCriteria(rctx request.CTX, user *model.User) *model.AppError
CheckUserPreflightAuthenticationCriteria(rctx request.CTX, user *model.User, mfaToken string) *model.AppError
CheckWebConn(userID, connectionID string) *platform.CheckConnResult
ClearChannelMembersCache(c request.CTX, channelID string) error
ClearLatestVersionCache()
@ -885,7 +885,7 @@ type AppIface interface {
IsConfigReadOnly() bool
IsFirstUserAccount() bool
IsLeader() bool
IsPasswordValid(password string) *model.AppError
IsPasswordValid(rctx request.CTX, password string) *model.AppError
IsPersistentNotificationsEnabled() bool
IsPhase2MigrationCompleted() *model.AppError
IsPluginActive(pluginName string) (bool, error)
@ -1126,7 +1126,7 @@ type AppIface interface {
UpdateOAuthApp(oldApp, updatedApp *model.OAuthApp) (*model.OAuthApp, *model.AppError)
UpdateOAuthUserAttrs(c request.CTX, userData io.Reader, user *model.User, provider einterfaces.OAuthProvider, service string, tokenUser *model.User) *model.AppError
UpdateOutgoingWebhook(c request.CTX, oldHook, updatedHook *model.OutgoingWebhook) (*model.OutgoingWebhook, *model.AppError)
UpdatePassword(user *model.User, newPassword string) *model.AppError
UpdatePassword(rctx request.CTX, user *model.User, newPassword string) *model.AppError
UpdatePasswordAsUser(c request.CTX, userID, currentPassword, newPassword string) *model.AppError
UpdatePasswordByUserIdSendEmail(c request.CTX, userID, newPassword, method string) *model.AppError
UpdatePasswordSendEmail(c request.CTX, user *model.User, newPassword, method string) *model.AppError

View File

@ -44,7 +44,7 @@ func (tl TokenLocation) String() string {
}
}
func (a *App) IsPasswordValid(password string) *model.AppError {
func (a *App) IsPasswordValid(rctx request.CTX, password string) *model.AppError {
if err := users.IsPasswordValidWithSettings(password, &a.Config().PasswordSettings); err != nil {
var invErr *users.ErrInvalidPassword
switch {
@ -58,8 +58,8 @@ func (a *App) IsPasswordValid(password string) *model.AppError {
return nil
}
func (a *App) CheckPasswordAndAllCriteria(user *model.User, password string, mfaToken string) *model.AppError {
if err := a.CheckUserPreflightAuthenticationCriteria(user, mfaToken); err != nil {
func (a *App) CheckPasswordAndAllCriteria(rctx request.CTX, user *model.User, password string, mfaToken string) *model.AppError {
if err := a.CheckUserPreflightAuthenticationCriteria(rctx, user, mfaToken); err != nil {
return err
}
@ -79,7 +79,7 @@ func (a *App) CheckPasswordAndAllCriteria(user *model.User, password string, mfa
}
}
if err := a.CheckUserMfa(user, mfaToken); err != nil {
if err := a.CheckUserMfa(rctx, user, mfaToken); err != nil {
// If the mfaToken is not set, we assume the client used this as a pre-flight request to query the server
// about the MFA state of the user in question
if mfaToken != "" {
@ -99,7 +99,7 @@ func (a *App) CheckPasswordAndAllCriteria(user *model.User, password string, mfa
a.InvalidateCacheForUser(user.Id)
if err := a.CheckUserPostflightAuthenticationCriteria(user); err != nil {
if err := a.CheckUserPostflightAuthenticationCriteria(rctx, user); err != nil {
return err
}
@ -107,7 +107,7 @@ func (a *App) CheckPasswordAndAllCriteria(user *model.User, password string, mfa
}
// This to be used for places we check the users password when they are already logged in
func (a *App) DoubleCheckPassword(user *model.User, password string) *model.AppError {
func (a *App) DoubleCheckPassword(rctx request.CTX, user *model.User, password string) *model.AppError {
if err := checkUserLoginAttempts(user, *a.Config().ServiceSettings.MaximumLoginAttempts); err != nil {
return err
}
@ -137,19 +137,19 @@ func (a *App) DoubleCheckPassword(user *model.User, password string) *model.AppE
return nil
}
func (a *App) checkLdapUserPasswordAndAllCriteria(c request.CTX, ldapId *string, password string, mfaToken string) (*model.User, *model.AppError) {
func (a *App) checkLdapUserPasswordAndAllCriteria(rctx request.CTX, ldapId *string, password string, mfaToken string) (*model.User, *model.AppError) {
if a.Ldap() == nil || ldapId == nil {
err := model.NewAppError("doLdapAuthentication", "api.user.login_ldap.not_available.app_error", nil, "", http.StatusNotImplemented)
return nil, err
}
ldapUser, err := a.Ldap().DoLogin(c, *ldapId, password)
ldapUser, err := a.Ldap().DoLogin(rctx, *ldapId, password)
if err != nil {
err.StatusCode = http.StatusUnauthorized
return nil, err
}
if err := a.CheckUserMfa(ldapUser, mfaToken); err != nil {
if err := a.CheckUserMfa(rctx, ldapUser, mfaToken); err != nil {
return nil, err
}
@ -161,19 +161,19 @@ func (a *App) checkLdapUserPasswordAndAllCriteria(c request.CTX, ldapId *string,
return ldapUser, nil
}
func (a *App) CheckUserAllAuthenticationCriteria(user *model.User, mfaToken string) *model.AppError {
if err := a.CheckUserPreflightAuthenticationCriteria(user, mfaToken); err != nil {
func (a *App) CheckUserAllAuthenticationCriteria(rctx request.CTX, user *model.User, mfaToken string) *model.AppError {
if err := a.CheckUserPreflightAuthenticationCriteria(rctx, user, mfaToken); err != nil {
return err
}
if err := a.CheckUserPostflightAuthenticationCriteria(user); err != nil {
if err := a.CheckUserPostflightAuthenticationCriteria(rctx, user); err != nil {
return err
}
return nil
}
func (a *App) CheckUserPreflightAuthenticationCriteria(user *model.User, mfaToken string) *model.AppError {
func (a *App) CheckUserPreflightAuthenticationCriteria(rctx request.CTX, user *model.User, mfaToken string) *model.AppError {
if err := checkUserNotDisabled(user); err != nil {
return err
}
@ -189,7 +189,7 @@ func (a *App) CheckUserPreflightAuthenticationCriteria(user *model.User, mfaToke
return nil
}
func (a *App) CheckUserPostflightAuthenticationCriteria(user *model.User) *model.AppError {
func (a *App) CheckUserPostflightAuthenticationCriteria(rctx request.CTX, user *model.User) *model.AppError {
if !user.EmailVerified && *a.Config().EmailSettings.RequireEmailVerification {
return model.NewAppError("Login", "api.user.login.not_verified.app_error", nil, "user_id="+user.Id, http.StatusUnauthorized)
}
@ -197,7 +197,7 @@ func (a *App) CheckUserPostflightAuthenticationCriteria(user *model.User) *model
return nil
}
func (a *App) CheckUserMfa(user *model.User, token string) *model.AppError {
func (a *App) CheckUserMfa(rctx request.CTX, user *model.User, token string) *model.AppError {
if !user.MfaActive || !*a.Config().ServiceSettings.EnableMultifactorAuthentication {
return nil
}
@ -240,7 +240,7 @@ func checkUserNotBot(user *model.User) *model.AppError {
return nil
}
func (a *App) authenticateUser(c request.CTX, user *model.User, password, mfaToken string) (*model.User, *model.AppError) {
func (a *App) authenticateUser(rctx request.CTX, user *model.User, password, mfaToken string) (*model.User, *model.AppError) {
license := a.Srv().License()
ldapAvailable := *a.Config().LdapSettings.Enable && a.Ldap() != nil && license != nil && *license.Features.LDAP
@ -250,7 +250,7 @@ func (a *App) authenticateUser(c request.CTX, user *model.User, password, mfaTok
return user, err
}
ldapUser, err := a.checkLdapUserPasswordAndAllCriteria(c, user.AuthData, password, mfaToken)
ldapUser, err := a.checkLdapUserPasswordAndAllCriteria(rctx, user.AuthData, password, mfaToken)
if err != nil {
err.StatusCode = http.StatusUnauthorized
return user, err
@ -269,7 +269,7 @@ func (a *App) authenticateUser(c request.CTX, user *model.User, password, mfaTok
return user, err
}
if err := a.CheckPasswordAndAllCriteria(user, password, mfaToken); err != nil {
if err := a.CheckPasswordAndAllCriteria(rctx, user, password, mfaToken); err != nil {
err.StatusCode = http.StatusUnauthorized
return user, err
}

View File

@ -591,7 +591,7 @@ func (a *App) importUser(rctx request.CTX, data *imports.UserImportData, dryRun
}
}
if password != "" {
if appErr = a.UpdatePassword(user, password); appErr != nil {
if appErr = a.UpdatePassword(c, user, password); appErr != nil {
return appErr
}
} else {

View File

@ -98,7 +98,7 @@ func (a *App) SwitchEmailToLdap(c request.CTX, email, password, code, ldapLoginI
return "", err
}
if err := a.CheckPasswordAndAllCriteria(user, password, code); err != nil {
if err := a.CheckPasswordAndAllCriteria(c, user, password, code); err != nil {
return "", err
}
@ -147,11 +147,11 @@ func (a *App) SwitchLdapToEmail(c request.CTX, ldapPassword, code, email, newPas
return "", err
}
if err := a.CheckUserMfa(user, code); err != nil {
if err := a.CheckUserMfa(c, user, code); err != nil {
return "", err
}
if err := a.UpdatePassword(user, newPassword); err != nil {
if err := a.UpdatePassword(c, user, newPassword); err != nil {
return "", err
}

View File

@ -949,7 +949,7 @@ func (a *App) SwitchEmailToOAuth(c request.CTX, w http.ResponseWriter, r *http.R
return "", err
}
if err = a.CheckPasswordAndAllCriteria(user, password, code); err != nil {
if err = a.CheckPasswordAndAllCriteria(c, user, password, code); err != nil {
return "", err
}
@ -983,7 +983,7 @@ func (a *App) SwitchOAuthToEmail(c request.CTX, email, password, requesterId str
return "", model.NewAppError("SwitchOAuthToEmail", "api.user.oauth_to_email.context.app_error", nil, "", http.StatusForbidden)
}
if err := a.UpdatePassword(user, password); err != nil {
if err := a.UpdatePassword(c, user, password); err != nil {
return "", err
}

View File

@ -1257,7 +1257,7 @@ func (a *OpenTracingAppLayer) CheckMandatoryS3Fields(settings *model.FileSetting
return resultVar0
}
func (a *OpenTracingAppLayer) CheckPasswordAndAllCriteria(user *model.User, password string, mfaToken string) *model.AppError {
func (a *OpenTracingAppLayer) CheckPasswordAndAllCriteria(rctx request.CTX, user *model.User, password string, mfaToken string) *model.AppError {
origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.CheckPasswordAndAllCriteria")
@ -1269,7 +1269,7 @@ func (a *OpenTracingAppLayer) CheckPasswordAndAllCriteria(user *model.User, pass
}()
defer span.Finish()
resultVar0 := a.app.CheckPasswordAndAllCriteria(user, password, mfaToken)
resultVar0 := a.app.CheckPasswordAndAllCriteria(rctx, user, password, mfaToken)
if resultVar0 != nil {
span.LogFields(spanlog.Error(resultVar0))
@ -1333,7 +1333,7 @@ func (a *OpenTracingAppLayer) CheckRolesExist(roleNames []string) *model.AppErro
return resultVar0
}
func (a *OpenTracingAppLayer) CheckUserAllAuthenticationCriteria(user *model.User, mfaToken string) *model.AppError {
func (a *OpenTracingAppLayer) CheckUserAllAuthenticationCriteria(rctx request.CTX, user *model.User, mfaToken string) *model.AppError {
origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.CheckUserAllAuthenticationCriteria")
@ -1345,7 +1345,7 @@ func (a *OpenTracingAppLayer) CheckUserAllAuthenticationCriteria(user *model.Use
}()
defer span.Finish()
resultVar0 := a.app.CheckUserAllAuthenticationCriteria(user, mfaToken)
resultVar0 := a.app.CheckUserAllAuthenticationCriteria(rctx, user, mfaToken)
if resultVar0 != nil {
span.LogFields(spanlog.Error(resultVar0))
@ -1355,7 +1355,7 @@ func (a *OpenTracingAppLayer) CheckUserAllAuthenticationCriteria(user *model.Use
return resultVar0
}
func (a *OpenTracingAppLayer) CheckUserMfa(user *model.User, token string) *model.AppError {
func (a *OpenTracingAppLayer) CheckUserMfa(rctx request.CTX, user *model.User, token string) *model.AppError {
origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.CheckUserMfa")
@ -1367,7 +1367,7 @@ func (a *OpenTracingAppLayer) CheckUserMfa(user *model.User, token string) *mode
}()
defer span.Finish()
resultVar0 := a.app.CheckUserMfa(user, token)
resultVar0 := a.app.CheckUserMfa(rctx, user, token)
if resultVar0 != nil {
span.LogFields(spanlog.Error(resultVar0))
@ -1377,7 +1377,7 @@ func (a *OpenTracingAppLayer) CheckUserMfa(user *model.User, token string) *mode
return resultVar0
}
func (a *OpenTracingAppLayer) CheckUserPostflightAuthenticationCriteria(user *model.User) *model.AppError {
func (a *OpenTracingAppLayer) CheckUserPostflightAuthenticationCriteria(rctx request.CTX, user *model.User) *model.AppError {
origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.CheckUserPostflightAuthenticationCriteria")
@ -1389,7 +1389,7 @@ func (a *OpenTracingAppLayer) CheckUserPostflightAuthenticationCriteria(user *mo
}()
defer span.Finish()
resultVar0 := a.app.CheckUserPostflightAuthenticationCriteria(user)
resultVar0 := a.app.CheckUserPostflightAuthenticationCriteria(rctx, user)
if resultVar0 != nil {
span.LogFields(spanlog.Error(resultVar0))
@ -1399,7 +1399,7 @@ func (a *OpenTracingAppLayer) CheckUserPostflightAuthenticationCriteria(user *mo
return resultVar0
}
func (a *OpenTracingAppLayer) CheckUserPreflightAuthenticationCriteria(user *model.User, mfaToken string) *model.AppError {
func (a *OpenTracingAppLayer) CheckUserPreflightAuthenticationCriteria(rctx request.CTX, user *model.User, mfaToken string) *model.AppError {
origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.CheckUserPreflightAuthenticationCriteria")
@ -1411,7 +1411,7 @@ func (a *OpenTracingAppLayer) CheckUserPreflightAuthenticationCriteria(user *mod
}()
defer span.Finish()
resultVar0 := a.app.CheckUserPreflightAuthenticationCriteria(user, mfaToken)
resultVar0 := a.app.CheckUserPreflightAuthenticationCriteria(rctx, user, mfaToken)
if resultVar0 != nil {
span.LogFields(spanlog.Error(resultVar0))
@ -3975,7 +3975,7 @@ func (a *OpenTracingAppLayer) DoUploadFileExpectModification(c request.CTX, now
return resultVar0, resultVar1, resultVar2
}
func (a *OpenTracingAppLayer) DoubleCheckPassword(user *model.User, password string) *model.AppError {
func (a *OpenTracingAppLayer) DoubleCheckPassword(rctx request.CTX, user *model.User, password string) *model.AppError {
origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.DoubleCheckPassword")
@ -3987,7 +3987,7 @@ func (a *OpenTracingAppLayer) DoubleCheckPassword(user *model.User, password str
}()
defer span.Finish()
resultVar0 := a.app.DoubleCheckPassword(user, password)
resultVar0 := a.app.DoubleCheckPassword(rctx, user, password)
if resultVar0 != nil {
span.LogFields(spanlog.Error(resultVar0))
@ -11890,7 +11890,7 @@ func (a *OpenTracingAppLayer) IsLeader() bool {
return resultVar0
}
func (a *OpenTracingAppLayer) IsPasswordValid(password string) *model.AppError {
func (a *OpenTracingAppLayer) IsPasswordValid(rctx request.CTX, password string) *model.AppError {
origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.IsPasswordValid")
@ -11902,7 +11902,7 @@ func (a *OpenTracingAppLayer) IsPasswordValid(password string) *model.AppError {
}()
defer span.Finish()
resultVar0 := a.app.IsPasswordValid(password)
resultVar0 := a.app.IsPasswordValid(rctx, password)
if resultVar0 != nil {
span.LogFields(spanlog.Error(resultVar0))
@ -17541,7 +17541,7 @@ func (a *OpenTracingAppLayer) UpdateOutgoingWebhook(c request.CTX, oldHook *mode
return resultVar0, resultVar1
}
func (a *OpenTracingAppLayer) UpdatePassword(user *model.User, newPassword string) *model.AppError {
func (a *OpenTracingAppLayer) UpdatePassword(rctx request.CTX, user *model.User, newPassword string) *model.AppError {
origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.UpdatePassword")
@ -17553,7 +17553,7 @@ func (a *OpenTracingAppLayer) UpdatePassword(user *model.User, newPassword strin
}()
defer span.Finish()
resultVar0 := a.app.UpdatePassword(user, newPassword)
resultVar0 := a.app.UpdatePassword(rctx, user, newPassword)
if resultVar0 != nil {
span.LogFields(spanlog.Error(resultVar0))

View File

@ -699,7 +699,7 @@ func TestUserWillLogIn_Blocked(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
err := th.App.UpdatePassword(th.BasicUser, "hunter2")
err := th.App.UpdatePassword(th.Context, th.BasicUser, "hunter2")
assert.Nil(t, err, "Error updating user password: %s", err)
tearDown, _, _ := SetAppEnvironmentWithPlugins(t,
[]string{
@ -737,7 +737,7 @@ func TestUserWillLogInIn_Passed(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
err := th.App.UpdatePassword(th.BasicUser, "hunter2")
err := th.App.UpdatePassword(th.Context, th.BasicUser, "hunter2")
assert.Nil(t, err, "Error updating user password: %s", err)
@ -778,7 +778,7 @@ func TestUserHasLoggedIn(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
err := th.App.UpdatePassword(th.BasicUser, "hunter2")
err := th.App.UpdatePassword(th.Context, th.BasicUser, "hunter2")
assert.Nil(t, err, "Error updating user password: %s", err)

View File

@ -905,7 +905,7 @@ func (a *App) UpdatePasswordAsUser(c request.CTX, userID, currentPassword, newPa
return model.NewAppError("updatePassword", "api.user.update_password.oauth.app_error", nil, "auth_service="+user.AuthService, http.StatusBadRequest)
}
if err := a.DoubleCheckPassword(user, currentPassword); err != nil {
if err := a.DoubleCheckPassword(c, user, currentPassword); err != nil {
if err.Id == "api.user.check_user_password.invalid.app_error" {
err = model.NewAppError("updatePassword", "api.user.update_password.incorrect.app_error", nil, "", http.StatusBadRequest)
}
@ -1366,8 +1366,8 @@ func (a *App) UpdatePasswordByUserIdSendEmail(c request.CTX, userID, newPassword
return a.UpdatePasswordSendEmail(c, user, newPassword, method)
}
func (a *App) UpdatePassword(user *model.User, newPassword string) *model.AppError {
if err := a.IsPasswordValid(newPassword); err != nil {
func (a *App) UpdatePassword(rctx request.CTX, user *model.User, newPassword string) *model.AppError {
if err := a.IsPasswordValid(rctx, newPassword); err != nil {
return err
}
@ -1383,7 +1383,7 @@ func (a *App) UpdatePassword(user *model.User, newPassword string) *model.AppErr
}
func (a *App) UpdatePasswordSendEmail(c request.CTX, user *model.User, newPassword, method string) *model.AppError {
if err := a.UpdatePassword(user, newPassword); err != nil {
if err := a.UpdatePassword(c, user, newPassword); err != nil {
return err
}
@ -2474,7 +2474,7 @@ func (a *App) ConvertBotToUser(c request.CTX, bot *model.Bot, userPatch *model.U
return nil, err
}
err = a.UpdatePassword(user, *userPatch.Password)
err = a.UpdatePassword(c, user, *userPatch.Password)
if err != nil {
return nil, err
}

View File

@ -145,7 +145,7 @@ func completeSaml(c *Context, w http.ResponseWriter, r *http.Request) {
return
}
if err = c.App.CheckUserAllAuthenticationCriteria(user, ""); err != nil {
if err = c.App.CheckUserAllAuthenticationCriteria(c.AppContext, user, ""); err != nil {
handleError(err)
return
}