group_members.go 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. //
  2. // Copyright 2017, 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. package gitlab
  17. import (
  18. "fmt"
  19. "net/url"
  20. "time"
  21. )
  22. // GroupMembersService handles communication with the group members
  23. // related methods of the GitLab API.
  24. //
  25. // GitLab API docs: https://docs.gitlab.com/ce/api/members.html
  26. type GroupMembersService struct {
  27. client *Client
  28. }
  29. // GroupMember represents a GitLab group member.
  30. //
  31. // GitLab API docs: https://docs.gitlab.com/ce/api/members.html
  32. type GroupMember struct {
  33. ID int `json:"id"`
  34. Username string `json:"username"`
  35. Email string `json:"email"`
  36. Name string `json:"name"`
  37. State string `json:"state"`
  38. CreatedAt *time.Time `json:"created_at"`
  39. AccessLevel AccessLevelValue `json:"access_level"`
  40. ExpiresAt *ISOTime `json:"expires_at"`
  41. }
  42. // ListGroupMembersOptions represents the available ListGroupMembers() and
  43. // ListAllGroupMembers() options.
  44. //
  45. // GitLab API docs:
  46. // https://docs.gitlab.com/ce/api/members.html#list-all-members-of-a-group-or-project
  47. type ListGroupMembersOptions struct {
  48. ListOptions
  49. Query *string `url:"query,omitempty" json:"query,omitempty"`
  50. }
  51. // ListGroupMembers get a list of group members viewable by the authenticated
  52. // user. Returns a list including inherited members through ancestor groups.
  53. //
  54. // GitLab API docs:
  55. // https://docs.gitlab.com/ce/api/members.html#list-all-members-of-a-group-or-project
  56. func (s *GroupsService) ListGroupMembers(gid interface{}, opt *ListGroupMembersOptions, options ...OptionFunc) ([]*GroupMember, *Response, error) {
  57. group, err := parseID(gid)
  58. if err != nil {
  59. return nil, nil, err
  60. }
  61. u := fmt.Sprintf("groups/%s/members", url.QueryEscape(group))
  62. req, err := s.client.NewRequest("GET", u, opt, options)
  63. if err != nil {
  64. return nil, nil, err
  65. }
  66. var gm []*GroupMember
  67. resp, err := s.client.Do(req, &gm)
  68. if err != nil {
  69. return nil, resp, err
  70. }
  71. return gm, resp, err
  72. }
  73. // ListAllGroupMembers get a list of group members viewable by the authenticated
  74. // user. Returns a list including inherited members through ancestor groups.
  75. //
  76. // GitLab API docs:
  77. // https://docs.gitlab.com/ce/api/members.html#list-all-members-of-a-group-or-project-including-inherited-members
  78. func (s *GroupsService) ListAllGroupMembers(gid interface{}, opt *ListGroupMembersOptions, options ...OptionFunc) ([]*GroupMember, *Response, error) {
  79. group, err := parseID(gid)
  80. if err != nil {
  81. return nil, nil, err
  82. }
  83. u := fmt.Sprintf("groups/%s/members/all", url.QueryEscape(group))
  84. req, err := s.client.NewRequest("GET", u, opt, options)
  85. if err != nil {
  86. return nil, nil, err
  87. }
  88. var gm []*GroupMember
  89. resp, err := s.client.Do(req, &gm)
  90. if err != nil {
  91. return nil, resp, err
  92. }
  93. return gm, resp, err
  94. }
  95. // AddGroupMemberOptions represents the available AddGroupMember() options.
  96. //
  97. // GitLab API docs:
  98. // https://docs.gitlab.com/ce/api/members.html#add-a-member-to-a-group-or-project
  99. type AddGroupMemberOptions struct {
  100. UserID *int `url:"user_id,omitempty" json:"user_id,omitempty"`
  101. AccessLevel *AccessLevelValue `url:"access_level,omitempty" json:"access_level,omitempty"`
  102. ExpiresAt *string `url:"expires_at,omitempty" json:"expires_at"`
  103. }
  104. // GetGroupMember gets a member of a group.
  105. //
  106. // GitLab API docs:
  107. // https://docs.gitlab.com/ce/api/members.html#get-a-member-of-a-group-or-project
  108. func (s *GroupMembersService) GetGroupMember(gid interface{}, user int, options ...OptionFunc) (*GroupMember, *Response, error) {
  109. group, err := parseID(gid)
  110. if err != nil {
  111. return nil, nil, err
  112. }
  113. u := fmt.Sprintf("groups/%s/members/%d", url.QueryEscape(group), user)
  114. req, err := s.client.NewRequest("GET", u, nil, options)
  115. if err != nil {
  116. return nil, nil, err
  117. }
  118. gm := new(GroupMember)
  119. resp, err := s.client.Do(req, gm)
  120. if err != nil {
  121. return nil, resp, err
  122. }
  123. return gm, resp, err
  124. }
  125. // AddGroupMember adds a user to the list of group members.
  126. //
  127. // GitLab API docs:
  128. // https://docs.gitlab.com/ce/api/members.html#add-a-member-to-a-group-or-project
  129. func (s *GroupMembersService) AddGroupMember(gid interface{}, opt *AddGroupMemberOptions, options ...OptionFunc) (*GroupMember, *Response, error) {
  130. group, err := parseID(gid)
  131. if err != nil {
  132. return nil, nil, err
  133. }
  134. u := fmt.Sprintf("groups/%s/members", url.QueryEscape(group))
  135. req, err := s.client.NewRequest("POST", u, opt, options)
  136. if err != nil {
  137. return nil, nil, err
  138. }
  139. gm := new(GroupMember)
  140. resp, err := s.client.Do(req, gm)
  141. if err != nil {
  142. return nil, resp, err
  143. }
  144. return gm, resp, err
  145. }
  146. // EditGroupMemberOptions represents the available EditGroupMember()
  147. // options.
  148. //
  149. // GitLab API docs:
  150. // https://docs.gitlab.com/ce/api/members.html#edit-a-member-of-a-group-or-project
  151. type EditGroupMemberOptions struct {
  152. AccessLevel *AccessLevelValue `url:"access_level,omitempty" json:"access_level,omitempty"`
  153. ExpiresAt *string `url:"expires_at,omitempty" json:"expires_at"`
  154. }
  155. // EditGroupMember updates a member of a group.
  156. //
  157. // GitLab API docs:
  158. // https://docs.gitlab.com/ce/api/members.html#edit-a-member-of-a-group-or-project
  159. func (s *GroupMembersService) EditGroupMember(gid interface{}, user int, opt *EditGroupMemberOptions, options ...OptionFunc) (*GroupMember, *Response, error) {
  160. group, err := parseID(gid)
  161. if err != nil {
  162. return nil, nil, err
  163. }
  164. u := fmt.Sprintf("groups/%s/members/%d", url.QueryEscape(group), user)
  165. req, err := s.client.NewRequest("PUT", u, opt, options)
  166. if err != nil {
  167. return nil, nil, err
  168. }
  169. gm := new(GroupMember)
  170. resp, err := s.client.Do(req, gm)
  171. if err != nil {
  172. return nil, resp, err
  173. }
  174. return gm, resp, err
  175. }
  176. // RemoveGroupMember removes user from user team.
  177. //
  178. // GitLab API docs:
  179. // https://docs.gitlab.com/ce/api/members.html#remove-a-member-from-a-group-or-project
  180. func (s *GroupMembersService) RemoveGroupMember(gid interface{}, user int, options ...OptionFunc) (*Response, error) {
  181. group, err := parseID(gid)
  182. if err != nil {
  183. return nil, err
  184. }
  185. u := fmt.Sprintf("groups/%s/members/%d", url.QueryEscape(group), user)
  186. req, err := s.client.NewRequest("DELETE", u, nil, options)
  187. if err != nil {
  188. return nil, err
  189. }
  190. return s.client.Do(req, nil)
  191. }