Skip to content

Commit ebecd5a

Browse files
Move API to /orgs/:org/teams/search
Signed-off-by: David Svantesson <[email protected]>
1 parent 62c798f commit ebecd5a

File tree

3 files changed

+15
-53
lines changed

3 files changed

+15
-53
lines changed

models/org_team.go

+2-11
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ type SearchTeamOptions struct {
4545
Limit int
4646
}
4747

48-
// SearchTeam search for teams
48+
// SearchTeam search for teams. Caller is responsible to check permissions.
4949
func SearchTeam(opts *SearchTeamOptions) ([]*Team, int64, error) {
5050
if opts.Limit <= 0 {
5151
opts.Limit = 10
@@ -68,16 +68,7 @@ func SearchTeam(opts *SearchTeamOptions) ([]*Team, int64, error) {
6868
cond = cond.And(keywordCond)
6969
}
7070

71-
if opts.OrgID > 0 {
72-
cond = cond.And(builder.Eq{"org_id": opts.OrgID})
73-
} else if !opts.UserIsAdmin {
74-
// Limit search to organizations where user is member
75-
cond = cond.And(
76-
builder.In("org_id", builder.Select("`org_user`.org_id").
77-
From("org_user").
78-
Where(builder.Eq{"`org_user`.uid": opts.UserID}).
79-
Join("INNER", "org_user", "`org_user`.org_id = `team`.org_id")))
80-
}
71+
cond = cond.And(builder.Eq{"org_id": opts.OrgID})
8172

8273
sess := x.NewSession()
8374
defer sess.Close()

routers/api/v1/api.go

+5-6
Original file line numberDiff line numberDiff line change
@@ -802,8 +802,11 @@ func RegisterRoutes(m *macaron.Macaron) {
802802
Put(reqToken(), reqOrgMembership(), org.PublicizeMember).
803803
Delete(reqToken(), reqOrgMembership(), org.ConcealMember)
804804
})
805-
m.Combo("/teams", reqToken(), reqOrgMembership()).Get(org.ListTeams).
806-
Post(reqOrgOwnership(), bind(api.CreateTeamOption{}), org.CreateTeam)
805+
m.Group("/teams", func() {
806+
m.Combo("", reqToken()).Get(org.ListTeams).
807+
Post(reqOrgOwnership(), bind(api.CreateTeamOption{}), org.CreateTeam)
808+
m.Post("/search", org.SearchTeam)
809+
}, reqOrgMembership())
807810
m.Group("/hooks", func() {
808811
m.Combo("").Get(org.ListHooks).
809812
Post(bind(api.CreateHookOption{}), org.CreateHook)
@@ -831,10 +834,6 @@ func RegisterRoutes(m *macaron.Macaron) {
831834
})
832835
}, orgAssignment(false, true), reqToken(), reqTeamMembership())
833836

834-
m.Group("/teams", func() {
835-
m.Get("/search", org.SearchTeam)
836-
})
837-
838837
m.Any("/*", func(ctx *context.APIContext) {
839838
ctx.NotFound()
840839
})

routers/api/v1/org/team.go

+8-36
Original file line numberDiff line numberDiff line change
@@ -500,23 +500,22 @@ func RemoveTeamRepository(ctx *context.APIContext) {
500500

501501
// SearchTeam api for searching teams
502502
func SearchTeam(ctx *context.APIContext) {
503-
// swagger:operation GET /teams/search organization teamSearch
503+
// swagger:operation GET /orgs/{org}/teams/search organization teamSearch
504504
// ---
505-
// summary: Search for teams
505+
// summary: Search for teams within organization
506506
// produces:
507507
// - application/json
508508
// parameters:
509+
// - name: org
510+
// in: path
511+
// description: name of the organization
512+
// type: string
513+
// required: true
509514
// - name: q
510515
// in: query
511516
// description: keywords to search
512517
// required: true
513518
// type: string
514-
// - name: org_id
515-
// in: query
516-
// description: search only teams within organization
517-
// type: integer
518-
// format: int64
519-
// required: false
520519
// - name: inclDesc
521520
// in: query
522521
// description: include search within team description (defaults to true)
@@ -541,22 +540,11 @@ func SearchTeam(ctx *context.APIContext) {
541540
UserID: ctx.Data["SignedUserID"].(int64),
542541
UserIsAdmin: ctx.IsUserSiteAdmin(),
543542
Keyword: strings.Trim(ctx.Query("q"), " "),
544-
OrgID: ctx.QueryInt64("org_id"),
543+
OrgID: ctx.Org.Organization.ID,
545544
IncludeDesc: (ctx.Query("inclDesc") == "" || ctx.QueryBool("inclDesc")),
546545
Limit: ctx.QueryInt("limit"),
547546
}
548547

549-
// If searching in a specific organization, require organization membership
550-
if opts.OrgID > 0 {
551-
if isMember, err := models.IsOrganizationMember(opts.OrgID, opts.UserID); err != nil {
552-
ctx.Error(500, "IsOrganizationMember", err)
553-
return
554-
} else if !isMember && !ctx.IsUserSiteAdmin() {
555-
ctx.Error(403, "", "Must be an organization member")
556-
return
557-
}
558-
}
559-
560548
teams, _, err := models.SearchTeam(opts)
561549
if err != nil {
562550
ctx.JSON(500, map[string]interface{}{
@@ -567,28 +555,12 @@ func SearchTeam(ctx *context.APIContext) {
567555
}
568556

569557
apiTeams := make([]*api.Team, len(teams))
570-
cache := make(map[int64]*api.Organization)
571558
for i := range teams {
572559
if err := teams[i].GetUnits(); err != nil {
573560
ctx.Error(500, "GetUnits", err)
574561
return
575562
}
576563
apiTeams[i] = convert.ToTeam(teams[i])
577-
578-
if opts.OrgID <= 0 {
579-
apiOrg, ok := cache[teams[i].OrgID]
580-
if !ok {
581-
org, err := models.GetUserByID(teams[i].OrgID)
582-
if err != nil {
583-
ctx.Error(500, "GetUserByID", err)
584-
return
585-
}
586-
apiOrg = convert.ToOrganization(org)
587-
cache[teams[i].OrgID] = apiOrg
588-
}
589-
apiTeams[i] = convert.ToTeam(teams[i])
590-
apiTeams[i].Organization = apiOrg
591-
}
592564
}
593565

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

0 commit comments

Comments
 (0)