From e4d982dbcac1d26ac4a03a917c98b42e6adf6ddc Mon Sep 17 00:00:00 2001 From: Dmitry Verkhoturov Date: Tue, 7 Jan 2020 21:49:24 +0100 Subject: [PATCH] Delete user email on /deleteme request (#540) * delete user email on deleteme request * add tests for user email deletion in /deleteme request --- backend/app/rest/api/admin.go | 8 ++++++++ backend/app/rest/api/admin_test.go | 13 +++++++++++++ 2 files changed, 21 insertions(+) diff --git a/backend/app/rest/api/admin.go b/backend/app/rest/api/admin.go index e18af8ab..81c1b30a 100644 --- a/backend/app/rest/api/admin.go +++ b/backend/app/rest/api/admin.go @@ -15,6 +15,7 @@ import ( "github.com/umputun/remark/backend/app/rest" "github.com/umputun/remark/backend/app/store" + "github.com/umputun/remark/backend/app/store/engine" ) // admin provides router for all requests available for admin users only @@ -29,6 +30,7 @@ type admin struct { type adminStore interface { Delete(locator store.Locator, commentID string, mode store.DeleteMode) error DeleteUser(siteID string, userID string, mode store.DeleteMode) error + DeleteUserDetail(siteID string, userID string, detail engine.UserDetail) error User(siteID, userID string, limit, skip int, user store.User) ([]store.Comment, error) IsBlocked(siteID string, userID string) bool SetBlock(siteID string, userID string, status bool, ttl time.Duration) error @@ -109,6 +111,12 @@ func (a *admin) deleteMeRequestCtrl(w http.ResponseWriter, r *http.Request) { return } + if err := a.dataService.DeleteUserDetail(claims.Audience, claims.User.ID, engine.UserEmail); err != nil { + code := parseError(err, rest.ErrInternal) + rest.SendErrorJSON(w, r, http.StatusBadRequest, err, "can't delete email for user", code) + return + } + if err = a.dataService.DeleteUser(claims.Audience, claims.User.ID, store.HardDelete); err != nil { rest.SendErrorJSON(w, r, http.StatusBadRequest, err, "can't delete user", rest.ErrNoAccess) return diff --git a/backend/app/rest/api/admin_test.go b/backend/app/rest/api/admin_test.go index 531b8279..1fe29b31 100644 --- a/backend/app/rest/api/admin_test.go +++ b/backend/app/rest/api/admin_test.go @@ -668,6 +668,14 @@ func TestAdmin_DeleteMeRequest(t *testing.T) { assert.NoError(t, err) assert.Equal(t, 1, len(comments), "a comment for user1") + email, err := srv.DataService.SetUserEmail("remark42", "user1", "test@example.org") + assert.NoError(t, err) + assert.Equal(t, "test@example.org", email, "new email for user1") + + email, err = srv.DataService.GetUserEmail("remark42", "user1") + assert.NoError(t, err) + assert.Equal(t, "test@example.org", email, "new email for user1 is readable") + claims := token.Claims{ SessionOnly: true, StandardClaims: jwt.StandardClaims{ @@ -703,6 +711,11 @@ func TestAdmin_DeleteMeRequest(t *testing.T) { _, err = srv.DataService.User("remark42", "user1", 0, 0, store.User{}) assert.EqualError(t, err, "no comments for user user1 in store") + + email, err = srv.DataService.GetUserEmail("remark42", "user1") + assert.NoError(t, err) + assert.Empty(t, email, "user1 email was deleted") + } func TestAdmin_DeleteMeRequestFailed(t *testing.T) {