Skip to content

Commit d1e1059

Browse files
feat: update API key handling for API v4.13+ (#41)
1 parent e52125c commit d1e1059

File tree

3 files changed

+112
-14
lines changed

3 files changed

+112
-14
lines changed

about_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ func setUpContainer(t *testing.T, options testContainerOptions) *Client {
9191
apiKey, err := client.Team.GenerateAPIKey(ctx, team.UUID)
9292
require.NoError(t, err)
9393

94-
client, err = NewClient(apiURL, WithAPIKey(apiKey))
94+
client, err = NewClient(apiURL, WithAPIKey(apiKey.Key))
9595
require.NoError(t, err)
9696

9797
return client

team.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ type APIKey struct {
2222
Created int `json:"created"`
2323
LastUsed int `json:"lastUsed"`
2424
MaskedKey string `json:"maskedKey"`
25+
PublicId string `json:"publicId"` // Since 4.13
26+
Legacy bool `json:"legacy"` // Since 4.13
2527
}
2628

2729
type TeamService struct {
@@ -53,29 +55,27 @@ func (ts TeamService) GetAll(ctx context.Context, po PageOptions) (p Page[Team],
5355
return
5456
}
5557

56-
func (ts TeamService) GenerateAPIKey(ctx context.Context, teamUUID uuid.UUID) (key string, err error) {
58+
func (ts TeamService) GenerateAPIKey(ctx context.Context, teamUUID uuid.UUID) (apiKey APIKey, err error) {
5759
req, err := ts.client.newRequest(ctx, http.MethodPut, fmt.Sprintf("/api/v1/team/%s/key", teamUUID))
5860
if err != nil {
5961
return
6062
}
6163

62-
var apiKey APIKey
6364
_, err = ts.client.doRequest(req, &apiKey)
64-
key = apiKey.Key
6565
return
6666
}
6767

68-
func (ts TeamService) DeleteAPIKey(ctx context.Context, key string) (err error) {
69-
req, err := ts.client.newRequest(ctx, http.MethodDelete, fmt.Sprintf("/api/v1/team/key/%s", key))
68+
func (ts TeamService) DeleteAPIKey(ctx context.Context, publicIdOrKey string) (err error) {
69+
req, err := ts.client.newRequest(ctx, http.MethodDelete, fmt.Sprintf("/api/v1/team/key/%s", publicIdOrKey))
7070
if err != nil {
7171
return
7272
}
7373
_, err = ts.client.doRequest(req, nil)
7474
return
7575
}
7676

77-
func (ts TeamService) UpdateAPIKeyComment(ctx context.Context, key, comment string) (commentOut string, err error) {
78-
req, err := ts.client.newRequest(ctx, http.MethodPost, fmt.Sprintf("/api/v1/team/key/%s/comment", key), withBody(comment))
77+
func (ts TeamService) UpdateAPIKeyComment(ctx context.Context, publicIdOrKey, comment string) (commentOut string, err error) {
78+
req, err := ts.client.newRequest(ctx, http.MethodPost, fmt.Sprintf("/api/v1/team/key/%s/comment", publicIdOrKey), withBody(comment))
7979
if err != nil {
8080
return
8181
}

team_test.go

Lines changed: 104 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,40 @@ package dtrack
22

33
import (
44
"context"
5-
"github.com/stretchr/testify/require"
5+
"strings"
66
"testing"
7+
8+
"github.com/stretchr/testify/require"
79
)
810

11+
func TestGenerateAPIKey_v4_12(t *testing.T) {
12+
client := setUpContainer(t, testContainerOptions{
13+
Version: "4.12.7",
14+
APIPermissions: []string{
15+
PermissionAccessManagement,
16+
},
17+
})
18+
19+
team, err := client.Team.Create(context.Background(), Team{
20+
Name: "GenerateAPIKey_v4_12",
21+
})
22+
require.NoError(t, err)
23+
24+
key, err := client.Team.GenerateAPIKey(context.Background(), team.UUID)
25+
require.NoError(t, err)
26+
27+
keys, err := client.Team.GetAPIKeys(context.Background(), team.UUID)
28+
require.NoError(t, err)
29+
require.Equal(t, len(keys), 1)
30+
require.Equal(t, keys[0].Key, key.Key)
31+
require.Equal(t, keys[0].MaskedKey, key.MaskedKey)
32+
require.Equal(t, keys[0].Comment, "")
33+
require.Equal(t, key.Comment, "")
34+
require.Equal(t, keys[0].Created, key.Created)
35+
require.Equal(t, len(key.Key), 36)
36+
require.Equal(t, len(key.MaskedKey), 36)
37+
}
38+
939
func TestGenerateAPIKey(t *testing.T) {
1040
client := setUpContainer(t, testContainerOptions{
1141
APIPermissions: []string{
@@ -24,7 +54,42 @@ func TestGenerateAPIKey(t *testing.T) {
2454
keys, err := client.Team.GetAPIKeys(context.Background(), team.UUID)
2555
require.NoError(t, err)
2656
require.Equal(t, len(keys), 1)
27-
require.Equal(t, keys[0].Key, key)
57+
require.Equal(t, keys[0].PublicId, key.PublicId)
58+
require.Equal(t, keys[0].Comment, key.Comment)
59+
require.Equal(t, keys[0].Created, key.Created)
60+
require.Equal(t, keys[0].MaskedKey, key.MaskedKey)
61+
require.Equal(t, keys[0].Key, "")
62+
require.Equal(t, keys[0].Legacy, false)
63+
require.Equal(t, len(keys[0].PublicId), 8)
64+
require.Equal(t, keys[0].MaskedKey, "odt_"+key.PublicId+strings.Repeat("*", 32))
65+
}
66+
67+
func TestDeleteAPIKey_v4_12(t *testing.T) {
68+
client := setUpContainer(t, testContainerOptions{
69+
Version: "4.12.7",
70+
APIPermissions: []string{
71+
PermissionAccessManagement,
72+
},
73+
})
74+
75+
team, err := client.Team.Create(context.Background(), Team{
76+
Name: "DeleteAPIKey_v4_12",
77+
})
78+
require.NoError(t, err)
79+
80+
key, err := client.Team.GenerateAPIKey(context.Background(), team.UUID)
81+
require.NoError(t, err)
82+
83+
keys, err := client.Team.GetAPIKeys(context.Background(), team.UUID)
84+
require.NoError(t, err)
85+
require.Equal(t, len(keys), 1)
86+
87+
err = client.Team.DeleteAPIKey(context.Background(), key.Key)
88+
require.NoError(t, err)
89+
90+
keys, err = client.Team.GetAPIKeys(context.Background(), team.UUID)
91+
require.NoError(t, err)
92+
require.Empty(t, keys)
2893
}
2994

3095
func TestDeleteAPIKey(t *testing.T) {
@@ -42,14 +107,46 @@ func TestDeleteAPIKey(t *testing.T) {
42107
key, err := client.Team.GenerateAPIKey(context.Background(), team.UUID)
43108
require.NoError(t, err)
44109

45-
err = client.Team.DeleteAPIKey(context.Background(), key)
110+
keys, err := client.Team.GetAPIKeys(context.Background(), team.UUID)
111+
require.NoError(t, err)
112+
require.Equal(t, len(keys), 1)
113+
114+
err = client.Team.DeleteAPIKey(context.Background(), key.PublicId)
46115
require.NoError(t, err)
47116

48-
keys, err := client.Team.GetAPIKeys(context.Background(), team.UUID)
117+
keys, err = client.Team.GetAPIKeys(context.Background(), team.UUID)
49118
require.NoError(t, err)
50119
require.Empty(t, keys)
51120
}
52121

122+
func TestUpdateAPIKeyComment_v4_12(t *testing.T) {
123+
client := setUpContainer(t, testContainerOptions{
124+
Version: "4.12.7",
125+
APIPermissions: []string{
126+
PermissionAccessManagement,
127+
},
128+
})
129+
130+
team, err := client.Team.Create(context.Background(), Team{
131+
Name: "UpdateAPIKeyComment_v4_12",
132+
})
133+
require.NoError(t, err)
134+
135+
key, err := client.Team.GenerateAPIKey(context.Background(), team.UUID)
136+
require.NoError(t, err)
137+
require.Equal(t, key.Comment, "")
138+
139+
comment, err := client.Team.UpdateAPIKeyComment(context.Background(), key.Key, "test-comment")
140+
require.NoError(t, err)
141+
require.Equal(t, comment, "test-comment")
142+
143+
keys, err := client.Team.GetAPIKeys(context.Background(), team.UUID)
144+
require.NoError(t, err)
145+
require.Equal(t, len(keys), 1)
146+
require.Equal(t, keys[0].Key, key.Key)
147+
require.Equal(t, keys[0].Comment, "test-comment")
148+
}
149+
53150
func TestUpdateAPIKeyComment(t *testing.T) {
54151
client := setUpContainer(t, testContainerOptions{
55152
APIPermissions: []string{
@@ -64,14 +161,15 @@ func TestUpdateAPIKeyComment(t *testing.T) {
64161

65162
key, err := client.Team.GenerateAPIKey(context.Background(), team.UUID)
66163
require.NoError(t, err)
164+
require.Equal(t, key.Comment, "")
67165

68-
comment, err := client.Team.UpdateAPIKeyComment(context.Background(), key, "test-comment")
166+
comment, err := client.Team.UpdateAPIKeyComment(context.Background(), key.PublicId, "test-comment")
69167
require.NoError(t, err)
70168
require.Equal(t, comment, "test-comment")
71169

72170
keys, err := client.Team.GetAPIKeys(context.Background(), team.UUID)
73171
require.NoError(t, err)
74172
require.Equal(t, len(keys), 1)
75-
require.Equal(t, keys[0].Key, key)
173+
require.Equal(t, keys[0].PublicId, key.PublicId)
76174
require.Equal(t, keys[0].Comment, "test-comment")
77175
}

0 commit comments

Comments
 (0)