/
list_secrets.go
87 lines (71 loc) · 1.83 KB
/
list_secrets.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package actions
import (
"os"
"strings"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/secretsmanager"
)
var filterNames []string
func GetFilterNames() []string {
if filterNames != nil {
return filterNames
}
names := os.Getenv("FILTER_NAMES")
if names == "" {
filterNames = []string{}
} else {
filterNames = strings.Split(names, ",")
}
return filterNames
}
func getFilerNamesSecret(listFilterNames []string) *secretsmanager.Filter {
keyName := "name"
nameFilters := &secretsmanager.Filter{
Key: &keyName,
Values: make([]*string, len(listFilterNames)),
}
for i := range listFilterNames {
nameFilters.Values[i] = &listFilterNames[i]
}
return nameFilters
}
func GetListSecrets(region string) ([]*secretsmanager.SecretListEntry, error) {
svc := secretsmanager.New(session.New(&aws.Config{
Region: aws.String(region),
}))
maxResult := int64(100)
index := 0
var token *string
secrets := []*secretsmanager.SecretListEntry{}
for ; token != nil || index == 0; index++ {
result, err := GetAPageSecrets(svc, token, maxResult)
if err != nil {
return nil, err
}
secrets = append(secrets, result.SecretList...)
token = result.NextToken
}
return secrets, nil
}
func GetAPageSecrets(svc *secretsmanager.SecretsManager, token *string, maxResult int64) (*secretsmanager.ListSecretsOutput, error) {
input := &secretsmanager.ListSecretsInput{
MaxResults: &maxResult,
NextToken: token,
}
filterNames := GetFilterNames()
var filterNamesSecret *secretsmanager.Filter
if len(filterNames) > 0 {
filterNamesSecret = getFilerNamesSecret(filterNames)
}
if filterNamesSecret != nil {
input.Filters = []*secretsmanager.Filter{
filterNamesSecret,
}
}
result, err := svc.ListSecrets(input)
if err != nil {
return nil, err
}
return result, nil
}