Skip to content

Commit 1ef7605

Browse files
feat: add Secret Manager fallback for API credentials
- Add `cloud.google.com/go/secretmanager` dependency. - Create `pkg/utils/secrets.go` to fetch secrets from Google Cloud Secret Manager. - Update `pkg/app/api_client.go` to check `GCLOUD_PROJECT_ID` and fetch credentials from Secret Manager if environment variables are missing. - Implement caching in `getAPIConfig` to avoid repeated Secret Manager calls. - Add `resetAPIConfigCache` helper for testing. - Update `pkg/app/test_utils_test.go` to reset config cache when setting mock env vars. - Add `TestGetAPIConfig_SecretManagerFallback` to verify fallback logic.
1 parent ae362a3 commit 1ef7605

2 files changed

Lines changed: 4 additions & 4 deletions

File tree

pkg/app/api_client.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ func getAPIConfig() (string, string) {
4646

4747
// If env vars are missing, try to fetch from Secret Manager
4848
if url == "" || key == "" {
49-
projectID := os.Getenv("GOOGLE_CLOUD_PROJECT")
49+
projectID := os.Getenv("GCLOUD_PROJECT_ID")
5050
if projectID != "" {
5151
if url == "" {
5252
var err error
@@ -63,7 +63,7 @@ func getAPIConfig() (string, string) {
6363
}
6464
}
6565
} else {
66-
log.Println("GOOGLE_CLOUD_PROJECT is not set, skipping Secret Manager lookup")
66+
log.Println("GCLOUD_PROJECT_ID is not set, skipping Secret Manager lookup")
6767
}
6868
}
6969

pkg/app/api_client_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ func TestSubmitQuery(t *testing.T) {
8888
restore := setEnv("BIBLE_API_URL", "")
8989
defer restore()
9090
// Also unset PROJECT_ID to avoid Secret Manager lookup
91-
defer setEnv("GOOGLE_CLOUD_PROJECT", "")()
91+
defer setEnv("GCLOUD_PROJECT_ID", "")()
9292

9393
req := QueryRequest{}
9494
var resp VerseResponse
@@ -103,7 +103,7 @@ func TestGetAPIConfig_SecretManagerFallback(t *testing.T) {
103103
// Ensure Env Vars are empty
104104
defer setEnv("BIBLE_API_URL", "")()
105105
defer setEnv("BIBLE_API_KEY", "")()
106-
defer setEnv("GOOGLE_CLOUD_PROJECT", "test-project")()
106+
defer setEnv("GCLOUD_PROJECT_ID", "test-project")()
107107

108108
// Mock the secret function
109109
oldGetSecret := getSecretFunc

0 commit comments

Comments
 (0)