Skip to content

Commit 3edc87b

Browse files
Merge pull request #29 from Infisical/feat/add-caching-to-retrieve-secret
feat: add caching to retrieve secret
2 parents 4499b05 + 96d1156 commit 3edc87b

File tree

5 files changed

+29
-6
lines changed

5 files changed

+29
-6
lines changed

packages/api/secrets/list_secrets.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,15 @@ func CallListSecretsV3(cache *expirable.LRU[string, interface{}], httpClient *re
2020
if err != nil {
2121
return ListSecretsV3RawResponse{}, err
2222
}
23-
cacheKey = util.ComputeCacheKeyFromBytes(reqBytes)
23+
cacheKey = util.ComputeCacheKeyFromBytes(reqBytes, callListSecretsV3RawOperation)
2424
if cached, found := cache.Get(cacheKey); found {
2525
if response, ok := cached.(ListSecretsV3RawResponse); ok {
2626
return response, nil
2727
}
2828
cache.Remove(cacheKey)
2929
}
3030
}
31+
3132
secretsResponse := ListSecretsV3RawResponse{}
3233

3334
if request.SecretPath == "" {

packages/api/secrets/models.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ type ListSecretsV3RawResponse struct {
2424
// Retrieve secret
2525

2626
type RetrieveSecretV3RawRequest struct {
27-
SecretKey string `json:"-"`
27+
SecretKey string `json:"secretKey"`
2828

2929
ProjectID string `json:"workspaceId"`
3030
Environment string `json:"environment"`

packages/api/secrets/retrieve_secret.go

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,33 @@
11
package api
22

33
import (
4+
"encoding/json"
45
"fmt"
56

67
"github.com/go-resty/resty/v2"
8+
"github.com/hashicorp/golang-lru/v2/expirable"
79
"github.com/infisical/go-sdk/packages/errors"
10+
"github.com/infisical/go-sdk/packages/util"
811
)
912

1013
const callRetrieveSecretV3RawOperation = "CallRetrieveSecretV3Raw"
1114

12-
func CallRetrieveSecretV3(httpClient *resty.Client, request RetrieveSecretV3RawRequest) (RetrieveSecretV3RawResponse, error) {
15+
func CallRetrieveSecretV3(cache *expirable.LRU[string, interface{}], httpClient *resty.Client, request RetrieveSecretV3RawRequest) (RetrieveSecretV3RawResponse, error) {
16+
var cacheKey string
17+
18+
if cache != nil {
19+
reqBytes, err := json.Marshal(request)
20+
if err != nil {
21+
return RetrieveSecretV3RawResponse{}, err
22+
}
23+
cacheKey = util.ComputeCacheKeyFromBytes(reqBytes, callRetrieveSecretV3RawOperation)
24+
if cached, found := cache.Get(cacheKey); found {
25+
if response, ok := cached.(RetrieveSecretV3RawResponse); ok {
26+
return response, nil
27+
}
28+
cache.Remove(cacheKey)
29+
}
30+
}
1331

1432
retrieveResponse := RetrieveSecretV3RawResponse{}
1533

@@ -41,5 +59,9 @@ func CallRetrieveSecretV3(httpClient *resty.Client, request RetrieveSecretV3RawR
4159
return RetrieveSecretV3RawResponse{}, errors.NewAPIErrorWithResponse(callRetrieveSecretV3RawOperation, res)
4260
}
4361

62+
if cache != nil {
63+
cache.Add(cacheKey, retrieveResponse)
64+
}
65+
4466
return retrieveResponse, nil
4567
}

packages/util/helper.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ func SleepWithContext(ctx context.Context, duration time.Duration) error {
106106
}
107107
}
108108

109-
func ComputeCacheKeyFromBytes(bytes []byte) string {
109+
func ComputeCacheKeyFromBytes(bytes []byte, feature string) string {
110110
key := sha256.Sum256(bytes)
111-
return hex.EncodeToString(key[:])
111+
return fmt.Sprintf("%s-%s", feature, hex.EncodeToString(key[:]))
112112
}

secrets.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ func (s *Secrets) List(options ListSecretsOptions) ([]models.Secret, error) {
6565
}
6666

6767
func (s *Secrets) Retrieve(options RetrieveSecretOptions) (models.Secret, error) {
68-
res, err := api.CallRetrieveSecretV3(s.client.httpClient, options)
68+
res, err := api.CallRetrieveSecretV3(s.client.cache, s.client.httpClient, options)
6969

7070
if err != nil {
7171
return models.Secret{}, err

0 commit comments

Comments
 (0)