@@ -13,15 +13,16 @@ import (
1313)
1414
1515const (
16- serviceCredSecretKeyPrefix = "SERVICE-CRED"
17- certSecretKeyPrefix = "CERTS"
18-
19- caDataKey = "ca.pem"
20- certDataKey = "cert.crt"
21- keyDataKey = "key.key"
22-
23- serviceCredentialUserNameKey = "userName"
24- serviceCredentialPasswordKey = "password"
16+ serviceCredSecretKeyPrefix = "SERVICE-CRED"
17+ certSecretKeyPrefix = "CERTS"
18+ genericSecretKeyPrefix = "GENERIC"
19+ caDataKey = "ca.pem"
20+ certDataKey = "cert.crt"
21+ keyDataKey = "key.key"
22+ genericCredentialClusterIdKey = "clusterId"
23+ genericCredentialTokenKey = "token"
24+ serviceCredentialUserNameKey = "userName"
25+ serviceCredentialPasswordKey = "password"
2526)
2627
2728type CertificateData struct {
@@ -38,7 +39,12 @@ type ServiceCredentail struct {
3839 Password string `json:"password"`
3940 AdditionalData map [string ]string `json:"additionalData"`
4041}
41-
42+ type GenericCredential struct {
43+ CredentialType string `json:"credentialType"`
44+ EntityName string `json:"entityName"`
45+ CredIndentifier string `json:"credIndetifier"`
46+ Credential map [string ]string `json:"credential"`
47+ }
4248type VaultCredSync struct {
4349 log logging.Logger
4450 conf config.VaultEnv
@@ -76,7 +82,7 @@ func (v *VaultCredSync) Run() {
7682 v .log .Debugf ("failed to read sync secret, %s" , err )
7783 return
7884 }
79- v .log .Debugf ("found %d secret values to synch " , len (secretValues ))
85+ v .log .Debugf ("found %d secret values to sync " , len (secretValues ))
8086
8187 vc , err := client .NewVaultClientForVaultToken (v .log , v .conf )
8288 if err != nil {
@@ -97,7 +103,16 @@ func (v *VaultCredSync) Run() {
97103 v .log .Errorf ("%s" , err )
98104 continue
99105 }
106+ } else if strings .HasPrefix (key , genericSecretKeyPrefix ) {
107+ err = v .storeGenericCredential (ctx , vc , key , secretValue )
108+ if err != nil {
109+ v .log .Errorf ("%s" , err )
110+ continue
111+ }
112+ } else {
113+ v .log .Infof ("credentail type %s not supported" , key )
100114 }
115+
101116 }
102117 v .log .Debug ("vault credential sync job completed" )
103118}
@@ -124,7 +139,7 @@ func (v *VaultCredSync) storeServiceCredential(ctx context.Context, vc *client.V
124139 if err != nil {
125140 return errors .WithMessagef (err , "failed to write %s secret data to vault" , secretIdentifier )
126141 }
127- v .log .Infof ("stored sync credential for %s: %s" , serviceCredData .EntityName , serviceCredData .UserName )
142+ v .log .Infof ("stored sync service credential for %s/ %s" , serviceCredData .EntityName , serviceCredData .UserName )
128143 return nil
129144}
130145
@@ -149,6 +164,32 @@ func (v *VaultCredSync) storeCertData(ctx context.Context, vc *client.VaultClien
149164 if err != nil {
150165 return errors .WithMessagef (err , "failed to write %s secret data to vault" , secretIdentifier )
151166 }
152- v .log .Infof ("stored sync cert for %s: %s" , certData .EntityName , certData .CertIndentifier )
167+ v .log .Infof ("stored sync cert for %s/ %s" , certData .EntityName , certData .CertIndentifier )
153168 return nil
154169}
170+
171+ func (v * VaultCredSync ) storeGenericCredential (ctx context.Context , vc * client.VaultClient , secretIdentifier , secretData string ) error {
172+ var genericCredData GenericCredential
173+ err := json .Unmarshal ([]byte (secretData ), & genericCredData )
174+ if err != nil {
175+ return errors .WithMessagef (err , "failed to parse %s secret data" , secretIdentifier )
176+ }
177+
178+ if len (genericCredData .EntityName ) == 0 || len (genericCredData .CredIndentifier ) == 0 || len (genericCredData .CredentialType ) == 0 {
179+ return errors .WithMessagef (err , "credential attributes are emty for %s secret data" , secretIdentifier )
180+ }
181+
182+ cred := map [string ]string {}
183+ for key , val := range genericCredData .Credential {
184+ cred [key ] = val
185+ }
186+
187+ secretPath := api .PrepareCredentialSecretPath (strings .ToLower (genericSecretKeyPrefix ), genericCredData .EntityName , genericCredData .CredIndentifier )
188+ err = vc .PutCredential (ctx , api .CredentialMountPath (), secretPath , cred )
189+ if err != nil {
190+ return errors .WithMessagef (err , "failed to write %s secret data to vault" , secretIdentifier )
191+ }
192+ v .log .Infof ("stored sync credential for %s/%s/%s" , strings .ToLower (genericSecretKeyPrefix ), genericCredData .EntityName , genericCredData .CredIndentifier )
193+ return nil
194+
195+ }
0 commit comments