123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 |
- package gitlab
- import (
- "fmt"
- "net/url"
- "time"
- )
- // AccessRequest represents a access request for a group or project.
- //
- // GitLab API docs:
- // https://docs.gitlab.com/ce/api/access_requests.html
- type AccessRequest struct {
- ID int `json:"id"`
- Username string `json:"username"`
- Name string `json:"name"`
- State string `json:"state"`
- CreatedAt *time.Time `json:"created_at"`
- RequestedAt *time.Time `json:"requested_at"`
- AccessLevel AccessLevelValue `json:"access_level"`
- }
- // AccessRequestsService handles communication with the project/group
- // access requests related methods of the GitLab API.
- //
- // GitLab API docs: https://docs.gitlab.com/ce/api/access_requests.html
- type AccessRequestsService struct {
- client *Client
- }
- // ListAccessRequestsOptions represents the available
- // ListProjectAccessRequests() or ListGroupAccessRequests() options.
- //
- // GitLab API docs:
- // https://docs.gitlab.com/ce/api/access_requests.html#list-access-requests-for-a-group-or-project
- type ListAccessRequestsOptions ListOptions
- // ListProjectAccessRequests gets a list of access requests
- // viewable by the authenticated user.
- //
- // GitLab API docs:
- // https://docs.gitlab.com/ce/api/access_requests.html#list-access-requests-for-a-group-or-project
- func (s *AccessRequestsService) ListProjectAccessRequests(pid interface{}, opt *ListAccessRequestsOptions, options ...OptionFunc) ([]*AccessRequest, *Response, error) {
- project, err := parseID(pid)
- if err != nil {
- return nil, nil, err
- }
- u := fmt.Sprintf("projects/%s/access_requests", url.QueryEscape(project))
- req, err := s.client.NewRequest("GET", u, opt, options)
- if err != nil {
- return nil, nil, err
- }
- var ars []*AccessRequest
- resp, err := s.client.Do(req, &ars)
- if err != nil {
- return nil, resp, err
- }
- return ars, resp, err
- }
- // ListGroupAccessRequests gets a list of access requests
- // viewable by the authenticated user.
- //
- // GitLab API docs:
- // https://docs.gitlab.com/ce/api/access_requests.html#list-access-requests-for-a-group-or-project
- func (s *AccessRequestsService) ListGroupAccessRequests(gid interface{}, opt *ListAccessRequestsOptions, options ...OptionFunc) ([]*AccessRequest, *Response, error) {
- group, err := parseID(gid)
- if err != nil {
- return nil, nil, err
- }
- u := fmt.Sprintf("groups/%s/access_requests", url.QueryEscape(group))
- req, err := s.client.NewRequest("GET", u, opt, options)
- if err != nil {
- return nil, nil, err
- }
- var ars []*AccessRequest
- resp, err := s.client.Do(req, &ars)
- if err != nil {
- return nil, resp, err
- }
- return ars, resp, err
- }
- // RequestProjectAccess requests access for the authenticated user
- // to a group or project.
- //
- // GitLab API docs:
- // https://docs.gitlab.com/ce/api/access_requests.html#request-access-to-a-group-or-project
- func (s *AccessRequestsService) RequestProjectAccess(pid interface{}, options ...OptionFunc) (*AccessRequest, *Response, error) {
- project, err := parseID(pid)
- if err != nil {
- return nil, nil, err
- }
- u := fmt.Sprintf("projects/%s/access_requests", url.QueryEscape(project))
- req, err := s.client.NewRequest("POST", u, nil, options)
- if err != nil {
- return nil, nil, err
- }
- ar := new(AccessRequest)
- resp, err := s.client.Do(req, ar)
- if err != nil {
- return nil, resp, err
- }
- return ar, resp, err
- }
- // RequestGroupAccess requests access for the authenticated user
- // to a group or project.
- //
- // GitLab API docs:
- // https://docs.gitlab.com/ce/api/access_requests.html#request-access-to-a-group-or-project
- func (s *AccessRequestsService) RequestGroupAccess(gid interface{}, options ...OptionFunc) (*AccessRequest, *Response, error) {
- group, err := parseID(gid)
- if err != nil {
- return nil, nil, err
- }
- u := fmt.Sprintf("groups/%s/access_requests", url.QueryEscape(group))
- req, err := s.client.NewRequest("POST", u, nil, options)
- if err != nil {
- return nil, nil, err
- }
- ar := new(AccessRequest)
- resp, err := s.client.Do(req, ar)
- if err != nil {
- return nil, resp, err
- }
- return ar, resp, err
- }
- // ApproveAccessRequestOptions represents the available
- // ApproveProjectAccessRequest() and ApproveGroupAccessRequest() options.
- //
- // GitLab API docs:
- // https://docs.gitlab.com/ce/api/access_requests.html#approve-an-access-request
- type ApproveAccessRequestOptions struct {
- AccessLevel *AccessLevelValue `url:"access_level,omitempty" json:"access_level,omitempty"`
- }
- // ApproveProjectAccessRequest approves an access request for the given user.
- //
- // GitLab API docs:
- // https://docs.gitlab.com/ce/api/access_requests.html#approve-an-access-request
- func (s *AccessRequestsService) ApproveProjectAccessRequest(pid interface{}, user int, opt *ApproveAccessRequestOptions, options ...OptionFunc) (*AccessRequest, *Response, error) {
- project, err := parseID(pid)
- if err != nil {
- return nil, nil, err
- }
- u := fmt.Sprintf("projects/%s/access_requests/%d/approve", url.QueryEscape(project), user)
- req, err := s.client.NewRequest("PUT", u, opt, options)
- if err != nil {
- return nil, nil, err
- }
- ar := new(AccessRequest)
- resp, err := s.client.Do(req, ar)
- if err != nil {
- return nil, resp, err
- }
- return ar, resp, err
- }
- // ApproveGroupAccessRequest approves an access request for the given user.
- //
- // GitLab API docs:
- // https://docs.gitlab.com/ce/api/access_requests.html#approve-an-access-request
- func (s *AccessRequestsService) ApproveGroupAccessRequest(gid interface{}, user int, opt *ApproveAccessRequestOptions, options ...OptionFunc) (*AccessRequest, *Response, error) {
- group, err := parseID(gid)
- if err != nil {
- return nil, nil, err
- }
- u := fmt.Sprintf("groups/%s/access_requests/%d/approve", url.QueryEscape(group), user)
- req, err := s.client.NewRequest("PUT", u, opt, options)
- if err != nil {
- return nil, nil, err
- }
- ar := new(AccessRequest)
- resp, err := s.client.Do(req, ar)
- if err != nil {
- return nil, resp, err
- }
- return ar, resp, err
- }
- // DenyProjectAccessRequest denies an access request for the given user.
- //
- // GitLab API docs:
- // https://docs.gitlab.com/ce/api/access_requests.html#deny-an-access-request
- func (s *AccessRequestsService) DenyProjectAccessRequest(pid interface{}, user int, options ...OptionFunc) (*Response, error) {
- project, err := parseID(pid)
- if err != nil {
- return nil, err
- }
- u := fmt.Sprintf("projects/%s/access_requests/%d", url.QueryEscape(project), user)
- req, err := s.client.NewRequest("DELETE", u, nil, options)
- if err != nil {
- return nil, err
- }
- return s.client.Do(req, nil)
- }
- // DenyGroupAccessRequest denies an access request for the given user.
- //
- // GitLab API docs:
- // https://docs.gitlab.com/ce/api/access_requests.html#deny-an-access-request
- func (s *AccessRequestsService) DenyGroupAccessRequest(gid interface{}, user int, options ...OptionFunc) (*Response, error) {
- group, err := parseID(gid)
- if err != nil {
- return nil, err
- }
- u := fmt.Sprintf("groups/%s/access_requests/%d", url.QueryEscape(group), user)
- req, err := s.client.NewRequest("DELETE", u, nil, options)
- if err != nil {
- return nil, err
- }
- return s.client.Do(req, nil)
- }
|