1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package gitlab
18
19 import (
20 "fmt"
21 "net/http"
22 "time"
23 )
24
25
26
27
28
29 type GroupMembersService struct {
30 client *Client
31 }
32
33
34
35
36
37
38 type GroupMemberSAMLIdentity struct {
39 ExternUID string `json:"extern_uid"`
40 Provider string `json:"provider"`
41 SAMLProviderID int `json:"saml_provider_id"`
42 }
43
44
45
46
47 type GroupMember struct {
48 ID int `json:"id"`
49 Username string `json:"username"`
50 Name string `json:"name"`
51 State string `json:"state"`
52 AvatarURL string `json:"avatar_url"`
53 WebURL string `json:"web_url"`
54 CreatedAt *time.Time `json:"created_at"`
55 ExpiresAt *ISOTime `json:"expires_at"`
56 AccessLevel AccessLevelValue `json:"access_level"`
57 Email string `json:"email,omitempty"`
58 GroupSAMLIdentity *GroupMemberSAMLIdentity `json:"group_saml_identity"`
59 MemberRole *MemberRole `json:"member_role"`
60 }
61
62
63
64
65
66
67 type ListGroupMembersOptions struct {
68 ListOptions
69 Query *string `url:"query,omitempty" json:"query,omitempty"`
70 UserIDs *[]int `url:"user_ids[],omitempty" json:"user_ids,omitempty"`
71 }
72
73
74
75
76
77
78 func (s *GroupsService) ListGroupMembers(gid interface{}, opt *ListGroupMembersOptions, options ...RequestOptionFunc) ([]*GroupMember, *Response, error) {
79 group, err := parseID(gid)
80 if err != nil {
81 return nil, nil, err
82 }
83 u := fmt.Sprintf("groups/%s/members", PathEscape(group))
84
85 req, err := s.client.NewRequest(http.MethodGet, u, opt, options)
86 if err != nil {
87 return nil, nil, err
88 }
89
90 var gm []*GroupMember
91 resp, err := s.client.Do(req, &gm)
92 if err != nil {
93 return nil, resp, err
94 }
95
96 return gm, resp, nil
97 }
98
99
100
101
102
103
104 func (s *GroupsService) ListAllGroupMembers(gid interface{}, opt *ListGroupMembersOptions, options ...RequestOptionFunc) ([]*GroupMember, *Response, error) {
105 group, err := parseID(gid)
106 if err != nil {
107 return nil, nil, err
108 }
109 u := fmt.Sprintf("groups/%s/members/all", PathEscape(group))
110
111 req, err := s.client.NewRequest(http.MethodGet, u, opt, options)
112 if err != nil {
113 return nil, nil, err
114 }
115
116 var gm []*GroupMember
117 resp, err := s.client.Do(req, &gm)
118 if err != nil {
119 return nil, resp, err
120 }
121
122 return gm, resp, nil
123 }
124
125
126
127
128
129 type AddGroupMemberOptions struct {
130 UserID *int `url:"user_id,omitempty" json:"user_id,omitempty"`
131 AccessLevel *AccessLevelValue `url:"access_level,omitempty" json:"access_level,omitempty"`
132 ExpiresAt *string `url:"expires_at,omitempty" json:"expires_at"`
133 MemberRoleID *int `url:"member_role_id,omitempty" json:"member_role_id,omitempty"`
134 }
135
136
137
138
139
140 func (s *GroupMembersService) GetGroupMember(gid interface{}, user int, options ...RequestOptionFunc) (*GroupMember, *Response, error) {
141 group, err := parseID(gid)
142 if err != nil {
143 return nil, nil, err
144 }
145 u := fmt.Sprintf("groups/%s/members/%d", PathEscape(group), user)
146
147 req, err := s.client.NewRequest(http.MethodGet, u, nil, options)
148 if err != nil {
149 return nil, nil, err
150 }
151
152 gm := new(GroupMember)
153 resp, err := s.client.Do(req, gm)
154 if err != nil {
155 return nil, resp, err
156 }
157
158 return gm, resp, nil
159 }
160
161
162
163
164 type BillableGroupMember struct {
165 ID int `json:"id"`
166 Username string `json:"username"`
167 Name string `json:"name"`
168 State string `json:"state"`
169 AvatarURL string `json:"avatar_url"`
170 WebURL string `json:"web_url"`
171 Email string `json:"email"`
172 LastActivityOn *ISOTime `json:"last_activity_on"`
173 MembershipType string `json:"membership_type"`
174 Removable bool `json:"removable"`
175 CreatedAt *time.Time `json:"created_at"`
176 IsLastOwner bool `json:"is_last_owner"`
177 LastLoginAt *time.Time `json:"last_login_at"`
178 }
179
180
181
182
183
184 type ListBillableGroupMembersOptions struct {
185 ListOptions
186 Search *string `url:"search,omitempty" json:"search,omitempty"`
187 Sort *string `url:"sort,omitempty" json:"sort,omitempty"`
188 }
189
190
191
192
193
194
195 func (s *GroupsService) ListBillableGroupMembers(gid interface{}, opt *ListBillableGroupMembersOptions, options ...RequestOptionFunc) ([]*BillableGroupMember, *Response, error) {
196 group, err := parseID(gid)
197 if err != nil {
198 return nil, nil, err
199 }
200 u := fmt.Sprintf("groups/%s/billable_members", PathEscape(group))
201
202 req, err := s.client.NewRequest(http.MethodGet, u, opt, options)
203 if err != nil {
204 return nil, nil, err
205 }
206
207 var bgm []*BillableGroupMember
208 resp, err := s.client.Do(req, &bgm)
209 if err != nil {
210 return nil, resp, err
211 }
212
213 return bgm, resp, nil
214 }
215
216
217
218
219
220 func (s *GroupsService) RemoveBillableGroupMember(gid interface{}, user int, options ...RequestOptionFunc) (*Response, error) {
221 group, err := parseID(gid)
222 if err != nil {
223 return nil, err
224 }
225 u := fmt.Sprintf("groups/%s/billable_members/%d", PathEscape(group), user)
226
227 req, err := s.client.NewRequest(http.MethodDelete, u, nil, options)
228 if err != nil {
229 return nil, err
230 }
231
232 return s.client.Do(req, nil)
233 }
234
235
236
237
238
239 func (s *GroupMembersService) AddGroupMember(gid interface{}, opt *AddGroupMemberOptions, options ...RequestOptionFunc) (*GroupMember, *Response, error) {
240 group, err := parseID(gid)
241 if err != nil {
242 return nil, nil, err
243 }
244 u := fmt.Sprintf("groups/%s/members", PathEscape(group))
245
246 req, err := s.client.NewRequest(http.MethodPost, u, opt, options)
247 if err != nil {
248 return nil, nil, err
249 }
250
251 gm := new(GroupMember)
252 resp, err := s.client.Do(req, gm)
253 if err != nil {
254 return nil, resp, err
255 }
256
257 return gm, resp, nil
258 }
259
260
261
262
263
264 func (s *GroupMembersService) ShareWithGroup(gid interface{}, opt *ShareWithGroupOptions, options ...RequestOptionFunc) (*Group, *Response, error) {
265 group, err := parseID(gid)
266 if err != nil {
267 return nil, nil, err
268 }
269 u := fmt.Sprintf("groups/%s/share", PathEscape(group))
270
271 req, err := s.client.NewRequest(http.MethodPost, u, opt, options)
272 if err != nil {
273 return nil, nil, err
274 }
275
276 g := new(Group)
277 resp, err := s.client.Do(req, g)
278 if err != nil {
279 return nil, resp, err
280 }
281
282 return g, resp, nil
283 }
284
285
286
287
288
289 func (s *GroupMembersService) DeleteShareWithGroup(gid interface{}, groupID int, options ...RequestOptionFunc) (*Response, error) {
290 group, err := parseID(gid)
291 if err != nil {
292 return nil, err
293 }
294 u := fmt.Sprintf("groups/%s/share/%d", PathEscape(group), groupID)
295
296 req, err := s.client.NewRequest(http.MethodDelete, u, nil, options)
297 if err != nil {
298 return nil, err
299 }
300
301 return s.client.Do(req, nil)
302 }
303
304
305
306
307
308
309 type EditGroupMemberOptions struct {
310 AccessLevel *AccessLevelValue `url:"access_level,omitempty" json:"access_level,omitempty"`
311 ExpiresAt *string `url:"expires_at,omitempty" json:"expires_at,omitempty"`
312 MemberRoleID *int `url:"member_role_id,omitempty" json:"member_role_id,omitempty"`
313 }
314
315
316
317
318
319 func (s *GroupMembersService) EditGroupMember(gid interface{}, user int, opt *EditGroupMemberOptions, options ...RequestOptionFunc) (*GroupMember, *Response, error) {
320 group, err := parseID(gid)
321 if err != nil {
322 return nil, nil, err
323 }
324 u := fmt.Sprintf("groups/%s/members/%d", PathEscape(group), user)
325
326 req, err := s.client.NewRequest(http.MethodPut, u, opt, options)
327 if err != nil {
328 return nil, nil, err
329 }
330
331 gm := new(GroupMember)
332 resp, err := s.client.Do(req, gm)
333 if err != nil {
334 return nil, resp, err
335 }
336
337 return gm, resp, nil
338 }
339
340
341
342
343 type RemoveGroupMemberOptions struct {
344 SkipSubresources *bool `url:"skip_subresources,omitempty" json:"skip_subresources,omitempty"`
345 UnassignIssuables *bool `url:"unassign_issuables,omitempty" json:"unassign_issuables,omitempty"`
346 }
347
348
349
350
351
352 func (s *GroupMembersService) RemoveGroupMember(gid interface{}, user int, opt *RemoveGroupMemberOptions, options ...RequestOptionFunc) (*Response, error) {
353 group, err := parseID(gid)
354 if err != nil {
355 return nil, err
356 }
357 u := fmt.Sprintf("groups/%s/members/%d", PathEscape(group), user)
358
359 req, err := s.client.NewRequest(http.MethodDelete, u, opt, options)
360 if err != nil {
361 return nil, err
362 }
363
364 return s.client.Do(req, nil)
365 }
366
View as plain text