Oauth: Reduce error scope on upsert (#53242)

This commit is contained in:
Jo
2022-08-08 10:58:10 +02:00
committed by GitHub
parent a40c1e227c
commit beb3cb9abe
2 changed files with 28 additions and 28 deletions
+1 -1
View File
@@ -193,7 +193,7 @@ func (hs *HTTPServer) OAuthLogin(ctx *models.ReqContext) {
// token.TokenType was defaulting to "bearer", which is out of spec, so we explicitly set to "Bearer" // token.TokenType was defaulting to "bearer", which is out of spec, so we explicitly set to "Bearer"
token.TokenType = "Bearer" token.TokenType = "Bearer"
oauthLogger.Debug("OAuthLogin: got token", "token", fmt.Sprintf("%v", token)) oauthLogger.Debug("OAuthLogin: got token", "token", fmt.Sprintf("%+v", token))
// set up oauth2 client // set up oauth2 client
client := connect.Client(oauthCtx, token) client := connect.Client(oauthCtx, token)
+27 -27
View File
@@ -48,32 +48,33 @@ func (ls *Implementation) CreateUser(cmd user.CreateUserCommand) (*user.User, er
func (ls *Implementation) UpsertUser(ctx context.Context, cmd *models.UpsertUserCommand) error { func (ls *Implementation) UpsertUser(ctx context.Context, cmd *models.UpsertUserCommand) error {
extUser := cmd.ExternalUser extUser := cmd.ExternalUser
usr, err := ls.AuthInfoService.LookupAndUpdate(ctx, &models.GetUserByAuthInfoQuery{ usr, errAuthLookup := ls.AuthInfoService.LookupAndUpdate(ctx, &models.GetUserByAuthInfoQuery{
AuthModule: extUser.AuthModule, AuthModule: extUser.AuthModule,
AuthId: extUser.AuthId, AuthId: extUser.AuthId,
UserLookupParams: cmd.UserLookupParams, UserLookupParams: cmd.UserLookupParams,
}) })
if err != nil { if errAuthLookup != nil {
if !errors.Is(err, user.ErrUserNotFound) { if !errors.Is(errAuthLookup, user.ErrUserNotFound) {
return err return errAuthLookup
} }
if !cmd.SignupAllowed { if !cmd.SignupAllowed {
cmd.ReqContext.Logger.Warn("Not allowing login, user not found in internal user database and allow signup = false", "authmode", extUser.AuthModule) cmd.ReqContext.Logger.Warn("Not allowing login, user not found in internal user database and allow signup = false", "authmode", extUser.AuthModule)
return login.ErrSignupNotAllowed return login.ErrSignupNotAllowed
} }
limitReached, err := ls.QuotaService.QuotaReached(cmd.ReqContext, "user") limitReached, errLimit := ls.QuotaService.QuotaReached(cmd.ReqContext, "user")
if err != nil { if errLimit != nil {
cmd.ReqContext.Logger.Warn("Error getting user quota.", "error", err) cmd.ReqContext.Logger.Warn("Error getting user quota.", "error", errLimit)
return login.ErrGettingUserQuota return login.ErrGettingUserQuota
} }
if limitReached { if limitReached {
return login.ErrUsersQuotaReached return login.ErrUsersQuotaReached
} }
result, err := ls.createUser(extUser) result, errCreateUser := ls.createUser(extUser)
if err != nil { if errCreateUser != nil {
return err return errCreateUser
} }
cmd.Result = &user.User{ cmd.Result = &user.User{
@@ -105,49 +106,48 @@ func (ls *Implementation) UpsertUser(ctx context.Context, cmd *models.UpsertUser
AuthId: extUser.AuthId, AuthId: extUser.AuthId,
OAuthToken: extUser.OAuthToken, OAuthToken: extUser.OAuthToken,
} }
if err := ls.AuthInfoService.SetAuthInfo(ctx, cmd2); err != nil { if errSetAuth := ls.AuthInfoService.SetAuthInfo(ctx, cmd2); errSetAuth != nil {
return err return errSetAuth
} }
} }
} else { } else {
cmd.Result = usr cmd.Result = usr
err = ls.updateUser(ctx, cmd.Result, extUser) if errUserMod := ls.updateUser(ctx, cmd.Result, extUser); errUserMod != nil {
if err != nil { return errUserMod
return err
} }
// Always persist the latest token at log-in // Always persist the latest token at log-in
if extUser.AuthModule != "" && extUser.OAuthToken != nil { if extUser.AuthModule != "" && extUser.OAuthToken != nil {
err = ls.updateUserAuth(ctx, cmd.Result, extUser) if errAuthMod := ls.updateUserAuth(ctx, cmd.Result, extUser); errAuthMod != nil {
if err != nil { return errAuthMod
return err
} }
} }
if extUser.AuthModule == models.AuthModuleLDAP && usr.IsDisabled { if extUser.AuthModule == models.AuthModuleLDAP && usr.IsDisabled {
// Re-enable user when it found in LDAP // Re-enable user when it found in LDAP
if err := ls.SQLStore.DisableUser(ctx, &models.DisableUserCommand{UserId: cmd.Result.ID, IsDisabled: false}); err != nil { if errDisableUser := ls.SQLStore.DisableUser(ctx,
return err &models.DisableUserCommand{
UserId: cmd.Result.ID, IsDisabled: false}); errDisableUser != nil {
return errDisableUser
} }
} }
} }
if err := ls.syncOrgRoles(ctx, cmd.Result, extUser); err != nil { if errSyncRole := ls.syncOrgRoles(ctx, cmd.Result, extUser); errSyncRole != nil {
return err return errSyncRole
} }
// Sync isGrafanaAdmin permission // Sync isGrafanaAdmin permission
if extUser.IsGrafanaAdmin != nil && *extUser.IsGrafanaAdmin != cmd.Result.IsAdmin { if extUser.IsGrafanaAdmin != nil && *extUser.IsGrafanaAdmin != cmd.Result.IsAdmin {
if err := ls.SQLStore.UpdateUserPermissions(cmd.Result.ID, *extUser.IsGrafanaAdmin); err != nil { if errPerms := ls.SQLStore.UpdateUserPermissions(cmd.Result.ID, *extUser.IsGrafanaAdmin); errPerms != nil {
return err return errPerms
} }
} }
if ls.TeamSync != nil { if ls.TeamSync != nil {
err := ls.TeamSync(cmd.Result, extUser) if errTeamSync := ls.TeamSync(cmd.Result, extUser); errTeamSync != nil {
if err != nil { return errTeamSync
return err
} }
} }