access_requests.go

  1package gitlab
  2
  3import (
  4	"fmt"
  5	"time"
  6)
  7
  8// AccessRequest represents a access request for a group or project.
  9//
 10// GitLab API docs:
 11// https://docs.gitlab.com/ce/api/access_requests.html
 12type AccessRequest struct {
 13	ID          int              `json:"id"`
 14	Username    string           `json:"username"`
 15	Name        string           `json:"name"`
 16	State       string           `json:"state"`
 17	CreatedAt   *time.Time       `json:"created_at"`
 18	RequestedAt *time.Time       `json:"requested_at"`
 19	AccessLevel AccessLevelValue `json:"access_level"`
 20}
 21
 22// AccessRequestsService handles communication with the project/group
 23// access requests related methods of the GitLab API.
 24//
 25// GitLab API docs: https://docs.gitlab.com/ce/api/access_requests.html
 26type AccessRequestsService struct {
 27	client *Client
 28}
 29
 30// ListAccessRequestsOptions represents the available
 31// ListProjectAccessRequests() or ListGroupAccessRequests() options.
 32//
 33// GitLab API docs:
 34// https://docs.gitlab.com/ce/api/access_requests.html#list-access-requests-for-a-group-or-project
 35type ListAccessRequestsOptions ListOptions
 36
 37// ListProjectAccessRequests gets a list of access requests
 38// viewable by the authenticated user.
 39//
 40// GitLab API docs:
 41// https://docs.gitlab.com/ce/api/access_requests.html#list-access-requests-for-a-group-or-project
 42func (s *AccessRequestsService) ListProjectAccessRequests(pid interface{}, opt *ListAccessRequestsOptions, options ...OptionFunc) ([]*AccessRequest, *Response, error) {
 43	project, err := parseID(pid)
 44	if err != nil {
 45		return nil, nil, err
 46	}
 47	u := fmt.Sprintf("projects/%s/access_requests", pathEscape(project))
 48
 49	req, err := s.client.NewRequest("GET", u, opt, options)
 50	if err != nil {
 51		return nil, nil, err
 52	}
 53
 54	var ars []*AccessRequest
 55	resp, err := s.client.Do(req, &ars)
 56	if err != nil {
 57		return nil, resp, err
 58	}
 59
 60	return ars, resp, err
 61}
 62
 63// ListGroupAccessRequests gets a list of access requests
 64// viewable by the authenticated user.
 65//
 66// GitLab API docs:
 67// https://docs.gitlab.com/ce/api/access_requests.html#list-access-requests-for-a-group-or-project
 68func (s *AccessRequestsService) ListGroupAccessRequests(gid interface{}, opt *ListAccessRequestsOptions, options ...OptionFunc) ([]*AccessRequest, *Response, error) {
 69	group, err := parseID(gid)
 70	if err != nil {
 71		return nil, nil, err
 72	}
 73	u := fmt.Sprintf("groups/%s/access_requests", pathEscape(group))
 74
 75	req, err := s.client.NewRequest("GET", u, opt, options)
 76	if err != nil {
 77		return nil, nil, err
 78	}
 79
 80	var ars []*AccessRequest
 81	resp, err := s.client.Do(req, &ars)
 82	if err != nil {
 83		return nil, resp, err
 84	}
 85
 86	return ars, resp, err
 87}
 88
 89// RequestProjectAccess requests access for the authenticated user
 90// to a group or project.
 91//
 92// GitLab API docs:
 93// https://docs.gitlab.com/ce/api/access_requests.html#request-access-to-a-group-or-project
 94func (s *AccessRequestsService) RequestProjectAccess(pid interface{}, options ...OptionFunc) (*AccessRequest, *Response, error) {
 95	project, err := parseID(pid)
 96	if err != nil {
 97		return nil, nil, err
 98	}
 99	u := fmt.Sprintf("projects/%s/access_requests", pathEscape(project))
100
101	req, err := s.client.NewRequest("POST", u, nil, options)
102	if err != nil {
103		return nil, nil, err
104	}
105
106	ar := new(AccessRequest)
107	resp, err := s.client.Do(req, ar)
108	if err != nil {
109		return nil, resp, err
110	}
111
112	return ar, resp, err
113}
114
115// RequestGroupAccess requests access for the authenticated user
116// to a group or project.
117//
118// GitLab API docs:
119// https://docs.gitlab.com/ce/api/access_requests.html#request-access-to-a-group-or-project
120func (s *AccessRequestsService) RequestGroupAccess(gid interface{}, options ...OptionFunc) (*AccessRequest, *Response, error) {
121	group, err := parseID(gid)
122	if err != nil {
123		return nil, nil, err
124	}
125	u := fmt.Sprintf("groups/%s/access_requests", pathEscape(group))
126
127	req, err := s.client.NewRequest("POST", u, nil, options)
128	if err != nil {
129		return nil, nil, err
130	}
131
132	ar := new(AccessRequest)
133	resp, err := s.client.Do(req, ar)
134	if err != nil {
135		return nil, resp, err
136	}
137
138	return ar, resp, err
139}
140
141// ApproveAccessRequestOptions represents the available
142// ApproveProjectAccessRequest() and ApproveGroupAccessRequest() options.
143//
144// GitLab API docs:
145// https://docs.gitlab.com/ce/api/access_requests.html#approve-an-access-request
146type ApproveAccessRequestOptions struct {
147	AccessLevel *AccessLevelValue `url:"access_level,omitempty" json:"access_level,omitempty"`
148}
149
150// ApproveProjectAccessRequest approves an access request for the given user.
151//
152// GitLab API docs:
153// https://docs.gitlab.com/ce/api/access_requests.html#approve-an-access-request
154func (s *AccessRequestsService) ApproveProjectAccessRequest(pid interface{}, user int, opt *ApproveAccessRequestOptions, options ...OptionFunc) (*AccessRequest, *Response, error) {
155	project, err := parseID(pid)
156	if err != nil {
157		return nil, nil, err
158	}
159	u := fmt.Sprintf("projects/%s/access_requests/%d/approve", pathEscape(project), user)
160
161	req, err := s.client.NewRequest("PUT", u, opt, options)
162	if err != nil {
163		return nil, nil, err
164	}
165
166	ar := new(AccessRequest)
167	resp, err := s.client.Do(req, ar)
168	if err != nil {
169		return nil, resp, err
170	}
171
172	return ar, resp, err
173}
174
175// ApproveGroupAccessRequest approves an access request for the given user.
176//
177// GitLab API docs:
178// https://docs.gitlab.com/ce/api/access_requests.html#approve-an-access-request
179func (s *AccessRequestsService) ApproveGroupAccessRequest(gid interface{}, user int, opt *ApproveAccessRequestOptions, options ...OptionFunc) (*AccessRequest, *Response, error) {
180	group, err := parseID(gid)
181	if err != nil {
182		return nil, nil, err
183	}
184	u := fmt.Sprintf("groups/%s/access_requests/%d/approve", pathEscape(group), user)
185
186	req, err := s.client.NewRequest("PUT", u, opt, options)
187	if err != nil {
188		return nil, nil, err
189	}
190
191	ar := new(AccessRequest)
192	resp, err := s.client.Do(req, ar)
193	if err != nil {
194		return nil, resp, err
195	}
196
197	return ar, resp, err
198}
199
200// DenyProjectAccessRequest denies an access request for the given user.
201//
202// GitLab API docs:
203// https://docs.gitlab.com/ce/api/access_requests.html#deny-an-access-request
204func (s *AccessRequestsService) DenyProjectAccessRequest(pid interface{}, user int, options ...OptionFunc) (*Response, error) {
205	project, err := parseID(pid)
206	if err != nil {
207		return nil, err
208	}
209	u := fmt.Sprintf("projects/%s/access_requests/%d", pathEscape(project), user)
210
211	req, err := s.client.NewRequest("DELETE", u, nil, options)
212	if err != nil {
213		return nil, err
214	}
215
216	return s.client.Do(req, nil)
217}
218
219// DenyGroupAccessRequest denies an access request for the given user.
220//
221// GitLab API docs:
222// https://docs.gitlab.com/ce/api/access_requests.html#deny-an-access-request
223func (s *AccessRequestsService) DenyGroupAccessRequest(gid interface{}, user int, options ...OptionFunc) (*Response, error) {
224	group, err := parseID(gid)
225	if err != nil {
226		return nil, err
227	}
228	u := fmt.Sprintf("groups/%s/access_requests/%d", pathEscape(group), user)
229
230	req, err := s.client.NewRequest("DELETE", u, nil, options)
231	if err != nil {
232		return nil, err
233	}
234
235	return s.client.Do(req, nil)
236}