Skip to content

Commit 5a3832d

Browse files
author
Martin Scott
authored
Add name filtering to ListSecrets API (#4341)
* #4340 add name filter to ListSecrets API Signed-off-by: Martin Scott <[email protected]>
1 parent a0d613e commit 5a3832d

File tree

6 files changed

+147
-7
lines changed

6 files changed

+147
-7
lines changed

api/external/secrets/secrets.pb.go

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/external/secrets/secrets.proto

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ service SecretsService {
138138
Makes a list of secrets.
139139
Supports filtering, pagination, and sorting.
140140
Adding a filter narrows the list of secrets to only those that match the filter or filters.
141-
Supported filters: type
141+
Supported filters: type, name
142142
Supported sort types: name, type, last modified
143143
144144
Example:

api/external/secrets/secrets.swagger.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

components/automate-gateway/api/secrets.pb.swagger.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

components/secrets-service/dao/secrets.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ import (
1818
"github.com/golang/protobuf/ptypes"
1919

2020
"github.com/chef/automate/api/external/common/query"
21-
"github.com/chef/automate/api/external/secrets"
2221
"github.com/chef/automate/api/external/lib/errorutils"
22+
"github.com/chef/automate/api/external/secrets"
2323
"github.com/chef/automate/lib/stringutils"
2424
)
2525

@@ -333,6 +333,7 @@ func (secretsDb *DB) GetSecrets(sortField string, insortOrder secrets.Query_Orde
333333

334334
var secretsFilterField = map[string]string{
335335
"type": "type",
336+
"name": "name",
336337
}
337338

338339
func validateSecretFilters(filters []*query.Filter) error {
@@ -351,7 +352,7 @@ func validateSecretFilters(filters []*query.Filter) error {
351352

352353
func isValidSecretType(secretType string) bool {
353354
switch secretType {
354-
case "ssh", "winrm", "sudo", "aws", "azure", "service_now":
355+
case "ssh", "winrm", "sudo", "aws", "azure", "service_now", "data_feed":
355356
return true
356357
default:
357358
return false

components/secrets-service/integration_test/list_secret_test.go

Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,3 +301,142 @@ func TestListSecretPaging(t *testing.T) {
301301

302302
deleteAllSecrets()
303303
}
304+
305+
func TestListSecretFilterByName(t *testing.T) {
306+
ctx := context.Background()
307+
308+
testData := struct {
309+
order secrets.Query_OrderType
310+
sort string
311+
inputSecrets []*secrets.Secret
312+
outputSecrets []*secrets.Secret
313+
message string
314+
}{
315+
316+
order: secrets.Query_ASC,
317+
sort: "name",
318+
inputSecrets: []*secrets.Secret{
319+
{
320+
Name: "data feed secret",
321+
Type: "data_feed",
322+
Data: appendKvs(
323+
&query.Kv{Key: "username", Value: "username"},
324+
&query.Kv{Key: "password", Value: "password"}),
325+
},
326+
{
327+
Name: "service now secret",
328+
Type: "service_now",
329+
Data: appendKvs(
330+
&query.Kv{Key: "username", Value: "username"},
331+
&query.Kv{Key: "password", Value: "password"}),
332+
},
333+
},
334+
outputSecrets: []*secrets.Secret{
335+
{
336+
Name: "data feed secret",
337+
Type: "data_feed",
338+
},
339+
},
340+
message: "Order asc",
341+
}
342+
343+
for _, secret := range testData.inputSecrets {
344+
id, err := secretsServer.Create(ctx, secret)
345+
assert.NoError(t, err)
346+
assert.NotNil(t, id)
347+
}
348+
349+
nameFilter := &query.Filter{
350+
Key: "name",
351+
Values: []string{"data feed secret"},
352+
}
353+
req := &secrets.Query{
354+
Order: testData.order,
355+
Sort: testData.sort,
356+
Filters: []*query.Filter{nameFilter},
357+
}
358+
359+
responseSecrets, err := secretsServer.List(ctx, req)
360+
assert.NoError(t, err, testData.message)
361+
assert.NotNil(t, responseSecrets)
362+
assert.Equal(t, len(testData.outputSecrets), int(responseSecrets.Total), testData.message)
363+
364+
for index, actualSecret := range responseSecrets.Secrets {
365+
expectedSecret := testData.outputSecrets[index]
366+
assert.Equal(t, actualSecret.Name, expectedSecret.Name, testData.message)
367+
assert.Equal(t, actualSecret.Type, expectedSecret.Type, testData.message)
368+
}
369+
370+
deleteAllSecrets()
371+
372+
}
373+
374+
375+
func TestListSecretFilterByType(t *testing.T) {
376+
ctx := context.Background()
377+
378+
testData := struct {
379+
order secrets.Query_OrderType
380+
sort string
381+
inputSecrets []*secrets.Secret
382+
outputSecrets []*secrets.Secret
383+
message string
384+
}{
385+
386+
order: secrets.Query_ASC,
387+
sort: "name",
388+
inputSecrets: []*secrets.Secret{
389+
{
390+
Name: "data feed secret",
391+
Type: "data_feed",
392+
Data: appendKvs(
393+
&query.Kv{Key: "username", Value: "username"},
394+
&query.Kv{Key: "password", Value: "password"}),
395+
},
396+
{
397+
Name: "service now secret",
398+
Type: "service_now",
399+
Data: appendKvs(
400+
&query.Kv{Key: "username", Value: "username"},
401+
&query.Kv{Key: "password", Value: "password"}),
402+
},
403+
},
404+
outputSecrets: []*secrets.Secret{
405+
{
406+
Name: "data feed secret",
407+
Type: "data_feed",
408+
},
409+
},
410+
message: "Order asc",
411+
}
412+
413+
for _, secret := range testData.inputSecrets {
414+
id, err := secretsServer.Create(ctx, secret)
415+
assert.NoError(t, err)
416+
assert.NotNil(t, id)
417+
}
418+
419+
typeFilter := &query.Filter{
420+
Key: "type",
421+
Values: []string{"data_feed"},
422+
}
423+
req := &secrets.Query{
424+
Order: testData.order,
425+
Sort: testData.sort,
426+
Filters: []*query.Filter{typeFilter},
427+
}
428+
429+
responseSecrets, err := secretsServer.List(ctx, req)
430+
assert.NoError(t, err, testData.message)
431+
assert.NotNil(t, responseSecrets)
432+
assert.Equal(t, len(testData.outputSecrets), int(responseSecrets.Total), testData.message)
433+
434+
for index, actualSecret := range responseSecrets.Secrets {
435+
expectedSecret := testData.outputSecrets[index]
436+
assert.Equal(t, actualSecret.Name, expectedSecret.Name, testData.message)
437+
assert.Equal(t, actualSecret.Type, expectedSecret.Type, testData.message)
438+
}
439+
440+
deleteAllSecrets()
441+
442+
}

0 commit comments

Comments
 (0)