1
2
3
4
5
6 package github
7
8 import (
9 "context"
10 "fmt"
11 )
12
13
14 type Membership struct {
15 URL *string `json:"url,omitempty"`
16
17
18
19 State *string `json:"state,omitempty"`
20
21
22
23
24
25
26
27
28
29
30
31 Role *string `json:"role,omitempty"`
32
33
34 OrganizationURL *string `json:"organization_url,omitempty"`
35
36
37 Organization *Organization `json:"organization,omitempty"`
38
39
40 User *User `json:"user,omitempty"`
41 }
42
43 func (m Membership) String() string {
44 return Stringify(m)
45 }
46
47
48
49 type ListMembersOptions struct {
50
51
52 PublicOnly bool `url:"-"`
53
54
55
56 Filter string `url:"filter,omitempty"`
57
58
59
60
61
62
63
64
65 Role string `url:"role,omitempty"`
66
67 ListOptions
68 }
69
70
71
72
73
74
75
76 func (s *OrganizationsService) ListMembers(ctx context.Context, org string, opts *ListMembersOptions) ([]*User, *Response, error) {
77 var u string
78 if opts != nil && opts.PublicOnly {
79 u = fmt.Sprintf("orgs/%v/public_members", org)
80 } else {
81 u = fmt.Sprintf("orgs/%v/members", org)
82 }
83 u, err := addOptions(u, opts)
84 if err != nil {
85 return nil, nil, err
86 }
87
88 req, err := s.client.NewRequest("GET", u, nil)
89 if err != nil {
90 return nil, nil, err
91 }
92
93 var members []*User
94 resp, err := s.client.Do(ctx, req, &members)
95 if err != nil {
96 return nil, resp, err
97 }
98
99 return members, resp, nil
100 }
101
102
103
104
105 func (s *OrganizationsService) IsMember(ctx context.Context, org, user string) (bool, *Response, error) {
106 u := fmt.Sprintf("orgs/%v/members/%v", org, user)
107 req, err := s.client.NewRequest("GET", u, nil)
108 if err != nil {
109 return false, nil, err
110 }
111
112 resp, err := s.client.Do(ctx, req, nil)
113 member, err := parseBoolResponse(err)
114 return member, resp, err
115 }
116
117
118
119
120 func (s *OrganizationsService) IsPublicMember(ctx context.Context, org, user string) (bool, *Response, error) {
121 u := fmt.Sprintf("orgs/%v/public_members/%v", org, user)
122 req, err := s.client.NewRequest("GET", u, nil)
123 if err != nil {
124 return false, nil, err
125 }
126
127 resp, err := s.client.Do(ctx, req, nil)
128 member, err := parseBoolResponse(err)
129 return member, resp, err
130 }
131
132
133
134
135 func (s *OrganizationsService) RemoveMember(ctx context.Context, org, user string) (*Response, error) {
136 u := fmt.Sprintf("orgs/%v/members/%v", org, user)
137 req, err := s.client.NewRequest("DELETE", u, nil)
138 if err != nil {
139 return nil, err
140 }
141
142 return s.client.Do(ctx, req, nil)
143 }
144
145
146
147
148
149 func (s *OrganizationsService) PublicizeMembership(ctx context.Context, org, user string) (*Response, error) {
150 u := fmt.Sprintf("orgs/%v/public_members/%v", org, user)
151 req, err := s.client.NewRequest("PUT", u, nil)
152 if err != nil {
153 return nil, err
154 }
155
156 return s.client.Do(ctx, req, nil)
157 }
158
159
160
161
162 func (s *OrganizationsService) ConcealMembership(ctx context.Context, org, user string) (*Response, error) {
163 u := fmt.Sprintf("orgs/%v/public_members/%v", org, user)
164 req, err := s.client.NewRequest("DELETE", u, nil)
165 if err != nil {
166 return nil, err
167 }
168
169 return s.client.Do(ctx, req, nil)
170 }
171
172
173
174 type ListOrgMembershipsOptions struct {
175
176
177 State string `url:"state,omitempty"`
178
179 ListOptions
180 }
181
182
183
184
185 func (s *OrganizationsService) ListOrgMemberships(ctx context.Context, opts *ListOrgMembershipsOptions) ([]*Membership, *Response, error) {
186 u := "user/memberships/orgs"
187 u, err := addOptions(u, opts)
188 if err != nil {
189 return nil, nil, err
190 }
191
192 req, err := s.client.NewRequest("GET", u, nil)
193 if err != nil {
194 return nil, nil, err
195 }
196
197 var memberships []*Membership
198 resp, err := s.client.Do(ctx, req, &memberships)
199 if err != nil {
200 return nil, resp, err
201 }
202
203 return memberships, resp, nil
204 }
205
206
207
208
209
210
211
212 func (s *OrganizationsService) GetOrgMembership(ctx context.Context, user, org string) (*Membership, *Response, error) {
213 var u string
214 if user != "" {
215 u = fmt.Sprintf("orgs/%v/memberships/%v", org, user)
216 } else {
217 u = fmt.Sprintf("user/memberships/orgs/%v", org)
218 }
219
220 req, err := s.client.NewRequest("GET", u, nil)
221 if err != nil {
222 return nil, nil, err
223 }
224
225 membership := new(Membership)
226 resp, err := s.client.Do(ctx, req, membership)
227 if err != nil {
228 return nil, resp, err
229 }
230
231 return membership, resp, nil
232 }
233
234
235
236
237
238
239
240 func (s *OrganizationsService) EditOrgMembership(ctx context.Context, user, org string, membership *Membership) (*Membership, *Response, error) {
241 var u, method string
242 if user != "" {
243 u = fmt.Sprintf("orgs/%v/memberships/%v", org, user)
244 method = "PUT"
245 } else {
246 u = fmt.Sprintf("user/memberships/orgs/%v", org)
247 method = "PATCH"
248 }
249
250 req, err := s.client.NewRequest(method, u, membership)
251 if err != nil {
252 return nil, nil, err
253 }
254
255 m := new(Membership)
256 resp, err := s.client.Do(ctx, req, m)
257 if err != nil {
258 return nil, resp, err
259 }
260
261 return m, resp, nil
262 }
263
264
265
266
267
268 func (s *OrganizationsService) RemoveOrgMembership(ctx context.Context, user, org string) (*Response, error) {
269 u := fmt.Sprintf("orgs/%v/memberships/%v", org, user)
270 req, err := s.client.NewRequest("DELETE", u, nil)
271 if err != nil {
272 return nil, err
273 }
274
275 return s.client.Do(ctx, req, nil)
276 }
277
278
279
280
281 func (s *OrganizationsService) ListPendingOrgInvitations(ctx context.Context, org string, opts *ListOptions) ([]*Invitation, *Response, error) {
282 u := fmt.Sprintf("orgs/%v/invitations", org)
283 u, err := addOptions(u, opts)
284 if err != nil {
285 return nil, nil, err
286 }
287
288 req, err := s.client.NewRequest("GET", u, nil)
289 if err != nil {
290 return nil, nil, err
291 }
292
293 var pendingInvitations []*Invitation
294 resp, err := s.client.Do(ctx, req, &pendingInvitations)
295 if err != nil {
296 return nil, resp, err
297 }
298
299 return pendingInvitations, resp, nil
300 }
301
302
303
304 type CreateOrgInvitationOptions struct {
305
306 InviteeID *int64 `json:"invitee_id,omitempty"`
307
308
309 Email *string `json:"email,omitempty"`
310
311
312
313
314
315
316
317
318 Role *string `json:"role"`
319 TeamID []int64 `json:"team_ids"`
320 }
321
322
323
324
325
326
327 func (s *OrganizationsService) CreateOrgInvitation(ctx context.Context, org string, opts *CreateOrgInvitationOptions) (*Invitation, *Response, error) {
328 u := fmt.Sprintf("orgs/%v/invitations", org)
329
330 req, err := s.client.NewRequest("POST", u, opts)
331 if err != nil {
332 return nil, nil, err
333 }
334
335 var invitation *Invitation
336 resp, err := s.client.Do(ctx, req, &invitation)
337 if err != nil {
338 return nil, resp, err
339 }
340
341 return invitation, resp, nil
342 }
343
344
345
346
347
348 func (s *OrganizationsService) ListOrgInvitationTeams(ctx context.Context, org, invitationID string, opts *ListOptions) ([]*Team, *Response, error) {
349 u := fmt.Sprintf("orgs/%v/invitations/%v/teams", org, invitationID)
350 u, err := addOptions(u, opts)
351 if err != nil {
352 return nil, nil, err
353 }
354
355 req, err := s.client.NewRequest("GET", u, nil)
356 if err != nil {
357 return nil, nil, err
358 }
359
360 var orgInvitationTeams []*Team
361 resp, err := s.client.Do(ctx, req, &orgInvitationTeams)
362 if err != nil {
363 return nil, resp, err
364 }
365
366 return orgInvitationTeams, resp, nil
367 }
368
369
370
371
372 func (s *OrganizationsService) ListFailedOrgInvitations(ctx context.Context, org string, opts *ListOptions) ([]*Invitation, *Response, error) {
373 u := fmt.Sprintf("orgs/%v/failed_invitations", org)
374 u, err := addOptions(u, opts)
375 if err != nil {
376 return nil, nil, err
377 }
378
379 req, err := s.client.NewRequest("GET", u, nil)
380 if err != nil {
381 return nil, nil, err
382 }
383
384 var failedInvitations []*Invitation
385 resp, err := s.client.Do(ctx, req, &failedInvitations)
386 if err != nil {
387 return nil, resp, err
388 }
389
390 return failedInvitations, resp, nil
391 }
392
View as plain text