12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- package loadenv
- import (
- "context"
- "errors"
- "fmt"
- "os"
- "time"
- secretmanager "cloud.google.com/go/secretmanager/apiv1"
- "cloud.google.com/go/secretmanager/apiv1/secretmanagerpb"
- "github.com/DarthSim/godotenv"
- "google.golang.org/api/option"
- )
- func loadGCPSecret() error {
- secretID := os.Getenv("IMGPROXY_ENV_GCP_SECRET_ID")
- secretVersion := os.Getenv("IMGPROXY_ENV_GCP_SECRET_VERSION_ID")
- secretProject := os.Getenv("IMGPROXY_ENV_GCP_SECRET_PROJECT_ID")
- secretKey := os.Getenv("IMGPROXY_ENV_GCP_KEY")
- if len(secretID) == 0 {
- return nil
- }
- if len(secretVersion) == 0 {
- secretVersion = "latest"
- }
- var (
- client *secretmanager.Client
- err error
- )
- ctx, ctxcancel := context.WithTimeout(context.Background(), time.Minute)
- defer ctxcancel()
- opts := []option.ClientOption{}
- if len(secretKey) > 0 {
- opts = append(opts, option.WithCredentialsJSON([]byte(secretKey)))
- }
- client, err = secretmanager.NewClient(ctx, opts...)
- if err != nil {
- return fmt.Errorf("Can't create Google Cloud Secret Manager client: %s", err)
- }
- req := secretmanagerpb.AccessSecretVersionRequest{
- Name: fmt.Sprintf("projects/%s/secrets/%s/versions/%s", secretProject, secretID, secretVersion),
- }
- resp, err := client.AccessSecretVersion(ctx, &req)
- if err != nil {
- return fmt.Errorf("Can't get Google Cloud Secret Manager secret: %s", err)
- }
- payload := resp.GetPayload()
- if payload == nil {
- return errors.New("Can't get Google Cloud Secret Manager secret: payload is empty")
- }
- data := payload.GetData()
- if len(data) == 0 {
- return nil
- }
- envmap, err := godotenv.Unmarshal(string(data))
- if err != nil {
- return fmt.Errorf("Can't parse config from Google Cloud Secrets Manager: %s", err)
- }
- for k, v := range envmap {
- if err = os.Setenv(k, v); err != nil {
- return fmt.Errorf("Can't set %s env variable from Google Cloud Secrets Manager: %s", k, err)
- }
- }
- return nil
- }
|