Skip to content

Commit c629f07

Browse files
committed
changes endpoint to return all pk details
1 parent 1a019bb commit c629f07

File tree

4 files changed

+56
-39
lines changed

4 files changed

+56
-39
lines changed

codersdk/provisionerdaemons.go

+9-7
Original file line numberDiff line numberDiff line change
@@ -368,21 +368,23 @@ func (c *Client) ListProvisionerKeys(ctx context.Context, organizationID uuid.UU
368368
return resp, json.NewDecoder(res.Body).Decode(&resp)
369369
}
370370

371-
// FetchProvisionerTagsByKey returns the provisioner tags associated with the provisioner key.
372-
func (c *Client) FetchProvisionerTagsByKey(ctx context.Context, organizationID uuid.UUID, provisionerKey string) (ProvisionerKeyTags, error) {
371+
// GetProvisionerKey returns the provisioner key.
372+
func (c *Client) GetProvisionerKey(ctx context.Context, pk string) (ProvisionerKey, error) {
373373
res, err := c.Request(ctx, http.MethodGet,
374-
fmt.Sprintf("/api/v2/organizations/%s/provisionerkeys/%s/tags", organizationID.String(), provisionerKey),
375-
nil,
374+
fmt.Sprintf("/api/v2/provisionerkeys/%s", pk), nil,
375+
func(req *http.Request) {
376+
req.Header.Add(ProvisionerDaemonKey, pk)
377+
},
376378
)
377379
if err != nil {
378-
return nil, xerrors.Errorf("make request: %w", err)
380+
return ProvisionerKey{}, xerrors.Errorf("make request: %w", err)
379381
}
380382
defer res.Body.Close()
381383

382384
if res.StatusCode != http.StatusOK {
383-
return nil, ReadBodyAsError(res)
385+
return ProvisionerKey{}, ReadBodyAsError(res)
384386
}
385-
var resp ProvisionerKeyTags
387+
var resp ProvisionerKey
386388
return resp, json.NewDecoder(res.Body).Decode(&resp)
387389
}
388390

enterprise/coderd/coderd.go

+9-1
Original file line numberDiff line numberDiff line change
@@ -339,6 +339,15 @@ func New(ctx context.Context, options *Options) (_ *API, err error) {
339339
r.Get("/", api.groupByOrganization)
340340
})
341341
})
342+
r.Route("/provisionerkeys", func(r chi.Router) {
343+
r.Use(
344+
httpmw.ExtractProvisionerDaemonAuthenticated(httpmw.ExtractProvisionerAuthConfig{
345+
DB: api.Database,
346+
Optional: false,
347+
}),
348+
)
349+
r.Get("/{provisionerkey}", api.getProvisionerKey)
350+
})
342351
r.Route("/organizations/{organization}/provisionerkeys", func(r chi.Router) {
343352
r.Use(
344353
apiKeyMiddleware,
@@ -352,7 +361,6 @@ func New(ctx context.Context, options *Options) (_ *API, err error) {
352361
r.Use(
353362
httpmw.ExtractProvisionerKeyParam(options.Database),
354363
)
355-
r.Get("/tags", api.fetchProvisionerKeyTags)
356364
r.Delete("/", api.deleteProvisionerKey)
357365
})
358366
})

enterprise/coderd/provisionerkeys.go

+28-21
Original file line numberDiff line numberDiff line change
@@ -200,35 +200,42 @@ func (api *API) deleteProvisionerKey(rw http.ResponseWriter, r *http.Request) {
200200
httpapi.Write(ctx, rw, http.StatusNoContent, nil)
201201
}
202202

203-
// @Summary Get provisioner key tags by ID
204-
// @ID get-provisioner-key-tags-by-id
205-
// @Security CoderSessionToken
203+
// @Summary Get provisioner key details
204+
// @ID get-provisioner-key
205+
// @Security CoderProvisionerDaemonKey
206206
// @Produce json
207207
// @Tags Enterprise
208-
// @Param organization path string true "Organization ID"
209208
// @Param provisionerkey path string true "Provisioner Key"
210-
// @Success 200 {object} codersdk.ProvisionerKeyTags
211-
// @Router /organizations/{organization}/provisionerkeys/{provisionerkey}/tags [get]
212-
func (*API) fetchProvisionerKeyTags(rw http.ResponseWriter, r *http.Request) {
213-
var (
214-
ctx = r.Context()
215-
pk = httpmw.ProvisionerKeyParam(r)
216-
)
217-
218-
httpapi.Write(ctx, rw, http.StatusOK, codersdk.ProvisionerKeyTags(pk.Tags))
209+
// @Success 200 {object} codersdk.ProvisionerKey
210+
// @Router provisionerkeys/{provisionerkey} [get]
211+
func (*API) getProvisionerKey(rw http.ResponseWriter, r *http.Request) {
212+
ctx := r.Context()
213+
214+
pk, ok := httpmw.ProvisionerKeyAuthOptional(r)
215+
// extra check but this one should never happen as it is covered by the auth middleware
216+
if !ok {
217+
httpapi.Forbidden(rw)
218+
return
219+
}
220+
221+
httpapi.Write(ctx, rw, http.StatusOK, convertProvisionerKey(pk))
222+
}
223+
224+
func convertProvisionerKey(dbKey database.ProvisionerKey) codersdk.ProvisionerKey {
225+
return codersdk.ProvisionerKey{
226+
ID: dbKey.ID,
227+
CreatedAt: dbKey.CreatedAt,
228+
OrganizationID: dbKey.OrganizationID,
229+
Name: dbKey.Name,
230+
Tags: codersdk.ProvisionerKeyTags(dbKey.Tags),
231+
// HashedSecret - never include the access token in the API response
232+
}
219233
}
220234

221235
func convertProvisionerKeys(dbKeys []database.ProvisionerKey) []codersdk.ProvisionerKey {
222236
keys := make([]codersdk.ProvisionerKey, 0, len(dbKeys))
223237
for _, dbKey := range dbKeys {
224-
keys = append(keys, codersdk.ProvisionerKey{
225-
ID: dbKey.ID,
226-
CreatedAt: dbKey.CreatedAt,
227-
OrganizationID: dbKey.OrganizationID,
228-
Name: dbKey.Name,
229-
Tags: codersdk.ProvisionerKeyTags(dbKey.Tags),
230-
// HashedSecret - never include the access token in the API response
231-
})
238+
keys = append(keys, convertProvisionerKey(dbKey))
232239
}
233240

234241
slices.SortFunc(keys, func(key1, key2 codersdk.ProvisionerKey) int {

enterprise/coderd/provisionerkeys_test.go

+10-10
Original file line numberDiff line numberDiff line change
@@ -134,12 +134,12 @@ func TestProvisionerKeys(t *testing.T) {
134134
require.ErrorContains(t, err, "reserved")
135135
}
136136

137-
func TestProvisionerKeyTags(t *testing.T) {
137+
func TestProvisionerKey(t *testing.T) {
138138
t.Parallel()
139-
t.Run("GetTags", func(t *testing.T) {
139+
t.Run("GetKey", func(t *testing.T) {
140140
t.Parallel()
141141

142-
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong*10)
142+
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitShort)
143143
t.Cleanup(cancel)
144144
dv := coderdtest.DeploymentValues(t)
145145
client, owner := coderdenttest.New(t, &coderdenttest.Options{
@@ -153,18 +153,18 @@ func TestProvisionerKeyTags(t *testing.T) {
153153
},
154154
})
155155

156-
//nolint:gocritic // Not the purpose of this test
157-
_, err := client.CreateProvisionerKey(ctx, owner.OrganizationID, codersdk.CreateProvisionerKeyRequest{
158-
Name: "key",
156+
key, err := client.CreateProvisionerKey(ctx, owner.OrganizationID, codersdk.CreateProvisionerKeyRequest{
157+
Name: "my-test-key",
159158
Tags: map[string]string{"key1": "value1", "key2": "value2"},
160159
})
161160
require.NoError(t, err)
162161

163-
tags, err := client.FetchProvisionerTagsByKey(ctx, owner.OrganizationID, "key")
162+
_, err = client.GetProvisionerKey(ctx, key.Key)
164163
require.NoError(t, err)
165-
require.Equal(t, tags, codersdk.ProvisionerKeyTags{"key1": "value1", "key2": "value2"})
164+
// require.Equal(t, tags, codersdk.ProvisionerKeyTags{"key1": "value1", "key2": "value2"})
166165

167-
_, err = client.FetchProvisionerTagsByKey(ctx, owner.OrganizationID, "invalid_key")
168-
require.ErrorContains(t, err, "Resource not found")
166+
erroneousPK, err := client.GetProvisionerKey(ctx, "abcdefghijklmnopqrstuvwxyz01234567890123456")
167+
require.Empty(t, erroneousPK)
168+
require.Error(t, err)
169169
})
170170
}

0 commit comments

Comments
 (0)