From 2729fe35fb1139d8b2b2a0564e4bffe6cd345aad Mon Sep 17 00:00:00 2001 From: Umputun Date: Fri, 22 Jun 2018 15:53:53 -0500 Subject: [PATCH] add GetUserInfo controller to auth --- app/rest/api/admin.go | 17 +++++++++++++++++ app/rest/api/admin_test.go | 28 ++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/app/rest/api/admin.go b/app/rest/api/admin.go index 8c2c5a7f..7b3a234e 100644 --- a/app/rest/api/admin.go +++ b/app/rest/api/admin.go @@ -35,6 +35,7 @@ func (a *admin) routes(middlewares ...func(http.Handler) http.Handler) chi.Route router.Delete("/comment/{id}", a.deleteCommentCtrl) router.Put("/user/{userid}", a.setBlockCtrl) router.Delete("/user/{userid}", a.deleteUserCtrl) + router.Get("/user/{userid}", a.getUserInfoCtrl) router.Get("/deleteme", a.deleteMeRequestCtrl) router.Put("/verify/{userid}", a.setVerifyCtrl) router.Get("/export", a.exportCtrl) @@ -77,6 +78,22 @@ func (a *admin) deleteUserCtrl(w http.ResponseWriter, r *http.Request) { render.JSON(w, r, JSON{"user_id": userID, "site_id": siteID}) } +// GET /user/{userid}?site=side-id - get user info for requested userid +func (a *admin) getUserInfoCtrl(w http.ResponseWriter, r *http.Request) { + + userID := chi.URLParam(r, "userid") + siteID := r.URL.Query().Get("site") + log.Printf("[INFO] get user info for %s, site %s", userID, siteID) + + ucomments, err := a.dataService.User(siteID, userID, 1, 0) + if err != nil || len(ucomments) == 0 { + rest.SendErrorJSON(w, r, http.StatusBadRequest, err, "can't get user info") + return + } + render.Status(r, http.StatusOK) + render.JSON(w, r, ucomments[0].User) +} + // GET /deleteme?token=jwt - delete all user comments by user's request. Gets info about deleted used from provided token // request made GET to allow direct click from the email sent by user func (a *admin) deleteMeRequestCtrl(w http.ResponseWriter, r *http.Request) { diff --git a/app/rest/api/admin_test.go b/app/rest/api/admin_test.go index b9ed1d33..79f31e2e 100644 --- a/app/rest/api/admin_test.go +++ b/app/rest/api/admin_test.go @@ -537,5 +537,33 @@ func TestAdmin_DeleteMeRequestFailed(t *testing.T) { resp, err = client.Do(req) assert.Nil(t, err) assert.Equal(t, 400, resp.StatusCode, resp.Status) +} +func TestAdmin_GetUserInfo(t *testing.T) { + srv, ts := prep(t) + assert.NotNil(t, srv) + defer cleanup(ts) + + c1 := store.Comment{Text: "test test #1", Locator: store.Locator{SiteID: "radio-t", + URL: "https://radio-t.com/blah"}, User: store.User{Name: "user1 name", ID: "user1"}} + c2 := store.Comment{Text: "test test #2", ParentID: "p1", Locator: store.Locator{SiteID: "radio-t", + URL: "https://radio-t.com/blah"}, User: store.User{Name: "user2", ID: "user2"}} + + _, err := srv.DataService.Create(c1) + assert.Nil(t, err) + _, err = srv.DataService.Create(c2) + assert.Nil(t, err) + + body, code := getWithAuth(t, fmt.Sprintf("%s/api/v1/admin/user/user1?site=radio-t&url=https://radio-t.com/blah", ts.URL)) + assert.Equal(t, 200, code) + u := store.User{} + err = json.Unmarshal([]byte(body), &u) + assert.Nil(t, err) + assert.Equal(t, store.User{Name: "user1 name", ID: "user1", Picture: "", IP: "", Admin: false, Blocked: false, Verified: false}, u) + + _, code = get(t, fmt.Sprintf("%s/api/v1/admin/user/user1?site=radio-t&url=https://radio-t.com/blah", ts.URL)) + assert.Equal(t, 401, code, "no auth") + + _, code = getWithAuth(t, fmt.Sprintf("%s/api/v1/admin/user/userX?site=radio-t&url=https://radio-t.com/blah", ts.URL)) + assert.Equal(t, 400, code, "no info about user") }