Skip to content

Commit fb561f5

Browse files
authored
refactor: extract models and put them in their own pkg (#254)
1 parent 3a7648c commit fb561f5

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+585
-292
lines changed

backend.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515

1616
"github.com/ilijamt/vault-plugin-secrets-gitlab/internal/flags"
1717
g "github.com/ilijamt/vault-plugin-secrets-gitlab/internal/gitlab"
18+
config2 "github.com/ilijamt/vault-plugin-secrets-gitlab/internal/model/config"
1819
"github.com/ilijamt/vault-plugin-secrets-gitlab/internal/utils"
1920
)
2021

@@ -107,7 +108,7 @@ func (b *Backend) periodicFunc(ctx context.Context, req *logical.Request) (err e
107108
b.Logger().Debug("Periodic action executing")
108109

109110
if b.WriteSafeReplicationState() {
110-
var config *EntryConfig
111+
var config *config2.EntryConfig
111112

112113
b.lockClientMutex.Lock()
113114
unlockLockClientMutex := sync.OnceFunc(func() { b.lockClientMutex.Unlock() })
@@ -176,7 +177,7 @@ func (b *Backend) getClient(ctx context.Context, s logical.Storage, name string)
176177

177178
b.lockClientMutex.RLock()
178179
defer b.lockClientMutex.RUnlock()
179-
var config *EntryConfig
180+
var config *config2.EntryConfig
180181
config, err = getConfig(ctx, s, name)
181182
if err != nil {
182183
b.Logger().Error("Failed to retrieve configuration", "error", err.Error())

defs.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@ package gitlab
22

33
import (
44
"time"
5+
6+
"github.com/ilijamt/vault-plugin-secrets-gitlab/internal/model/config"
57
)
68

79
const (
810
DefaultConfigFieldAccessTokenMaxTTL = 7 * 24 * time.Hour
9-
DefaultConfigFieldAccessTokenRotate = DefaultAutoRotateBeforeMinTTL
11+
DefaultConfigFieldAccessTokenRotate = config.DefaultAutoRotateBeforeMinTTL
1012
DefaultRoleFieldAccessTokenMaxTTL = 24 * time.Hour
1113
DefaultAccessTokenMinTTL = 24 * time.Hour
1214
DefaultAccessTokenMaxPossibleTTL = 365 * 24 * time.Hour
13-
DefaultAutoRotateBeforeMinTTL = 24 * time.Hour
14-
DefaultAutoRotateBeforeMaxTTL = 730 * time.Hour
1515
DefaultConfigName = "default"
1616
)

gitlab_client.go

Lines changed: 47 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ import (
1616
"golang.org/x/time/rate"
1717

1818
"github.com/ilijamt/vault-plugin-secrets-gitlab/internal/errs"
19-
"github.com/ilijamt/vault-plugin-secrets-gitlab/internal/models"
19+
config2 "github.com/ilijamt/vault-plugin-secrets-gitlab/internal/model/config"
20+
modelToken "github.com/ilijamt/vault-plugin-secrets-gitlab/internal/model/token"
2021
t "github.com/ilijamt/vault-plugin-secrets-gitlab/internal/token"
2122
"github.com/ilijamt/vault-plugin-secrets-gitlab/internal/utils"
2223
)
@@ -29,7 +30,7 @@ var (
2930
type gitlabClient struct {
3031
client *g.Client
3132
httpClient *http.Client
32-
config *EntryConfig
33+
config *config2.EntryConfig
3334
logger hclog.Logger
3435
}
3536

@@ -47,7 +48,7 @@ func (gc *gitlabClient) GetProjectIdByPath(ctx context.Context, path string) (pr
4748
return projectId, err
4849
}
4950

50-
func (gc *gitlabClient) CreateGroupDeployToken(ctx context.Context, path string, groupId int, name string, expiresAt *time.Time, scopes []string) (et *models.TokenGroupDeploy, err error) {
51+
func (gc *gitlabClient) CreateGroupDeployToken(ctx context.Context, path string, groupId int, name string, expiresAt *time.Time, scopes []string) (et *modelToken.TokenGroupDeploy, err error) {
5152
var dt *g.DeployToken
5253
defer func() {
5354
gc.logger.Debug("Create group deploy token", "groupId", groupId, "name", name, "path", path, "expiresAt", expiresAt, "scopes", scopes, "error", err)
@@ -62,9 +63,9 @@ func (gc *gitlabClient) CreateGroupDeployToken(ctx context.Context, path string,
6263
},
6364
g.WithContext(ctx),
6465
); err == nil {
65-
et = &models.TokenGroupDeploy{
66-
TokenWithScopes: models.TokenWithScopes{
67-
Token: models.Token{
66+
et = &modelToken.TokenGroupDeploy{
67+
TokenWithScopes: modelToken.TokenWithScopes{
68+
Token: modelToken.Token{
6869
TokenID: dt.ID,
6970
ParentID: strconv.Itoa(groupId),
7071
Path: path,
@@ -81,7 +82,7 @@ func (gc *gitlabClient) CreateGroupDeployToken(ctx context.Context, path string,
8182
return et, err
8283
}
8384

84-
func (gc *gitlabClient) CreateProjectDeployToken(ctx context.Context, path string, projectId int, name string, expiresAt *time.Time, scopes []string) (et *models.TokenProjectDeploy, err error) {
85+
func (gc *gitlabClient) CreateProjectDeployToken(ctx context.Context, path string, projectId int, name string, expiresAt *time.Time, scopes []string) (et *modelToken.TokenProjectDeploy, err error) {
8586
var dt *g.DeployToken
8687
defer func() {
8788
gc.logger.Debug("Create project deploy token", "projectId", projectId, "name", name, "path", path, "expiresAt", expiresAt, "scopes", scopes, "error", err)
@@ -95,9 +96,9 @@ func (gc *gitlabClient) CreateProjectDeployToken(ctx context.Context, path strin
9596
},
9697
g.WithContext(ctx),
9798
); err == nil {
98-
et = &models.TokenProjectDeploy{
99-
TokenWithScopes: models.TokenWithScopes{
100-
Token: models.Token{
99+
et = &modelToken.TokenProjectDeploy{
100+
TokenWithScopes: modelToken.TokenWithScopes{
101+
Token: modelToken.Token{
101102
TokenID: dt.ID,
102103
ParentID: strconv.Itoa(projectId),
103104
Path: path,
@@ -141,7 +142,7 @@ func (gc *gitlabClient) Metadata(ctx context.Context) (metadata *g.Metadata, err
141142
return metadata, err
142143
}
143144

144-
func (gc *gitlabClient) CreatePipelineProjectTriggerAccessToken(ctx context.Context, path, name string, projectId int, description string, expiresAt *time.Time) (et *models.TokenPipelineProjectTrigger, err error) {
145+
func (gc *gitlabClient) CreatePipelineProjectTriggerAccessToken(ctx context.Context, path, name string, projectId int, description string, expiresAt *time.Time) (et *modelToken.TokenPipelineProjectTrigger, err error) {
145146
var pt *g.PipelineTrigger
146147
defer func() {
147148
gc.logger.Debug("Create a pipeline project trigger access token", "path", path, "name", name, "projectId", description, "description", "error", err)
@@ -152,8 +153,8 @@ func (gc *gitlabClient) CreatePipelineProjectTriggerAccessToken(ctx context.Cont
152153
&g.AddPipelineTriggerOptions{Description: &description},
153154
g.WithContext(ctx),
154155
); err == nil {
155-
et = &models.TokenPipelineProjectTrigger{
156-
Token: models.Token{
156+
et = &modelToken.TokenPipelineProjectTrigger{
157+
Token: modelToken.Token{
157158
TokenID: pt.ID,
158159
ParentID: strconv.Itoa(projectId),
159160
Path: path,
@@ -203,7 +204,7 @@ func (gc *gitlabClient) GitlabClient(ctx context.Context) *g.Client {
203204
return gc.client
204205
}
205206

206-
func (gc *gitlabClient) CreateGroupServiceAccountAccessToken(ctx context.Context, path string, groupId string, userId int, name string, expiresAt time.Time, scopes []string) (et *models.TokenGroupServiceAccount, err error) {
207+
func (gc *gitlabClient) CreateGroupServiceAccountAccessToken(ctx context.Context, path string, groupId string, userId int, name string, expiresAt time.Time, scopes []string) (et *modelToken.TokenGroupServiceAccount, err error) {
207208
var at *g.PersonalAccessToken
208209
defer func() {
209210
gc.logger.Debug("Create group service access token", "pat", at, "et", et, "path", path, "groupId", groupId, "userId", userId, "name", name, "expiresAt", expiresAt, "scopes", scopes, "error", err)
@@ -214,9 +215,9 @@ func (gc *gitlabClient) CreateGroupServiceAccountAccessToken(ctx context.Context
214215
Scopes: &scopes,
215216
}, g.WithContext(ctx))
216217
if err == nil {
217-
et = &models.TokenGroupServiceAccount{
218-
TokenWithScopes: models.TokenWithScopes{
219-
Token: models.Token{
218+
et = &modelToken.TokenGroupServiceAccount{
219+
TokenWithScopes: modelToken.TokenWithScopes{
220+
Token: modelToken.Token{
220221
TokenID: at.ID,
221222
ParentID: groupId,
222223
Path: path,
@@ -234,16 +235,16 @@ func (gc *gitlabClient) CreateGroupServiceAccountAccessToken(ctx context.Context
234235
return et, err
235236
}
236237

237-
func (gc *gitlabClient) CreateUserServiceAccountAccessToken(ctx context.Context, username string, userId int, name string, expiresAt time.Time, scopes []string) (et *models.TokenUserServiceAccount, err error) {
238+
func (gc *gitlabClient) CreateUserServiceAccountAccessToken(ctx context.Context, username string, userId int, name string, expiresAt time.Time, scopes []string) (et *modelToken.TokenUserServiceAccount, err error) {
238239
defer func() {
239240
gc.logger.Debug("Create user service access token", "et", et, "username", username, "userId", userId, "name", name, "expiresAt", expiresAt, "scopes", scopes, "error", err)
240241
}()
241-
var etp *models.TokenPersonal
242+
var etp *modelToken.TokenPersonal
242243
etp, err = gc.CreatePersonalAccessToken(ctx, username, userId, name, expiresAt, scopes)
243244
if err == nil && etp != nil {
244-
et = &models.TokenUserServiceAccount{
245-
TokenWithScopes: models.TokenWithScopes{
246-
Token: models.Token{
245+
et = &modelToken.TokenUserServiceAccount{
246+
TokenWithScopes: modelToken.TokenWithScopes{
247+
Token: modelToken.Token{
247248
TokenID: etp.TokenID,
248249
ParentID: etp.ParentID,
249250
Path: etp.Path,
@@ -268,7 +269,7 @@ func (gc *gitlabClient) RevokeUserServiceAccountAccessToken(ctx context.Context,
268269
}
269270

270271
var c *g.Client
271-
if c, err = newGitlabClient(&EntryConfig{
272+
if c, err = newGitlabClient(&config2.EntryConfig{
272273
BaseURL: gc.config.BaseURL,
273274
Token: token,
274275
}, gc.httpClient); err == nil {
@@ -286,7 +287,7 @@ func (gc *gitlabClient) RevokeGroupServiceAccountAccessToken(ctx context.Context
286287
}
287288

288289
var c *g.Client
289-
if c, err = newGitlabClient(&EntryConfig{
290+
if c, err = newGitlabClient(&config2.EntryConfig{
290291
BaseURL: gc.config.BaseURL,
291292
Token: token,
292293
}, gc.httpClient); err == nil {
@@ -296,13 +297,13 @@ func (gc *gitlabClient) RevokeGroupServiceAccountAccessToken(ctx context.Context
296297
return err
297298
}
298299

299-
func (gc *gitlabClient) CurrentTokenInfo(ctx context.Context) (et *models.TokenConfig, err error) {
300+
func (gc *gitlabClient) CurrentTokenInfo(ctx context.Context) (et *modelToken.TokenConfig, err error) {
300301
var pat *g.PersonalAccessToken
301302
defer func() { gc.logger.Debug("Current token info", "token", et, "error", err) }()
302303
if pat, _, err = gc.client.PersonalAccessTokens.GetSinglePersonalAccessToken(g.WithContext(ctx)); err == nil {
303-
et = &models.TokenConfig{
304-
TokenWithScopes: models.TokenWithScopes{
305-
Token: models.Token{
304+
et = &modelToken.TokenConfig{
305+
TokenWithScopes: modelToken.TokenWithScopes{
306+
Token: modelToken.Token{
306307
TokenID: pat.ID,
307308
Name: pat.Name,
308309
Token: pat.Token,
@@ -325,7 +326,7 @@ func (gc *gitlabClient) CurrentTokenInfo(ctx context.Context) (et *models.TokenC
325326
return et, err
326327
}
327328

328-
func (gc *gitlabClient) RotateCurrentToken(ctx context.Context) (token *models.TokenConfig, currentEntryToken *models.TokenConfig, err error) {
329+
func (gc *gitlabClient) RotateCurrentToken(ctx context.Context) (token *modelToken.TokenConfig, currentEntryToken *modelToken.TokenConfig, err error) {
329330
var expiresAt time.Time
330331
defer func() {
331332
gc.logger.Debug("Rotate current token", "token", token, "currentEntryToken", currentEntryToken, "expiresAt", expiresAt, "error", err)
@@ -354,9 +355,9 @@ func (gc *gitlabClient) RotateCurrentToken(ctx context.Context) (token *models.T
354355
return nil, nil, err
355356
}
356357

357-
token = &models.TokenConfig{
358-
TokenWithScopes: models.TokenWithScopes{
359-
Token: models.Token{
358+
token = &modelToken.TokenConfig{
359+
TokenWithScopes: modelToken.TokenWithScopes{
360+
Token: modelToken.Token{
360361
TokenID: pat.ID,
361362
ParentID: "",
362363
Path: usr.Username,
@@ -405,7 +406,7 @@ func (gc *gitlabClient) GetUserIdByUsername(ctx context.Context, username string
405406
return userId, nil
406407
}
407408

408-
func (gc *gitlabClient) CreatePersonalAccessToken(ctx context.Context, username string, userId int, name string, expiresAt time.Time, scopes []string) (et *models.TokenPersonal, err error) {
409+
func (gc *gitlabClient) CreatePersonalAccessToken(ctx context.Context, username string, userId int, name string, expiresAt time.Time, scopes []string) (et *modelToken.TokenPersonal, err error) {
409410
var at *g.PersonalAccessToken
410411
defer func() {
411412
gc.logger.Debug("Create personal access token", "pat", at, "et", et, "username", username, "userId", userId, "name", name, "expiresAt", expiresAt, "scopes", scopes, "error", err)
@@ -415,9 +416,9 @@ func (gc *gitlabClient) CreatePersonalAccessToken(ctx context.Context, username
415416
ExpiresAt: (*g.ISOTime)(&expiresAt),
416417
Scopes: &scopes,
417418
}, g.WithContext(ctx)); err == nil {
418-
et = &models.TokenPersonal{
419-
TokenWithScopes: models.TokenWithScopes{
420-
Token: models.Token{
419+
et = &modelToken.TokenPersonal{
420+
TokenWithScopes: modelToken.TokenWithScopes{
421+
Token: modelToken.Token{
421422
TokenID: at.ID,
422423
Path: username,
423424
Name: name,
@@ -434,7 +435,7 @@ func (gc *gitlabClient) CreatePersonalAccessToken(ctx context.Context, username
434435
return et, err
435436
}
436437

437-
func (gc *gitlabClient) CreateGroupAccessToken(ctx context.Context, groupId string, name string, expiresAt time.Time, scopes []string, accessLevel t.AccessLevel) (et *models.TokenGroup, err error) {
438+
func (gc *gitlabClient) CreateGroupAccessToken(ctx context.Context, groupId string, name string, expiresAt time.Time, scopes []string, accessLevel t.AccessLevel) (et *modelToken.TokenGroup, err error) {
438439
var at *g.GroupAccessToken
439440
defer func() {
440441
gc.logger.Debug("Create group access token", "gat", at, "et", et, "groupId", groupId, "name", name, "expiresAt", expiresAt, "scopes", scopes, "accessLevel", accessLevel, "error", err)
@@ -447,9 +448,9 @@ func (gc *gitlabClient) CreateGroupAccessToken(ctx context.Context, groupId stri
447448
ExpiresAt: (*g.ISOTime)(&expiresAt),
448449
AccessLevel: al,
449450
}, g.WithContext(ctx)); err == nil {
450-
et = &models.TokenGroup{
451-
TokenWithScopesAndAccessLevel: models.TokenWithScopesAndAccessLevel{
452-
Token: models.Token{
451+
et = &modelToken.TokenGroup{
452+
TokenWithScopesAndAccessLevel: modelToken.TokenWithScopesAndAccessLevel{
453+
Token: modelToken.Token{
453454
TokenID: at.ID,
454455
ParentID: groupId,
455456
Path: groupId,
@@ -467,7 +468,7 @@ func (gc *gitlabClient) CreateGroupAccessToken(ctx context.Context, groupId stri
467468
return et, err
468469
}
469470

470-
func (gc *gitlabClient) CreateProjectAccessToken(ctx context.Context, projectId string, name string, expiresAt time.Time, scopes []string, accessLevel t.AccessLevel) (et *models.TokenProject, err error) {
471+
func (gc *gitlabClient) CreateProjectAccessToken(ctx context.Context, projectId string, name string, expiresAt time.Time, scopes []string, accessLevel t.AccessLevel) (et *modelToken.TokenProject, err error) {
471472
var at *g.ProjectAccessToken
472473
defer func() {
473474
gc.logger.Debug("Create project access token", "gat", at, "et", et, "projectId", projectId, "name", name, "expiresAt", expiresAt, "scopes", scopes, "accessLevel", accessLevel, "error", err)
@@ -480,9 +481,9 @@ func (gc *gitlabClient) CreateProjectAccessToken(ctx context.Context, projectId
480481
ExpiresAt: (*g.ISOTime)(&expiresAt),
481482
AccessLevel: al,
482483
}, g.WithContext(ctx)); err == nil {
483-
et = &models.TokenProject{
484-
TokenWithScopesAndAccessLevel: models.TokenWithScopesAndAccessLevel{
485-
Token: models.Token{
484+
et = &modelToken.TokenProject{
485+
TokenWithScopesAndAccessLevel: modelToken.TokenWithScopesAndAccessLevel{
486+
Token: modelToken.Token{
486487
TokenID: at.ID,
487488
ParentID: projectId,
488489
Path: projectId,
@@ -551,7 +552,7 @@ func (gc *gitlabClient) Valid(ctx context.Context) bool {
551552

552553
var _ Client = new(gitlabClient)
553554

554-
func newGitlabClient(config *EntryConfig, httpClient *http.Client) (gc *g.Client, err error) {
555+
func newGitlabClient(config *config2.EntryConfig, httpClient *http.Client) (gc *g.Client, err error) {
555556
if strings.TrimSpace(config.BaseURL) == "" {
556557
err = errors.Join(err, fmt.Errorf("gitlab base url: %w", errs.ErrInvalidValue))
557558
}
@@ -576,7 +577,7 @@ func newGitlabClient(config *EntryConfig, httpClient *http.Client) (gc *g.Client
576577
return g.NewClient(config.Token, opts...)
577578
}
578579

579-
func NewGitlabClient(config *EntryConfig, httpClient *http.Client, logger hclog.Logger) (client Client, err error) {
580+
func NewGitlabClient(config *config2.EntryConfig, httpClient *http.Client, logger hclog.Logger) (client Client, err error) {
580581
if config == nil {
581582
return nil, fmt.Errorf("configure the backend first, config: %w", errs.ErrNilValue)
582583
}

gitlab_client_iface.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,33 +6,33 @@ import (
66

77
g "gitlab.com/gitlab-org/api/client-go"
88

9-
"github.com/ilijamt/vault-plugin-secrets-gitlab/internal/models"
9+
"github.com/ilijamt/vault-plugin-secrets-gitlab/internal/model/token"
1010
t "github.com/ilijamt/vault-plugin-secrets-gitlab/internal/token"
1111
)
1212

1313
type Client interface {
1414
GitlabClient(ctx context.Context) *g.Client
1515
Valid(ctx context.Context) bool
1616
Metadata(ctx context.Context) (*g.Metadata, error)
17-
CurrentTokenInfo(ctx context.Context) (*models.TokenConfig, error)
18-
RotateCurrentToken(ctx context.Context) (newToken *models.TokenConfig, oldToken *models.TokenConfig, err error)
19-
CreatePersonalAccessToken(ctx context.Context, username string, userId int, name string, expiresAt time.Time, scopes []string) (*models.TokenPersonal, error)
20-
CreateGroupAccessToken(ctx context.Context, groupId string, name string, expiresAt time.Time, scopes []string, accessLevel t.AccessLevel) (*models.TokenGroup, error)
21-
CreateProjectAccessToken(ctx context.Context, projectId string, name string, expiresAt time.Time, scopes []string, accessLevel t.AccessLevel) (*models.TokenProject, error)
17+
CurrentTokenInfo(ctx context.Context) (*token.TokenConfig, error)
18+
RotateCurrentToken(ctx context.Context) (newToken *token.TokenConfig, oldToken *token.TokenConfig, err error)
19+
CreatePersonalAccessToken(ctx context.Context, username string, userId int, name string, expiresAt time.Time, scopes []string) (*token.TokenPersonal, error)
20+
CreateGroupAccessToken(ctx context.Context, groupId string, name string, expiresAt time.Time, scopes []string, accessLevel t.AccessLevel) (*token.TokenGroup, error)
21+
CreateProjectAccessToken(ctx context.Context, projectId string, name string, expiresAt time.Time, scopes []string, accessLevel t.AccessLevel) (*token.TokenProject, error)
2222
RevokePersonalAccessToken(ctx context.Context, tokenId int) error
2323
RevokeProjectAccessToken(ctx context.Context, tokenId int, projectId string) error
2424
RevokeGroupAccessToken(ctx context.Context, tokenId int, groupId string) error
2525
GetUserIdByUsername(ctx context.Context, username string) (int, error)
2626
GetGroupIdByPath(ctx context.Context, path string) (int, error)
2727
GetProjectIdByPath(ctx context.Context, path string) (int, error)
28-
CreateGroupServiceAccountAccessToken(ctx context.Context, group string, groupId string, userId int, name string, expiresAt time.Time, scopes []string) (*models.TokenGroupServiceAccount, error)
29-
CreateUserServiceAccountAccessToken(ctx context.Context, username string, userId int, name string, expiresAt time.Time, scopes []string) (*models.TokenUserServiceAccount, error)
28+
CreateGroupServiceAccountAccessToken(ctx context.Context, group string, groupId string, userId int, name string, expiresAt time.Time, scopes []string) (*token.TokenGroupServiceAccount, error)
29+
CreateUserServiceAccountAccessToken(ctx context.Context, username string, userId int, name string, expiresAt time.Time, scopes []string) (*token.TokenUserServiceAccount, error)
3030
RevokeUserServiceAccountAccessToken(ctx context.Context, token string) error
3131
RevokeGroupServiceAccountAccessToken(ctx context.Context, token string) error
32-
CreatePipelineProjectTriggerAccessToken(ctx context.Context, path, name string, projectId int, description string, expiresAt *time.Time) (*models.TokenPipelineProjectTrigger, error)
32+
CreatePipelineProjectTriggerAccessToken(ctx context.Context, path, name string, projectId int, description string, expiresAt *time.Time) (*token.TokenPipelineProjectTrigger, error)
3333
RevokePipelineProjectTriggerAccessToken(ctx context.Context, projectId int, tokenId int) error
34-
CreateProjectDeployToken(ctx context.Context, path string, projectId int, name string, expiresAt *time.Time, scopes []string) (et *models.TokenProjectDeploy, err error)
34+
CreateProjectDeployToken(ctx context.Context, path string, projectId int, name string, expiresAt *time.Time, scopes []string) (et *token.TokenProjectDeploy, err error)
3535
RevokeProjectDeployToken(ctx context.Context, projectId, deployTokenId int) (err error)
36-
CreateGroupDeployToken(ctx context.Context, path string, groupId int, name string, expiresAt *time.Time, scopes []string) (et *models.TokenGroupDeploy, err error)
36+
CreateGroupDeployToken(ctx context.Context, path string, groupId int, name string, expiresAt *time.Time, scopes []string) (et *token.TokenGroupDeploy, err error)
3737
RevokeGroupDeployToken(ctx context.Context, groupId, deployTokenId int) (err error)
3838
}

0 commit comments

Comments
 (0)