From 0374cafa7eea387c159aa30d352b15344ec26a64 Mon Sep 17 00:00:00 2001 From: Umputun Date: Wed, 6 Jun 2018 13:22:09 -0500 Subject: [PATCH] fail on delete of non-existing user --- app/rest/api/admin.go | 2 +- app/rest/api/admin_test.go | 15 ++++++++++++++- app/store/engine/bolt_admin.go | 12 ++++++++++-- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/app/rest/api/admin.go b/app/rest/api/admin.go index 36810701..619834f5 100644 --- a/app/rest/api/admin.go +++ b/app/rest/api/admin.go @@ -91,7 +91,7 @@ func (a *admin) deleteMeRequestCtrl(w http.ResponseWriter, r *http.Request) { log.Printf("[INFO] delete all user comments by request for %s, site %s", claims.User.ID, claims.SiteID) if err := a.dataService.DeleteUser(claims.SiteID, claims.User.ID); err != nil { - rest.SendErrorJSON(w, r, http.StatusInternalServerError, err, "can't delete user") + rest.SendErrorJSON(w, r, http.StatusBadRequest, err, "can't delete user") return } a.cache.Flush(claims.SiteID, claims.User.ID) diff --git a/app/rest/api/admin_test.go b/app/rest/api/admin_test.go index 068c3cba..f43ebe25 100644 --- a/app/rest/api/admin_test.go +++ b/app/rest/api/admin_test.go @@ -456,10 +456,23 @@ func TestAdmin_DeleteMeRequestFailed(t *testing.T) { token, err := srv.Authenticator.JWTService.Token(&claims) assert.Nil(t, err) - req, err = http.NewRequest(http.MethodDelete, fmt.Sprintf("%s/api/v1/admin/deleteme?token=%s", ts.URL, token), nil) + req, err = http.NewRequest(http.MethodGet, fmt.Sprintf("%s/api/v1/admin/deleteme?token=%s", ts.URL, token), nil) assert.Nil(t, err) req.SetBasicAuth("dev", "bad-password") resp, err = client.Do(req) assert.Nil(t, err) assert.Equal(t, 401, resp.StatusCode) + + // try bad user + badClaims := claims + badClaims.User.ID = "no-such-id" + token, err = srv.Authenticator.JWTService.Token(&badClaims) + assert.Nil(t, err) + req, err = http.NewRequest(http.MethodGet, fmt.Sprintf("%s/api/v1/admin/deleteme?token=%s", ts.URL, token), nil) + assert.Nil(t, err) + req.SetBasicAuth("dev", "password") + resp, err = client.Do(req) + assert.Nil(t, err) + assert.Equal(t, 400, resp.StatusCode, resp.Status) + } diff --git a/app/store/engine/bolt_admin.go b/app/store/engine/bolt_admin.go index 703a2b05..9bec996a 100644 --- a/app/store/engine/bolt_admin.go +++ b/app/store/engine/bolt_admin.go @@ -138,13 +138,21 @@ func (b *BoltDB) DeleteUser(siteID string, userID string) error { usersBkt := tx.Bucket([]byte(userBucketName)) if usersBkt != nil { if e := usersBkt.DeleteBucket([]byte(userID)); e != nil { - return errors.Wrapf(err, "failed to delete user bucker for %s", userID) + return errors.Wrapf(err, "failed to delete user bucket for %s", userID) } } return nil }) - return nil + if err != nil { + return errors.Wrap(err, "can't delete user meta") + } + + if len(comments) == 0 { + return errors.Errorf("unknown user %s", userID) + } + + return err } // SetBlock blocks/unblocks user for given site