diff --git a/pkg/api/admin_users.go b/pkg/api/admin_users.go index 439ac5bcdbe..fc629bddd85 100644 --- a/pkg/api/admin_users.go +++ b/pkg/api/admin_users.go @@ -70,14 +70,14 @@ func (hs *HTTPServer) AdminCreateUser(c *contextmodel.ReqContext) response.Respo usr, err := hs.userService.Create(c.Req.Context(), &cmd) if err != nil { if errors.Is(err, org.ErrOrgNotFound) { - return response.Error(400, err.Error(), nil) + return response.Error(http.StatusBadRequest, err.Error(), nil) } if errors.Is(err, user.ErrUserAlreadyExists) { - return response.Error(412, fmt.Sprintf("User with email '%s' or username '%s' already exists", form.Email, form.Login), err) + return response.Error(http.StatusPreconditionFailed, fmt.Sprintf("User with email '%s' or username '%s' already exists", form.Email, form.Login), err) } - return response.Error(500, "failed to create user", err) + return response.Error(http.StatusInternalServerError, "failed to create user", err) } metrics.MApiAdminUserCreate.Inc() diff --git a/pkg/api/admin_users_test.go b/pkg/api/admin_users_test.go index f6d2fb0aa35..27f715384db 100644 --- a/pkg/api/admin_users_test.go +++ b/pkg/api/admin_users_test.go @@ -209,7 +209,7 @@ func TestAdminAPIEndpoint(t *testing.T) { respJSON, err := simplejson.NewJson(sc.resp.Body.Bytes()) require.NoError(t, err) - assert.Equal(t, "organization not found", respJSON.Get("message").MustString()) + assert.Equal(t, org.ErrOrgNotFound.Error(), respJSON.Get("message").MustString()) }) }) }) diff --git a/pkg/services/accesscontrol/middleware.go b/pkg/services/accesscontrol/middleware.go index 2c3f1299f59..a8b23d4c476 100644 --- a/pkg/services/accesscontrol/middleware.go +++ b/pkg/services/accesscontrol/middleware.go @@ -215,8 +215,12 @@ func UseOrgFromContextParams(c *contextmodel.ReqContext) (int64, error) { orgID, err := strconv.ParseInt(web.Params(c.Req)[":orgId"], 10, 64) // Special case of macaron handling invalid params - if orgID == 0 || err != nil { - return 0, org.ErrOrgNotFound + if err != nil { + return 0, org.ErrOrgNotFound.Errorf("failed to get organization from context: %w", err) + } + + if orgID == 0 { + return 0, org.ErrOrgNotFound.Errorf("empty org ID") } return orgID, nil diff --git a/pkg/services/org/model.go b/pkg/services/org/model.go index 081bc60fbf2..f523172b917 100644 --- a/pkg/services/org/model.go +++ b/pkg/services/org/model.go @@ -7,15 +7,16 @@ import ( "github.com/grafana/grafana/pkg/models/roletype" "github.com/grafana/grafana/pkg/services/user" + "github.com/grafana/grafana/pkg/util/errutil" ) // Typed errors var ( - ErrOrgNotFound = errors.New("organization not found") ErrOrgNameTaken = errors.New("organization name is taken") ErrLastOrgAdmin = errors.New("cannot remove last organization admin") ErrOrgUserNotFound = errors.New("cannot find the organization user") ErrOrgUserAlreadyAdded = errors.New("user is already added to organization") + ErrOrgNotFound = errutil.NewBase(errutil.StatusNotFound, "org.notFound", errutil.WithPublicMessage("organization not found")) ) type Org struct { diff --git a/pkg/services/org/orgimpl/store.go b/pkg/services/org/orgimpl/store.go index 462a6bd0b6f..a81025d751c 100644 --- a/pkg/services/org/orgimpl/store.go +++ b/pkg/services/org/orgimpl/store.go @@ -64,7 +64,7 @@ func (ss *sqlStore) Get(ctx context.Context, orgID int64) (*org.Org, error) { return err } if !has { - return org.ErrOrgNotFound + return org.ErrOrgNotFound.Errorf("failed to get organization with ID: %d", orgID) } return nil }) @@ -147,7 +147,7 @@ func (ss *sqlStore) Update(ctx context.Context, cmd *org.UpdateOrgCommand) error } if affectedRows == 0 { - return org.ErrOrgNotFound + return org.ErrOrgNotFound.Errorf("failed to update organization with ID: %d", cmd.OrgId) } sess.PublishAfterCommit(&events.OrgUpdated{ @@ -210,7 +210,7 @@ func (ss *sqlStore) Delete(ctx context.Context, cmd *org.DeleteOrgCommand) error if res, err := sess.Query("SELECT 1 from org WHERE id=?", cmd.ID); err != nil { return err } else if len(res) != 1 { - return org.ErrOrgNotFound + return org.ErrOrgNotFound.Errorf("failed to delete organisation with ID: %d", cmd.ID) } deletes := []string{ @@ -367,7 +367,7 @@ func (ss *sqlStore) AddOrgUser(ctx context.Context, cmd *org.AddOrgUserCommand) if res, err := sess.Query("SELECT 1 from org WHERE id=?", cmd.OrgID); err != nil { return err } else if len(res) != 1 { - return org.ErrOrgNotFound + return org.ErrOrgNotFound.Errorf("failed to add user to organization with ID: %d", cmd.OrgID) } entity := org.OrgUser{ @@ -524,7 +524,7 @@ func (ss *sqlStore) GetByID(ctx context.Context, query *org.GetOrgByIDQuery) (*o } if !exists { - return org.ErrOrgNotFound + return org.ErrOrgNotFound.Errorf("failed to get org by ID: %d", query.ID) } return nil }) @@ -638,7 +638,7 @@ func (ss *sqlStore) GetByName(ctx context.Context, query *org.GetOrgByNameQuery) } if !exists { - return org.ErrOrgNotFound + return org.ErrOrgNotFound.Errorf("failed to get org by name: %s", query.Name) } return nil }) diff --git a/pkg/services/sqlstore/user.go b/pkg/services/sqlstore/user.go index 2fe7a4c7a96..d197040a1d9 100644 --- a/pkg/services/sqlstore/user.go +++ b/pkg/services/sqlstore/user.go @@ -139,7 +139,7 @@ func verifyExistingOrg(sess *DBSession, orgId int64) error { return err } if !has { - return org.ErrOrgNotFound + return org.ErrOrgNotFound.Errorf("failed to verify existing org") } return nil }