add list of blocked users

This commit is contained in:
Umputun
2018-02-05 03:27:31 -06:00
parent 339ee71642
commit 3ff25d1c3c
6 changed files with 58 additions and 5 deletions
+8 -5
View File
@@ -209,11 +209,14 @@ Sort can be `time` or `score`. Supported sort order with prefix -/+, i.e. `-time
### Admin
- `DELETE /api/v1/admin/comment/{id}?site=site-id&url=post-url` - delete comment by `id`. _auth and admin required_
- `PUT /api/v1/admin/user/{userid}?site=site-id&block=1` - block or unblock user. _auth and admin required_
- `GET /api/v1/admin/export?site=side-id&mode=[stream|file]` - export all comments to json stream or gz file. _auth and admin required_
- `POST /api/v1/admin/import?site=side-id` - import comments from the backup. _auth and admin required_
- `PUT /api/v1/admin/pin/{id}?site=site-id&url=post-url&pin=1` - pin or unpin comment. _auth and admin required_
- `DELETE /api/v1/admin/comment/{id}?site=site-id&url=post-url` - delete comment by `id`.
- `PUT /api/v1/admin/user/{userid}?site=site-id&block=1` - block or unblock user.
- `GET api/v1/admin/blocked` - list of blocked user ids.
- `GET /api/v1/admin/export?site=side-id&mode=[stream|file]` - export all comments to json stream or gz file.
- `POST /api/v1/admin/import?site=side-id` - import comments from the backup.
- `PUT /api/v1/admin/pin/{id}?site=site-id&url=post-url&pin=1` - pin or unpin comment.
_all calls require auth and admin_
## Technical details
+12
View File
@@ -33,6 +33,7 @@ func (a *admin) routes() chi.Router {
router.Get("/export", a.exportCtrl)
router.Post("/import", a.importCtrl)
router.Put("/pin/{id}", a.setPinCtrl)
router.Get("/blocked", a.blockedUsersCtrl)
return router
}
@@ -67,6 +68,17 @@ func (a *admin) setBlockCtrl(w http.ResponseWriter, r *http.Request) {
render.JSON(w, r, JSON{"user_id": userID, "site_id": siteID, "block": blockStatus})
}
// GET /blocked?site=siteID - list blocked users
func (a *admin) blockedUsersCtrl(w http.ResponseWriter, r *http.Request) {
siteID := r.URL.Query().Get("site")
users, err := a.dataService.Blocked(siteID)
if err != nil {
common.SendErrorJSON(w, r, http.StatusBadRequest, err, "can't get blocked users")
return
}
render.JSON(w, r, users)
}
// PUT /pin/{id}?site=siteID&url=post-url&pin=1
// mark/unmark comment as a special
func (a *admin) setPinCtrl(w http.ResponseWriter, r *http.Request) {
+22
View File
@@ -311,6 +311,28 @@ func (b *BoltDB) IsBlocked(siteID string, userID string) (blocked bool) {
return blocked
}
// Blocked get lists of blocked users for given site
func (b *BoltDB) Blocked(siteID string) (userIDs []string, err error) {
userIDs = []string{}
bdb, err := b.db(siteID)
if err != nil {
return nil, err
}
err = bdb.View(func(tx *bolt.Tx) error {
bucket := tx.Bucket([]byte(blocksBucketName))
if bucket == nil {
return nil
}
return bucket.ForEach(func(k []byte, v []byte) error {
userIDs = append(userIDs, string(k))
return nil
})
})
return userIDs, err
}
// List returns list of buckets, which is list of all commented posts
func (b BoltDB) List(siteID string) (list []PostInfo, err error) {
+12
View File
@@ -127,7 +127,19 @@ func TestBoltDB_BlockUser(t *testing.T) {
assert.NoError(t, b.SetBlock("radio-t", "user1", false))
assert.False(t, b.IsBlocked("radio-t", "user1"), "user1 unblocked")
}
func TestBoltDB_BlockList(t *testing.T) {
defer os.Remove(testDb)
b := prep(t)
assert.NoError(t, b.SetBlock("radio-t", "user1", true))
assert.NoError(t, b.SetBlock("radio-t", "user2", true))
assert.NoError(t, b.SetBlock("radio-t", "user3", false))
ids, err := b.Blocked("radio-t")
assert.NoError(t, err)
assert.Equal(t, []string{"user1", "user2"}, ids)
}
func TestBoltDB_List(t *testing.T) {
+1
View File
@@ -30,6 +30,7 @@ type Admin interface {
Delete(locator Locator, commentID string) error // delete comment by id
SetBlock(siteID string, userID string, status bool) error // block or unblock user
IsBlocked(siteID string, userID string) bool // check if user blocked
Blocked(siteID string) (userIDs []string, err error) // get list of blocked users
}
func sortComments(comments []Comment, sortFld string) []Comment {
+3
View File
@@ -62,5 +62,8 @@ PUT {{host}}/api/v1/admin/user/grigorybakunov?site=remark&block=1
### unblock user
PUT {{host}}/api/v1/admin/user/grigorybakunov?site=remark&block=0
### list blocked user
PUT {{host}}/api/v1/admin/blocked?site=remark
### delete comment by id
DELETE {{host}}/api/v1/admin/comment/3665976683?site=remark&url=https://radio-t.com/p/2017/12/16/podcast-576/