@@ -280,6 +280,43 @@ func reqOrgMembership() macaron.Handler {
280
280
}
281
281
}
282
282
283
+ // reqTeamMembership user should be an team member, or a site admin
284
+ func reqTeamMembership () macaron.Handler {
285
+ return func (ctx * context.APIContext ) {
286
+ if ctx .User .IsAdmin {
287
+ return
288
+ }
289
+ if ctx .Org .Team == nil {
290
+ ctx .Error (500 , "" , "reqTeamMembership: unprepared context" )
291
+ return
292
+ }
293
+
294
+ var orgID = ctx .Org .Team .OrgID
295
+ isOwner , err := models .IsOrganizationOwner (orgID , ctx .User .ID )
296
+ if err != nil {
297
+ ctx .Error (500 , "IsOrganizationOwner" , err )
298
+ return
299
+ } else if isOwner {
300
+ return
301
+ }
302
+
303
+ if isTeamMember , err := models .IsTeamMember (orgID , ctx .Org .Team .ID , ctx .User .ID ); err != nil {
304
+ ctx .Error (500 , "IsTeamMember" , err )
305
+ return
306
+ } else if ! isTeamMember {
307
+ isOrgMember , err := models .IsOrganizationMember (orgID , ctx .User .ID )
308
+ if err != nil {
309
+ ctx .Error (500 , "IsOrganizationMember" , err )
310
+ } else if isOrgMember {
311
+ ctx .Error (403 , "" , "Must be a team member" )
312
+ } else {
313
+ ctx .Status (404 )
314
+ }
315
+ return
316
+ }
317
+ }
318
+ }
319
+
283
320
func reqOrgOwnership () macaron.Handler {
284
321
return func (ctx * context.APIContext ) {
285
322
var orgID int64
@@ -686,7 +723,7 @@ func RegisterRoutes(m *macaron.Macaron) {
686
723
Put (org .AddTeamRepository ).
687
724
Delete (org .RemoveTeamRepository )
688
725
})
689
- }, orgAssignment (false , true ), reqToken (), reqOrgMembership ())
726
+ }, orgAssignment (false , true ), reqToken (), reqTeamMembership ())
690
727
691
728
m .Any ("/*" , func (ctx * context.Context ) {
692
729
ctx .Error (404 )
0 commit comments