mirror of https://github.com/go-gitea/gitea
Git with a cup of tea, painless self-hosted git service
Mirror for internal git.with.parts use
https://git.with.parts
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
175 lines
5.4 KiB
175 lines
5.4 KiB
//
|
|
// Copyright 2021, Sander van Harmelen
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
//
|
|
|
|
package gitlab
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"time"
|
|
)
|
|
|
|
// InvitesService handles communication with the invitation related
|
|
// methods of the GitLab API.
|
|
//
|
|
// GitLab API docs: https://docs.gitlab.com/ee/api/invitations.html
|
|
type InvitesService struct {
|
|
client *Client
|
|
}
|
|
|
|
// PendingInvite represents a pending invite.
|
|
//
|
|
// GitLab API docs: https://docs.gitlab.com/ee/api/invitations.html
|
|
type PendingInvite struct {
|
|
ID int `json:"id"`
|
|
InviteEmail string `json:"invite_email"`
|
|
CreatedAt *time.Time `json:"created_at"`
|
|
AccessLevel AccessLevelValue `json:"access_level"`
|
|
ExpiresAt *time.Time `json:"expires_at"`
|
|
UserName string `json:"user_name"`
|
|
CreatedByName string `json:"created_by_name"`
|
|
}
|
|
|
|
// ListPendingInvitationsOptions represents the available
|
|
// ListPendingInvitations() options.
|
|
//
|
|
// GitLab API docs:
|
|
// https://docs.gitlab.com/ee/api/invitations.html#list-all-invitations-pending-for-a-group-or-project
|
|
type ListPendingInvitationsOptions struct {
|
|
ListOptions
|
|
Query *string `url:"query,omitempty" json:"query,omitempty"`
|
|
}
|
|
|
|
// ListPendingGroupInvitations gets a list of invited group members.
|
|
//
|
|
// GitLab API docs:
|
|
// https://docs.gitlab.com/ee/api/invitations.html#list-all-invitations-pending-for-a-group-or-project
|
|
func (s *InvitesService) ListPendingGroupInvitations(gid interface{}, opt *ListPendingInvitationsOptions, options ...RequestOptionFunc) ([]*PendingInvite, *Response, error) {
|
|
group, err := parseID(gid)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
u := fmt.Sprintf("groups/%s/invitations", pathEscape(group))
|
|
|
|
req, err := s.client.NewRequest(http.MethodGet, u, opt, options)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
var pis []*PendingInvite
|
|
resp, err := s.client.Do(req, &pis)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return pis, resp, err
|
|
}
|
|
|
|
// ListPendingProjectInvitations gets a list of invited project members.
|
|
//
|
|
// GitLab API docs:
|
|
// https://docs.gitlab.com/ee/api/invitations.html#list-all-invitations-pending-for-a-group-or-project
|
|
func (s *InvitesService) ListPendingProjectInvitations(pid interface{}, opt *ListPendingInvitationsOptions, options ...RequestOptionFunc) ([]*PendingInvite, *Response, error) {
|
|
project, err := parseID(pid)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
u := fmt.Sprintf("projects/%s/invitations", pathEscape(project))
|
|
|
|
req, err := s.client.NewRequest(http.MethodGet, u, opt, options)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
var pis []*PendingInvite
|
|
resp, err := s.client.Do(req, &pis)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return pis, resp, err
|
|
}
|
|
|
|
// InvitesOptions represents the available GroupInvites() and ProjectInvites()
|
|
// options.
|
|
//
|
|
// GitLab API docs:
|
|
// https://docs.gitlab.com/ee/api/invitations.html#invite-by-email-to-group-or-project
|
|
type InvitesOptions struct {
|
|
ID interface{} `url:"id,omitempty" json:"id,omitempty"`
|
|
Email *string `url:"email,omitempty" json:"email,omitempty"`
|
|
AccessLevel *AccessLevelValue `url:"access_level,omitempty" json:"access_level,omitempty"`
|
|
ExpiresAt *ISOTime `url:"expires_at,omitempty" json:"expires_at,omitempty"`
|
|
}
|
|
|
|
// InvitesResult represents an invitations result.
|
|
//
|
|
// GitLab API docs:
|
|
// https://docs.gitlab.com/ee/api/invitations.html#invite-by-email-to-group-or-project
|
|
type InvitesResult struct {
|
|
Status string `json:"status"`
|
|
Message map[string]string `json:"message,omitempty"`
|
|
}
|
|
|
|
// GroupInvites invites new users by email to join a group.
|
|
//
|
|
// GitLab API docs:
|
|
// https://docs.gitlab.com/ee/api/invitations.html#invite-by-email-to-group-or-project
|
|
func (s *InvitesService) GroupInvites(gid interface{}, opt *InvitesOptions, options ...RequestOptionFunc) (*InvitesResult, *Response, error) {
|
|
group, err := parseID(gid)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
u := fmt.Sprintf("groups/%s/invitations", pathEscape(group))
|
|
|
|
req, err := s.client.NewRequest(http.MethodPost, u, opt, options)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
ir := new(InvitesResult)
|
|
resp, err := s.client.Do(req, ir)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return ir, resp, err
|
|
}
|
|
|
|
// ProjectInvites invites new users by email to join a project.
|
|
//
|
|
// GitLab API docs:
|
|
// https://docs.gitlab.com/ee/api/invitations.html#invite-by-email-to-group-or-project
|
|
func (s *InvitesService) ProjectInvites(pid interface{}, opt *InvitesOptions, options ...RequestOptionFunc) (*InvitesResult, *Response, error) {
|
|
project, err := parseID(pid)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
u := fmt.Sprintf("projects/%s/invitations", pathEscape(project))
|
|
|
|
req, err := s.client.NewRequest(http.MethodPost, u, opt, options)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
ir := new(InvitesResult)
|
|
resp, err := s.client.Do(req, ir)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return ir, resp, err
|
|
}
|
|
|