diff --git a/README.md b/README.md index c23d62c5..58ea4afd 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,7 @@ Here are some examples: - `azkv:example.vault.azure.net/secret-sauce` references the latest value of the `secret-sauce` secret in the `example` Key Vault. -- `azkv:example.vault.azure.net/secret-sauce/5ddc29704c1c4429a4c53605b7949100` +- `azkv:example.vault.azure.net/secret-sauce#5ddc29704c1c4429a4c53605b7949100` references a specific version of the `secret-sauce` secret in the `example` Key Vault. @@ -96,7 +96,7 @@ Here are some examples: - `gcpsm:example/secret-sauce` references the latest value of the `secret-sauce` secret in the `example` project. -- `gcpsm:example/secret-sauce/123` references a specific version of the +- `gcpsm:example/secret-sauce#123` references a specific version of the - `secret-sauce` secret in the `example` project. Whisper uses the environment's default credentials to authenticate to Google diff --git a/internal/clients/azkv/client.go b/internal/clients/azkv/client.go index 6d4f6802..82dd181e 100644 --- a/internal/clients/azkv/client.go +++ b/internal/clients/azkv/client.go @@ -71,13 +71,22 @@ func (c *client) createClientIfMissing(vault string) { } func parseRef(ref string) (vaultURL, name, version string, err error) { - parts := strings.SplitN(ref, "/", 3) - switch { - case len(parts) < 2: - return "", "", "", errors.New("not enough information") - case len(parts) < 3: - return parts[0], parts[1], "", nil - default: - return parts[0], parts[1], parts[2], nil + refParts := strings.SplitN(ref, "#", 2) + if len(refParts) < 1 { + return "", "", "", errors.New("invalid syntax") } + fullname := refParts[0] + version = "" + if len(refParts) == 2 { + version = refParts[1] + } + + fullnameParts := strings.SplitN(fullname, "/", 2) + if len(fullnameParts) < 2 { + return "", "", "", errors.New("invalid syntax") + } + vaultURL = fullnameParts[0] + name = fullnameParts[1] + + return vaultURL, name, version, nil } diff --git a/internal/clients/azkv/e2e_test.go b/internal/clients/azkv/e2e_test.go index bb60e21e..e4cff64c 100644 --- a/internal/clients/azkv/e2e_test.go +++ b/internal/clients/azkv/e2e_test.go @@ -32,12 +32,12 @@ func TestClient(t *testing.T) { wantErr: false, }, { - ref: "whisper-alpha.vault.azure.net/secret-sauce/0c2fd54cde7e494faad53882524d358f", + ref: "whisper-alpha.vault.azure.net/secret-sauce#0c2fd54cde7e494faad53882524d358f", wantVal: "szechuan", wantErr: false, }, { - ref: "whisper-alpha.vault.azure.net/secret-sauce/73f5e5ff35a44cdab53b7a34c18da367", + ref: "whisper-alpha.vault.azure.net/secret-sauce#73f5e5ff35a44cdab53b7a34c18da367", wantVal: "ketchup", wantErr: false, }, @@ -54,12 +54,12 @@ func TestClient(t *testing.T) { wantErr: false, }, { - ref: "whisper-bravo.vault.azure.net/secret-sauce/b5f5287b95b24491a7ec5bb6a19ff341", + ref: "whisper-bravo.vault.azure.net/secret-sauce#b5f5287b95b24491a7ec5bb6a19ff341", wantVal: "szechuan", wantErr: false, }, { - ref: "whisper-bravo.vault.azure.net/secret-sauce/03bb1bf7a5b44bb28508a6de043faf3c", + ref: "whisper-bravo.vault.azure.net/secret-sauce#03bb1bf7a5b44bb28508a6de043faf3c", wantVal: "ketchup", wantErr: false, }, diff --git a/internal/clients/gcpsm/client.go b/internal/clients/gcpsm/client.go index 1f60b562..7184e07a 100644 --- a/internal/clients/gcpsm/client.go +++ b/internal/clients/gcpsm/client.go @@ -48,13 +48,22 @@ func (c *client) Close() error { } func parseRef(ref string) (project, name, version string, err error) { - parts := strings.SplitN(ref, "/", 3) - switch { - case len(parts) < 2: - return "", "", "", errors.New("not enough information") - case len(parts) < 3: - return parts[0], parts[1], "latest", nil - default: - return parts[0], parts[1], parts[2], nil + refParts := strings.SplitN(ref, "#", 2) + if len(refParts) < 1 { + return "", "", "", errors.New("invalid syntax") } + fullname := refParts[0] + version = "latest" + if len(refParts) == 2 { + version = refParts[1] + } + + fullnameParts := strings.SplitN(fullname, "/", 2) + if len(fullnameParts) < 2 { + return "", "", "", errors.New("invalid syntax") + } + project = fullnameParts[0] + name = fullnameParts[1] + + return project, name, version, nil } diff --git a/internal/clients/gcpsm/e2e_test.go b/internal/clients/gcpsm/e2e_test.go index e1325c15..a5df8cfb 100644 --- a/internal/clients/gcpsm/e2e_test.go +++ b/internal/clients/gcpsm/e2e_test.go @@ -31,12 +31,12 @@ func TestClient(t *testing.T) { wantErr: false, }, { - ref: "whisper-tests/secret-sauce/4", + ref: "whisper-tests/secret-sauce#4", wantVal: "szechuan", wantErr: false, }, { - ref: "whisper-tests/secret-sauce/3", + ref: "whisper-tests/secret-sauce#3", wantVal: "ketchup", wantErr: false, },