|
|
|
@ -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 { |
|
|
|
|
extUser := cmd.ExternalUser |
|
|
|
|
|
|
|
|
|
usr, err := ls.AuthInfoService.LookupAndUpdate(ctx, &models.GetUserByAuthInfoQuery{ |
|
|
|
|
usr, errAuthLookup := ls.AuthInfoService.LookupAndUpdate(ctx, &models.GetUserByAuthInfoQuery{ |
|
|
|
|
AuthModule: extUser.AuthModule, |
|
|
|
|
AuthId: extUser.AuthId, |
|
|
|
|
UserLookupParams: cmd.UserLookupParams, |
|
|
|
|
}) |
|
|
|
|
if err != nil { |
|
|
|
|
if !errors.Is(err, user.ErrUserNotFound) { |
|
|
|
|
return err |
|
|
|
|
if errAuthLookup != nil { |
|
|
|
|
if !errors.Is(errAuthLookup, user.ErrUserNotFound) { |
|
|
|
|
return errAuthLookup |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if !cmd.SignupAllowed { |
|
|
|
|
cmd.ReqContext.Logger.Warn("Not allowing login, user not found in internal user database and allow signup = false", "authmode", extUser.AuthModule) |
|
|
|
|
return login.ErrSignupNotAllowed |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
limitReached, err := ls.QuotaService.QuotaReached(cmd.ReqContext, "user") |
|
|
|
|
if err != nil { |
|
|
|
|
cmd.ReqContext.Logger.Warn("Error getting user quota.", "error", err) |
|
|
|
|
limitReached, errLimit := ls.QuotaService.QuotaReached(cmd.ReqContext, "user") |
|
|
|
|
if errLimit != nil { |
|
|
|
|
cmd.ReqContext.Logger.Warn("Error getting user quota.", "error", errLimit) |
|
|
|
|
return login.ErrGettingUserQuota |
|
|
|
|
} |
|
|
|
|
if limitReached { |
|
|
|
|
return login.ErrUsersQuotaReached |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
result, err := ls.createUser(extUser) |
|
|
|
|
if err != nil { |
|
|
|
|
return err |
|
|
|
|
result, errCreateUser := ls.createUser(extUser) |
|
|
|
|
if errCreateUser != nil { |
|
|
|
|
return errCreateUser |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
cmd.Result = &user.User{ |
|
|
|
@ -105,49 +106,48 @@ func (ls *Implementation) UpsertUser(ctx context.Context, cmd *models.UpsertUser |
|
|
|
|
AuthId: extUser.AuthId, |
|
|
|
|
OAuthToken: extUser.OAuthToken, |
|
|
|
|
} |
|
|
|
|
if err := ls.AuthInfoService.SetAuthInfo(ctx, cmd2); err != nil { |
|
|
|
|
return err |
|
|
|
|
if errSetAuth := ls.AuthInfoService.SetAuthInfo(ctx, cmd2); errSetAuth != nil { |
|
|
|
|
return errSetAuth |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
cmd.Result = usr |
|
|
|
|
|
|
|
|
|
err = ls.updateUser(ctx, cmd.Result, extUser) |
|
|
|
|
if err != nil { |
|
|
|
|
return err |
|
|
|
|
if errUserMod := ls.updateUser(ctx, cmd.Result, extUser); errUserMod != nil { |
|
|
|
|
return errUserMod |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Always persist the latest token at log-in
|
|
|
|
|
if extUser.AuthModule != "" && extUser.OAuthToken != nil { |
|
|
|
|
err = ls.updateUserAuth(ctx, cmd.Result, extUser) |
|
|
|
|
if err != nil { |
|
|
|
|
return err |
|
|
|
|
if errAuthMod := ls.updateUserAuth(ctx, cmd.Result, extUser); errAuthMod != nil { |
|
|
|
|
return errAuthMod |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if extUser.AuthModule == models.AuthModuleLDAP && usr.IsDisabled { |
|
|
|
|
// Re-enable user when it found in LDAP
|
|
|
|
|
if err := ls.SQLStore.DisableUser(ctx, &models.DisableUserCommand{UserId: cmd.Result.ID, IsDisabled: false}); err != nil { |
|
|
|
|
return err |
|
|
|
|
if errDisableUser := ls.SQLStore.DisableUser(ctx, |
|
|
|
|
&models.DisableUserCommand{ |
|
|
|
|
UserId: cmd.Result.ID, IsDisabled: false}); errDisableUser != nil { |
|
|
|
|
return errDisableUser |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if err := ls.syncOrgRoles(ctx, cmd.Result, extUser); err != nil { |
|
|
|
|
return err |
|
|
|
|
if errSyncRole := ls.syncOrgRoles(ctx, cmd.Result, extUser); errSyncRole != nil { |
|
|
|
|
return errSyncRole |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Sync isGrafanaAdmin permission
|
|
|
|
|
if extUser.IsGrafanaAdmin != nil && *extUser.IsGrafanaAdmin != cmd.Result.IsAdmin { |
|
|
|
|
if err := ls.SQLStore.UpdateUserPermissions(cmd.Result.ID, *extUser.IsGrafanaAdmin); err != nil { |
|
|
|
|
return err |
|
|
|
|
if errPerms := ls.SQLStore.UpdateUserPermissions(cmd.Result.ID, *extUser.IsGrafanaAdmin); errPerms != nil { |
|
|
|
|
return errPerms |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if ls.TeamSync != nil { |
|
|
|
|
err := ls.TeamSync(cmd.Result, extUser) |
|
|
|
|
if err != nil { |
|
|
|
|
return err |
|
|
|
|
if errTeamSync := ls.TeamSync(cmd.Result, extUser); errTeamSync != nil { |
|
|
|
|
return errTeamSync |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|