Skip to content

Commit 6db3dc7

Browse files
richmahnlafriks
authored andcommitted
Fixes #6881 - API users search fix (#6882)
1 parent d8b2ed6 commit 6db3dc7

File tree

4 files changed

+69
-2
lines changed

4 files changed

+69
-2
lines changed

integrations/api_admin_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,3 +129,18 @@ func TestAPIListUsers(t *testing.T) {
129129
numberOfUsers := models.GetCount(t, &models.User{}, "type = 0")
130130
assert.Equal(t, numberOfUsers, len(users))
131131
}
132+
133+
func TestAPIListUsersNotLoggedIn(t *testing.T) {
134+
prepareTestEnv(t)
135+
req := NewRequest(t, "GET", "/api/v1/admin/users")
136+
MakeRequest(t, req, http.StatusUnauthorized)
137+
}
138+
139+
func TestAPIListUsersNonAdmin(t *testing.T) {
140+
prepareTestEnv(t)
141+
nonAdminUsername := "user2"
142+
session := loginUser(t, nonAdminUsername)
143+
token := getTokenForLoggedInUser(t, session)
144+
req := NewRequestf(t, "GET", "/api/v1/admin/users?token=%s", token)
145+
session.MakeRequest(t, req, http.StatusForbidden)
146+
}

integrations/api_user_search_test.go

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
// Copyright 2019 The Gitea Authors. All rights reserved.
2+
// Use of this source code is governed by a MIT-style
3+
// license that can be found in the LICENSE file.package models
4+
5+
package integrations
6+
7+
import (
8+
"net/http"
9+
"testing"
10+
11+
api "code.gitea.io/sdk/gitea"
12+
13+
"github.com/stretchr/testify/assert"
14+
)
15+
16+
type SearchResults struct {
17+
OK bool `json:"ok"`
18+
Data []*api.User `json:"data"`
19+
}
20+
21+
func TestAPIUserSearchLoggedIn(t *testing.T) {
22+
prepareTestEnv(t)
23+
adminUsername := "user1"
24+
session := loginUser(t, adminUsername)
25+
token := getTokenForLoggedInUser(t, session)
26+
query := "user2"
27+
req := NewRequestf(t, "GET", "/api/v1/users/search?token=%s&q=%s", token, query)
28+
resp := session.MakeRequest(t, req, http.StatusOK)
29+
30+
var results SearchResults
31+
DecodeJSON(t, resp, &results)
32+
assert.NotEmpty(t, results.Data)
33+
for _, user := range results.Data {
34+
assert.Contains(t, user.UserName, query)
35+
assert.NotEmpty(t, user.Email)
36+
}
37+
}
38+
39+
func TestAPIUserSearchNotLoggedIn(t *testing.T) {
40+
prepareTestEnv(t)
41+
query := "user2"
42+
req := NewRequestf(t, "GET", "/api/v1/users/search?q=%s", query)
43+
resp := MakeRequest(t, req, http.StatusOK)
44+
45+
var results SearchResults
46+
DecodeJSON(t, resp, &results)
47+
assert.NotEmpty(t, results.Data)
48+
for _, user := range results.Data {
49+
assert.Contains(t, user.UserName, query)
50+
assert.Empty(t, user.Email)
51+
}
52+
}

routers/api/v1/admin/user.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ func GetAllUsers(ctx *context.APIContext) {
326326

327327
results := make([]*api.User, len(users))
328328
for i := range users {
329-
results[i] = convert.ToUser(users[i], ctx.IsSigned, ctx.User.IsAdmin)
329+
results[i] = convert.ToUser(users[i], ctx.IsSigned, ctx.User != nil && ctx.User.IsAdmin)
330330
}
331331

332332
ctx.JSON(200, &results)

routers/api/v1/user/user.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ func Search(ctx *context.APIContext) {
6767

6868
results := make([]*api.User, len(users))
6969
for i := range users {
70-
results[i] = convert.ToUser(users[i], ctx.IsSigned, ctx.User.IsAdmin)
70+
results[i] = convert.ToUser(users[i], ctx.IsSigned, ctx.User != nil && ctx.User.IsAdmin)
7171
}
7272

7373
ctx.JSON(200, map[string]interface{}{

0 commit comments

Comments
 (0)