Skip to content

Commit 916052b

Browse files
Added methods for DeleteAPIKey, UpdateAPIKeyComment, GetAPIKeys. Added tests for GenerateAPIKey, DeleteAPIKey, UpdateAPIKeyComment. Added handling of text/plain body when making an API request.
1 parent 50c5c32 commit 916052b

File tree

3 files changed

+120
-1
lines changed

3 files changed

+120
-1
lines changed

client.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,10 @@ func withBody(body interface{}) requestOption {
209209
return err
210210
}
211211
contentType = "application/x-www-form-urlencoded"
212+
case string:
213+
bodyBuf = new(bytes.Buffer)
214+
io.WriteString(bodyBuf, body)
215+
contentType = "text/plain"
212216
default:
213217
bodyBuf = new(bytes.Buffer)
214218
if err := json.NewEncoder(bodyBuf).Encode(body); err != nil {

team.go

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,11 @@ type Team struct {
1717
}
1818

1919
type APIKey struct {
20-
Key string `json:"key"`
20+
Key string `json:"key"`
21+
Comment string `json:"comment"`
22+
Created int `json:"created"`
23+
LastUsed int `json:"lastUsed"`
24+
MaskedKey string `json:"maskedKey"`
2125
}
2226

2327
type TeamService struct {
@@ -61,6 +65,43 @@ func (ts TeamService) GenerateAPIKey(ctx context.Context, teamUUID uuid.UUID) (k
6165
return
6266
}
6367

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))
70+
if err != nil {
71+
return
72+
}
73+
_, err = ts.client.doRequest(req, nil)
74+
return
75+
}
76+
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))
79+
if err != nil {
80+
return
81+
}
82+
var apiKey APIKey
83+
_, err = ts.client.doRequest(req, &apiKey)
84+
commentOut = apiKey.Comment
85+
return
86+
}
87+
88+
func (ts TeamService) GetAPIKeys(ctx context.Context, teamUUID uuid.UUID) (keys []APIKey, err error) {
89+
keys = []APIKey{}
90+
err = ForEach(
91+
func(po PageOptions) (Page[Team], error) { return ts.GetAll(ctx, po) },
92+
func(item Team) error {
93+
if item.UUID != teamUUID {
94+
return nil
95+
}
96+
for _, key := range item.APIKeys {
97+
keys = append(keys, key)
98+
}
99+
return nil
100+
},
101+
)
102+
return keys, err
103+
}
104+
64105
func (ts TeamService) Create(ctx context.Context, team Team) (t Team, err error) {
65106
req, err := ts.client.newRequest(ctx, http.MethodPut, "/api/v1/team", withBody(team))
66107
if err != nil {

team_test.go

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package dtrack
2+
3+
import (
4+
"context"
5+
"github.com/stretchr/testify/require"
6+
"testing"
7+
)
8+
9+
func TestGenerateAPIKey(t *testing.T) {
10+
client := setUpContainer(t, testContainerOptions{
11+
APIPermissions: []string{
12+
PermissionAccessManagement,
13+
},
14+
})
15+
16+
team, err := client.Team.Create(context.Background(), Team{
17+
Name: "GenerateAPIKey",
18+
})
19+
require.NoError(t, err)
20+
21+
key, err := client.Team.GenerateAPIKey(context.Background(), team.UUID)
22+
require.NoError(t, err)
23+
24+
keys, err := client.Team.GetAPIKeys(context.Background(), team.UUID)
25+
require.Equal(t, len(keys), 1)
26+
require.Equal(t, keys[0].Key, key)
27+
}
28+
29+
func TestDeleteAPIKey(t *testing.T) {
30+
client := setUpContainer(t, testContainerOptions{
31+
APIPermissions: []string{
32+
PermissionAccessManagement,
33+
},
34+
})
35+
36+
team, err := client.Team.Create(context.Background(), Team{
37+
Name: "DeleteAPIKey",
38+
})
39+
require.NoError(t, err)
40+
41+
key, err := client.Team.GenerateAPIKey(context.Background(), team.UUID)
42+
require.NoError(t, err)
43+
44+
err = client.Team.DeleteAPIKey(context.Background(), key)
45+
require.NoError(t, err)
46+
47+
keys, err := client.Team.GetAPIKeys(context.Background(), team.UUID)
48+
require.Empty(t, keys)
49+
}
50+
51+
func TestUpdateAPIKeyComment(t *testing.T) {
52+
client := setUpContainer(t, testContainerOptions{
53+
APIPermissions: []string{
54+
PermissionAccessManagement,
55+
},
56+
})
57+
58+
team, err := client.Team.Create(context.Background(), Team{
59+
Name: "UpdateAPIKeyComment",
60+
})
61+
require.NoError(t, err)
62+
63+
key, err := client.Team.GenerateAPIKey(context.Background(), team.UUID)
64+
require.NoError(t, err)
65+
66+
comment, err := client.Team.UpdateAPIKeyComment(context.Background(), key, "test-comment")
67+
require.NoError(t, err)
68+
require.Equal(t, comment, "test-comment")
69+
70+
keys, err := client.Team.GetAPIKeys(context.Background(), team.UUID)
71+
require.Equal(t, len(keys), 1)
72+
require.Equal(t, keys[0].Key, key)
73+
require.Equal(t, keys[0].Comment, "test-comment")
74+
}

0 commit comments

Comments
 (0)