[release-11.0.12] Service Accounts: Do not show error pop-ups for Service Account and Renderer UI flows (#101803)

* backport fixes from https://github.com/grafana/grafana/pull/101679

* Service Accounts: Don't show error pop-ups for Service Account and Renderer UI flows (#101776)

* don't show error pop-ups for SAs and renderer

* only hide non 4xx error pop'ups

* linting

(cherry picked from commit 392124de00)
This commit is contained in:
Ieva
2025-03-07 15:48:17 +00:00
committed by GitHub
parent 28582e9f7f
commit 0935048c0b
2 changed files with 23 additions and 11 deletions
+13 -11
View File
@@ -31,7 +31,7 @@ import (
// 404: notFoundError
// 500: internalServerError
func (hs *HTTPServer) GetSignedInUser(c *contextmodel.ReqContext) response.Response {
userID, errResponse := getUserID(c)
userID, errResponse := hs.getUserID(c)
if errResponse != nil {
return errResponse
}
@@ -138,7 +138,7 @@ func (hs *HTTPServer) UpdateSignedInUser(c *contextmodel.ReqContext) response.Re
cmd.Email = strings.TrimSpace(cmd.Email)
cmd.Login = strings.TrimSpace(cmd.Login)
userID, errResponse := getUserID(c)
userID, errResponse := hs.getUserID(c)
if errResponse != nil {
return errResponse
}
@@ -333,7 +333,7 @@ func (hs *HTTPServer) isExternalUser(ctx context.Context, userID int64) (bool, e
// 403: forbiddenError
// 500: internalServerError
func (hs *HTTPServer) GetSignedInUserOrgList(c *contextmodel.ReqContext) response.Response {
userID, errResponse := getUserID(c)
userID, errResponse := hs.getUserID(c)
if errResponse != nil {
return errResponse
}
@@ -353,7 +353,7 @@ func (hs *HTTPServer) GetSignedInUserOrgList(c *contextmodel.ReqContext) respons
// 403: forbiddenError
// 500: internalServerError
func (hs *HTTPServer) GetSignedInUserTeamList(c *contextmodel.ReqContext) response.Response {
userID, errResponse := getUserID(c)
userID, errResponse := hs.getUserID(c)
if errResponse != nil {
return errResponse
}
@@ -463,7 +463,7 @@ func (hs *HTTPServer) UserSetUsingOrg(c *contextmodel.ReqContext) response.Respo
return response.Error(http.StatusBadRequest, "id is invalid", err)
}
userID, errResponse := getUserID(c)
userID, errResponse := hs.getUserID(c)
if errResponse != nil {
return errResponse
}
@@ -491,7 +491,8 @@ func (hs *HTTPServer) ChangeActiveOrgAndRedirectToHome(c *contextmodel.ReqContex
namespace, identifier := c.SignedInUser.GetNamespacedID()
if namespace != identity.NamespaceUser {
c.JsonApiErr(http.StatusForbidden, "Endpoint only available for users", nil)
hs.log.Debug("Requested endpoint only available to users")
c.JsonApiErr(http.StatusNotModified, "Endpoint only available for users", nil)
return
}
@@ -536,7 +537,7 @@ func (hs *HTTPServer) ChangeUserPassword(c *contextmodel.ReqContext) response.Re
return response.Error(http.StatusBadRequest, "bad request data", err)
}
userID, errResponse := getUserID(c)
userID, errResponse := hs.getUserID(c)
if errResponse != nil {
return errResponse
}
@@ -603,7 +604,7 @@ func (hs *HTTPServer) SetHelpFlag(c *contextmodel.ReqContext) response.Response
return response.Error(http.StatusBadRequest, "id is invalid", err)
}
userID, errResponse := getUserID(c)
userID, errResponse := hs.getUserID(c)
if errResponse != nil {
return errResponse
}
@@ -638,7 +639,7 @@ func (hs *HTTPServer) SetHelpFlag(c *contextmodel.ReqContext) response.Response
// 403: forbiddenError
// 500: internalServerError
func (hs *HTTPServer) ClearHelpFlags(c *contextmodel.ReqContext) response.Response {
userID, errResponse := getUserID(c)
userID, errResponse := hs.getUserID(c)
if errResponse != nil {
return errResponse
}
@@ -655,10 +656,11 @@ func (hs *HTTPServer) ClearHelpFlags(c *contextmodel.ReqContext) response.Respon
return response.JSON(http.StatusOK, &util.DynMap{"message": "Help flag set", "helpFlags1": cmd.HelpFlags1})
}
func getUserID(c *contextmodel.ReqContext) (int64, *response.NormalResponse) {
func (hs *HTTPServer) getUserID(c *contextmodel.ReqContext) (int64, *response.NormalResponse) {
namespace, identifier := c.SignedInUser.GetNamespacedID()
if namespace != identity.NamespaceUser {
return 0, response.Error(http.StatusForbidden, "Endpoint only available for users", nil)
hs.log.Debug("Requested endpoint only available to users")
return 0, response.Error(http.StatusNotModified, "Endpoint only available for users", nil)
}
userID, err := identity.IntIdentifier(namespace, identifier)
+10
View File
@@ -273,6 +273,16 @@ export class BackendSrv implements BackendService {
}
showErrorAlert(config: BackendSrvRequest, err: FetchError) {
// do not show non-user error alerts for api keys or render tokens, they are used for kiosk mode and reporting and can't react to error pop-ups
if (
(err.status < 400 || err.status >= 500) &&
this.dependencies.contextSrv.isSignedIn &&
(this.dependencies.contextSrv.user.authenticatedBy === 'apikey' ||
this.dependencies.contextSrv.user.authenticatedBy === 'render')
) {
return;
}
if (config.showErrorAlert === false) {
return;
}