...

Source file src/github.com/xanzy/go-gitlab/project_members.go

Documentation: github.com/xanzy/go-gitlab

     1  //
     2  // Copyright 2021, Sander van Harmelen
     3  //
     4  // Licensed under the Apache License, Version 2.0 (the "License");
     5  // you may not use this file except in compliance with the License.
     6  // You may obtain a copy of the License at
     7  //
     8  //     http://www.apache.org/licenses/LICENSE-2.0
     9  //
    10  // Unless required by applicable law or agreed to in writing, software
    11  // distributed under the License is distributed on an "AS IS" BASIS,
    12  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  // See the License for the specific language governing permissions and
    14  // limitations under the License.
    15  //
    16  
    17  package gitlab
    18  
    19  import (
    20  	"fmt"
    21  	"net/http"
    22  )
    23  
    24  // ProjectMembersService handles communication with the project members
    25  // related methods of the GitLab API.
    26  //
    27  // GitLab API docs: https://docs.gitlab.com/ee/api/members.html
    28  type ProjectMembersService struct {
    29  	client *Client
    30  }
    31  
    32  // ListProjectMembersOptions represents the available ListProjectMembers() and
    33  // ListAllProjectMembers() options.
    34  //
    35  // GitLab API docs:
    36  // https://docs.gitlab.com/ee/api/members.html#list-all-members-of-a-group-or-project
    37  type ListProjectMembersOptions struct {
    38  	ListOptions
    39  	Query   *string `url:"query,omitempty" json:"query,omitempty"`
    40  	UserIDs *[]int  `url:"user_ids[],omitempty" json:"user_ids,omitempty"`
    41  }
    42  
    43  // ListProjectMembers gets a list of a project's team members viewable by the
    44  // authenticated user. Returns only direct members and not inherited members
    45  // through ancestors groups.
    46  //
    47  // GitLab API docs:
    48  // https://docs.gitlab.com/ee/api/members.html#list-all-members-of-a-group-or-project
    49  func (s *ProjectMembersService) ListProjectMembers(pid interface{}, opt *ListProjectMembersOptions, options ...RequestOptionFunc) ([]*ProjectMember, *Response, error) {
    50  	project, err := parseID(pid)
    51  	if err != nil {
    52  		return nil, nil, err
    53  	}
    54  	u := fmt.Sprintf("projects/%s/members", PathEscape(project))
    55  
    56  	req, err := s.client.NewRequest(http.MethodGet, u, opt, options)
    57  	if err != nil {
    58  		return nil, nil, err
    59  	}
    60  
    61  	var pm []*ProjectMember
    62  	resp, err := s.client.Do(req, &pm)
    63  	if err != nil {
    64  		return nil, resp, err
    65  	}
    66  
    67  	return pm, resp, nil
    68  }
    69  
    70  // ListAllProjectMembers gets a list of a project's team members viewable by the
    71  // authenticated user. Returns a list including inherited members through
    72  // ancestor groups.
    73  //
    74  // GitLab API docs:
    75  // https://docs.gitlab.com/ee/api/members.html#list-all-members-of-a-group-or-project-including-inherited-and-invited-members
    76  func (s *ProjectMembersService) ListAllProjectMembers(pid interface{}, opt *ListProjectMembersOptions, options ...RequestOptionFunc) ([]*ProjectMember, *Response, error) {
    77  	project, err := parseID(pid)
    78  	if err != nil {
    79  		return nil, nil, err
    80  	}
    81  	u := fmt.Sprintf("projects/%s/members/all", PathEscape(project))
    82  
    83  	req, err := s.client.NewRequest(http.MethodGet, u, opt, options)
    84  	if err != nil {
    85  		return nil, nil, err
    86  	}
    87  
    88  	var pm []*ProjectMember
    89  	resp, err := s.client.Do(req, &pm)
    90  	if err != nil {
    91  		return nil, resp, err
    92  	}
    93  
    94  	return pm, resp, nil
    95  }
    96  
    97  // GetProjectMember gets a project team member.
    98  //
    99  // GitLab API docs:
   100  // https://docs.gitlab.com/ee/api/members.html#get-a-member-of-a-group-or-project
   101  func (s *ProjectMembersService) GetProjectMember(pid interface{}, user int, options ...RequestOptionFunc) (*ProjectMember, *Response, error) {
   102  	project, err := parseID(pid)
   103  	if err != nil {
   104  		return nil, nil, err
   105  	}
   106  	u := fmt.Sprintf("projects/%s/members/%d", PathEscape(project), user)
   107  
   108  	req, err := s.client.NewRequest(http.MethodGet, u, nil, options)
   109  	if err != nil {
   110  		return nil, nil, err
   111  	}
   112  
   113  	pm := new(ProjectMember)
   114  	resp, err := s.client.Do(req, pm)
   115  	if err != nil {
   116  		return nil, resp, err
   117  	}
   118  
   119  	return pm, resp, nil
   120  }
   121  
   122  // GetInheritedProjectMember gets a project team member, including inherited
   123  //
   124  // GitLab API docs:
   125  // https://docs.gitlab.com/ee/api/members.html#get-a-member-of-a-group-or-project-including-inherited-and-invited-members
   126  func (s *ProjectMembersService) GetInheritedProjectMember(pid interface{}, user int, options ...RequestOptionFunc) (*ProjectMember, *Response, error) {
   127  	project, err := parseID(pid)
   128  	if err != nil {
   129  		return nil, nil, err
   130  	}
   131  	u := fmt.Sprintf("projects/%s/members/all/%d", PathEscape(project), user)
   132  
   133  	req, err := s.client.NewRequest(http.MethodGet, u, nil, options)
   134  	if err != nil {
   135  		return nil, nil, err
   136  	}
   137  
   138  	pm := new(ProjectMember)
   139  	resp, err := s.client.Do(req, pm)
   140  	if err != nil {
   141  		return nil, resp, err
   142  	}
   143  
   144  	return pm, resp, nil
   145  }
   146  
   147  // AddProjectMemberOptions represents the available AddProjectMember() options.
   148  //
   149  // GitLab API docs:
   150  // https://docs.gitlab.com/ee/api/members.html#add-a-member-to-a-group-or-project
   151  type AddProjectMemberOptions struct {
   152  	UserID       interface{}       `url:"user_id,omitempty" json:"user_id,omitempty"`
   153  	AccessLevel  *AccessLevelValue `url:"access_level,omitempty" json:"access_level,omitempty"`
   154  	ExpiresAt    *string           `url:"expires_at,omitempty" json:"expires_at"`
   155  	MemberRoleID *int              `url:"member_role_id,omitempty" json:"member_role_id,omitempty"`
   156  }
   157  
   158  // AddProjectMember adds a user to a project team. This is an idempotent
   159  // method and can be called multiple times with the same parameters. Adding
   160  // team membership to a user that is already a member does not affect the
   161  // existing membership.
   162  //
   163  // GitLab API docs:
   164  // https://docs.gitlab.com/ee/api/members.html#add-a-member-to-a-group-or-project
   165  func (s *ProjectMembersService) AddProjectMember(pid interface{}, opt *AddProjectMemberOptions, options ...RequestOptionFunc) (*ProjectMember, *Response, error) {
   166  	project, err := parseID(pid)
   167  	if err != nil {
   168  		return nil, nil, err
   169  	}
   170  	u := fmt.Sprintf("projects/%s/members", PathEscape(project))
   171  
   172  	req, err := s.client.NewRequest(http.MethodPost, u, opt, options)
   173  	if err != nil {
   174  		return nil, nil, err
   175  	}
   176  
   177  	pm := new(ProjectMember)
   178  	resp, err := s.client.Do(req, pm)
   179  	if err != nil {
   180  		return nil, resp, err
   181  	}
   182  
   183  	return pm, resp, nil
   184  }
   185  
   186  // EditProjectMemberOptions represents the available EditProjectMember() options.
   187  //
   188  // GitLab API docs:
   189  // https://docs.gitlab.com/ee/api/members.html#edit-a-member-of-a-group-or-project
   190  type EditProjectMemberOptions struct {
   191  	AccessLevel  *AccessLevelValue `url:"access_level,omitempty" json:"access_level,omitempty"`
   192  	ExpiresAt    *string           `url:"expires_at,omitempty" json:"expires_at,omitempty"`
   193  	MemberRoleID *int              `url:"member_role_id,omitempty" json:"member_role_id,omitempty"`
   194  }
   195  
   196  // EditProjectMember updates a project team member to a specified access level..
   197  //
   198  // GitLab API docs:
   199  // https://docs.gitlab.com/ee/api/members.html#edit-a-member-of-a-group-or-project
   200  func (s *ProjectMembersService) EditProjectMember(pid interface{}, user int, opt *EditProjectMemberOptions, options ...RequestOptionFunc) (*ProjectMember, *Response, error) {
   201  	project, err := parseID(pid)
   202  	if err != nil {
   203  		return nil, nil, err
   204  	}
   205  	u := fmt.Sprintf("projects/%s/members/%d", PathEscape(project), user)
   206  
   207  	req, err := s.client.NewRequest(http.MethodPut, u, opt, options)
   208  	if err != nil {
   209  		return nil, nil, err
   210  	}
   211  
   212  	pm := new(ProjectMember)
   213  	resp, err := s.client.Do(req, pm)
   214  	if err != nil {
   215  		return nil, resp, err
   216  	}
   217  
   218  	return pm, resp, nil
   219  }
   220  
   221  // DeleteProjectMember removes a user from a project team.
   222  //
   223  // GitLab API docs:
   224  // https://docs.gitlab.com/ee/api/members.html#remove-a-member-from-a-group-or-project
   225  func (s *ProjectMembersService) DeleteProjectMember(pid interface{}, user int, options ...RequestOptionFunc) (*Response, error) {
   226  	project, err := parseID(pid)
   227  	if err != nil {
   228  		return nil, err
   229  	}
   230  	u := fmt.Sprintf("projects/%s/members/%d", PathEscape(project), user)
   231  
   232  	req, err := s.client.NewRequest(http.MethodDelete, u, nil, options)
   233  	if err != nil {
   234  		return nil, err
   235  	}
   236  
   237  	return s.client.Do(req, nil)
   238  }
   239  

View as plain text