@@ -10,11 +10,16 @@ import (
10
10
"code.gitea.io/gitea/models"
11
11
"code.gitea.io/gitea/modules/context"
12
12
"code.gitea.io/gitea/routers/api/v1/convert"
13
+ "code.gitea.io/gitea/routers/api/v1/user"
13
14
)
14
15
15
16
// ListTeams list all the teams of an organization
16
17
func ListTeams (ctx * context.APIContext ) {
17
18
org := ctx .Org .Organization
19
+ if ! org .IsOrgMember (ctx .User .ID ) {
20
+ ctx .Error (403 , "" , "Must be a member of the organization" )
21
+ return
22
+ }
18
23
if err := org .GetTeams (); err != nil {
19
24
ctx .Error (500 , "GetTeams" , err )
20
25
return
@@ -29,26 +34,20 @@ func ListTeams(ctx *context.APIContext) {
29
34
30
35
// GetTeam api for get a team
31
36
func GetTeam (ctx * context.APIContext ) {
32
- ctx .JSON (200 , convert .ToTeam (ctx .Org .Team ))
33
- }
34
-
35
- // GetTeamMembers api for get a team's members
36
- func GetTeamMembers (ctx * context.APIContext ) {
37
- team := ctx .Org .Team
38
- if err := team .GetMembers (); err != nil {
39
- ctx .Error (500 , "GetTeamMembers" , err )
37
+ if ! models .IsOrganizationMember (ctx .Org .Team .OrgID , ctx .User .ID ) {
38
+ ctx .Status (404 )
40
39
return
41
40
}
42
- members := make ([]* api.User , len (team .Members ))
43
- for i , member := range team .Members {
44
- members [i ] = member .APIFormat ()
45
- }
46
- ctx .JSON (200 , members )
41
+ ctx .JSON (200 , convert .ToTeam (ctx .Org .Team ))
47
42
}
48
43
49
44
// GetTeamRepos api for get a team's repos
50
45
func GetTeamRepos (ctx * context.APIContext ) {
51
46
team := ctx .Org .Team
47
+ if ! models .IsOrganizationMember (team .OrgID , ctx .User .ID ) {
48
+ ctx .Status (404 )
49
+ return
50
+ }
52
51
if err := team .GetRepositories (); err != nil {
53
52
ctx .Error (500 , "GetTeamRepos" , err )
54
53
}
@@ -63,3 +62,112 @@ func GetTeamRepos(ctx *context.APIContext) {
63
62
}
64
63
ctx .JSON (200 , repos )
65
64
}
65
+
66
+ // CreateTeam api for create a team
67
+ func CreateTeam (ctx * context.APIContext , form api.CreateTeamOption ) {
68
+ if ! ctx .Org .Organization .IsOrgMember (ctx .User .ID ) {
69
+ ctx .Error (403 , "" , "Must be an organization member" )
70
+ }
71
+ team := & models.Team {
72
+ OrgID : ctx .Org .Organization .ID ,
73
+ Name : form .Name ,
74
+ Description : form .Description ,
75
+ Authorize : models .ParseAccessMode (form .Permission ),
76
+ }
77
+ if err := models .NewTeam (team ); err != nil {
78
+ if models .IsErrTeamAlreadyExist (err ) {
79
+ ctx .Error (422 , "" , err )
80
+ } else {
81
+ ctx .Error (500 , "NewTeam" , err )
82
+ }
83
+ return
84
+ }
85
+
86
+ ctx .JSON (201 , convert .ToTeam (team ))
87
+ }
88
+
89
+ // EditTeam api for edit a team
90
+ func EditTeam (ctx * context.APIContext , form api.EditTeamOption ) {
91
+ if ! ctx .User .IsUserOrgOwner (ctx .Org .Team .OrgID ) {
92
+ ctx .Error (403 , "" , "Must be an organization owner" )
93
+ return
94
+ }
95
+ team := & models.Team {
96
+ ID : ctx .Org .Team .ID ,
97
+ OrgID : ctx .Org .Team .OrgID ,
98
+ Name : form .Name ,
99
+ Description : form .Description ,
100
+ Authorize : models .ParseAccessMode (form .Permission ),
101
+ }
102
+ if err := models .UpdateTeam (team , true ); err != nil {
103
+ ctx .Error (500 , "EditTeam" , err )
104
+ return
105
+ }
106
+ ctx .JSON (200 , convert .ToTeam (team ))
107
+ }
108
+
109
+ // DeleteTeam api for delete a team
110
+ func DeleteTeam (ctx * context.APIContext ) {
111
+ if ! ctx .User .IsUserOrgOwner (ctx .Org .Team .OrgID ) {
112
+ ctx .Error (403 , "" , "Must be an organization owner" )
113
+ return
114
+ }
115
+ if err := models .DeleteTeam (ctx .Org .Team ); err != nil {
116
+ ctx .Error (500 , "DeleteTeam" , err )
117
+ return
118
+ }
119
+ ctx .Status (204 )
120
+ }
121
+
122
+ // GetTeamMembers api for get a team's members
123
+ func GetTeamMembers (ctx * context.APIContext ) {
124
+ if ! models .IsOrganizationMember (ctx .Org .Team .OrgID , ctx .User .ID ) {
125
+ ctx .Status (404 )
126
+ return
127
+ }
128
+ team := ctx .Org .Team
129
+ if err := team .GetMembers (); err != nil {
130
+ ctx .Error (500 , "GetTeamMembers" , err )
131
+ return
132
+ }
133
+ members := make ([]* api.User , len (team .Members ))
134
+ for i , member := range team .Members {
135
+ members [i ] = member .APIFormat ()
136
+ }
137
+ ctx .JSON (200 , members )
138
+ }
139
+
140
+ // AddTeamMember api for add a member to a team
141
+ func AddTeamMember (ctx * context.APIContext ) {
142
+ if ! ctx .User .IsUserOrgOwner (ctx .Org .Team .OrgID ) {
143
+ ctx .Error (403 , "" , "Must be an organization owner" )
144
+ return
145
+ }
146
+ u := user .GetUserByParams (ctx )
147
+ if ctx .Written () {
148
+ return
149
+ }
150
+ if err := ctx .Org .Team .AddMember (u .ID ); err != nil {
151
+ ctx .Error (500 , "AddMember" , err )
152
+ return
153
+ }
154
+ ctx .Status (204 )
155
+ }
156
+
157
+ // RemoveTeamMember api for remove one member from a team
158
+ func RemoveTeamMember (ctx * context.APIContext ) {
159
+ if ! ctx .User .IsUserOrgOwner (ctx .Org .Team .OrgID ) {
160
+ ctx .Error (403 , "" , "Must be an organization owner" )
161
+ return
162
+ }
163
+ u := user .GetUserByParams (ctx )
164
+ if ctx .Written () {
165
+ return
166
+ }
167
+
168
+ if err := ctx .Org .Team .RemoveMember (u .ID ); err != nil {
169
+ ctx .Error (500 , "RemoveMember" , err )
170
+ return
171
+ }
172
+ ctx .Status (204 )
173
+ }
0 commit comments