1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package gitlab
18
19 import (
20 "fmt"
21 "net/http"
22 "time"
23 )
24
25
26
27
28
29 type ProjectAccessTokensService struct {
30 client *Client
31 }
32
33
34
35
36 type ProjectAccessToken struct {
37 ID int `json:"id"`
38 UserID int `json:"user_id"`
39 Name string `json:"name"`
40 Scopes []string `json:"scopes"`
41 CreatedAt *time.Time `json:"created_at"`
42 LastUsedAt *time.Time `json:"last_used_at"`
43 ExpiresAt *ISOTime `json:"expires_at"`
44 Active bool `json:"active"`
45 Revoked bool `json:"revoked"`
46 Token string `json:"token"`
47 AccessLevel AccessLevelValue `json:"access_level"`
48 }
49
50 func (v ProjectAccessToken) String() string {
51 return Stringify(v)
52 }
53
54
55
56
57
58
59 type ListProjectAccessTokensOptions ListOptions
60
61
62
63
64
65
66 func (s *ProjectAccessTokensService) ListProjectAccessTokens(pid interface{}, opt *ListProjectAccessTokensOptions, options ...RequestOptionFunc) ([]*ProjectAccessToken, *Response, error) {
67 project, err := parseID(pid)
68 if err != nil {
69 return nil, nil, err
70 }
71 u := fmt.Sprintf("projects/%s/access_tokens", PathEscape(project))
72
73 req, err := s.client.NewRequest(http.MethodGet, u, opt, options)
74 if err != nil {
75 return nil, nil, err
76 }
77
78 var pats []*ProjectAccessToken
79 resp, err := s.client.Do(req, &pats)
80 if err != nil {
81 return nil, resp, err
82 }
83
84 return pats, resp, nil
85 }
86
87
88
89
90
91 func (s *ProjectAccessTokensService) GetProjectAccessToken(pid interface{}, id int, options ...RequestOptionFunc) (*ProjectAccessToken, *Response, error) {
92 project, err := parseID(pid)
93 if err != nil {
94 return nil, nil, err
95 }
96 u := fmt.Sprintf("projects/%s/access_tokens/%d", PathEscape(project), id)
97
98 req, err := s.client.NewRequest(http.MethodGet, u, nil, options)
99 if err != nil {
100 return nil, nil, err
101 }
102
103 pat := new(ProjectAccessToken)
104 resp, err := s.client.Do(req, &pat)
105 if err != nil {
106 return nil, resp, err
107 }
108
109 return pat, resp, nil
110 }
111
112
113
114
115
116
117 type CreateProjectAccessTokenOptions struct {
118 Name *string `url:"name,omitempty" json:"name,omitempty"`
119 Scopes *[]string `url:"scopes,omitempty" json:"scopes,omitempty"`
120 AccessLevel *AccessLevelValue `url:"access_level,omitempty" json:"access_level,omitempty"`
121 ExpiresAt *ISOTime `url:"expires_at,omitempty" json:"expires_at,omitempty"`
122 }
123
124
125
126
127
128 func (s *ProjectAccessTokensService) CreateProjectAccessToken(pid interface{}, opt *CreateProjectAccessTokenOptions, options ...RequestOptionFunc) (*ProjectAccessToken, *Response, error) {
129 project, err := parseID(pid)
130 if err != nil {
131 return nil, nil, err
132 }
133 u := fmt.Sprintf("projects/%s/access_tokens", PathEscape(project))
134
135 req, err := s.client.NewRequest(http.MethodPost, u, opt, options)
136 if err != nil {
137 return nil, nil, err
138 }
139
140 pat := new(ProjectAccessToken)
141 resp, err := s.client.Do(req, pat)
142 if err != nil {
143 return nil, resp, err
144 }
145
146 return pat, resp, nil
147 }
148
149
150
151
152
153
154 type RotateProjectAccessTokenOptions struct {
155 ExpiresAt *ISOTime `url:"expires_at,omitempty" json:"expires_at,omitempty"`
156 }
157
158
159
160
161
162
163 func (s *ProjectAccessTokensService) RotateProjectAccessToken(pid interface{}, id int, opt *RotateProjectAccessTokenOptions, options ...RequestOptionFunc) (*ProjectAccessToken, *Response, error) {
164 projects, err := parseID(pid)
165 if err != nil {
166 return nil, nil, err
167 }
168 u := fmt.Sprintf("projects/%s/access_tokens/%d/rotate", PathEscape(projects), id)
169 req, err := s.client.NewRequest(http.MethodPost, u, opt, options)
170 if err != nil {
171 return nil, nil, err
172 }
173
174 pat := new(ProjectAccessToken)
175 resp, err := s.client.Do(req, pat)
176 if err != nil {
177 return nil, resp, err
178 }
179
180 return pat, resp, nil
181 }
182
183
184
185
186
187 func (s *ProjectAccessTokensService) RevokeProjectAccessToken(pid interface{}, id int, options ...RequestOptionFunc) (*Response, error) {
188 project, err := parseID(pid)
189 if err != nil {
190 return nil, err
191 }
192 u := fmt.Sprintf("projects/%s/access_tokens/%d", PathEscape(project), id)
193
194 req, err := s.client.NewRequest(http.MethodDelete, u, nil, options)
195 if err != nil {
196 return nil, err
197 }
198
199 return s.client.Do(req, nil)
200 }
201
View as plain text