access_requests.go 7.0 KB

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