@@ -2,7 +2,9 @@ package config
22
33import (
44 "context"
5+ "errors"
56 "fmt"
7+ "net/http"
68
79 "github.com/go-viper/mapstructure/v2"
810 "github.com/hashicorp/vault-client-go"
@@ -12,14 +14,18 @@ import (
1214func LookupWithAppRole (ctx context.Context , vaultAddr , caCertFile , roleID , secretID , path string ) (* Config , error ) {
1315 client , err := newClient (vaultAddr , caCertFile )
1416 if err != nil {
15- return nil , err
17+ return nil , fmt . Errorf ( "approle.Client: %w" , err )
1618 }
1719 resp , err := client .Auth .AppRoleLogin (ctx , schema.AppRoleLoginRequest {RoleId : roleID , SecretId : secretID })
1820 if err != nil {
19- return nil , err
21+ var verr * vault.ResponseError
22+ if errors .As (err , & verr ) && verr .OriginalRequest != nil {
23+ return nil , expandError (verr .OriginalRequest , err )
24+ }
25+ return nil , fmt .Errorf ("approle.Login: %w" , err )
2026 }
2127 if err = client .SetToken (resp .Auth .ClientToken ); err != nil {
22- return nil , err
28+ return nil , fmt . Errorf ( "approle.SetToken: %w" , err )
2329 }
2430 defer logout (ctx , client , resp .Auth .Renewable )
2531 return lookup (ctx , client , path )
@@ -28,10 +34,10 @@ func LookupWithAppRole(ctx context.Context, vaultAddr, caCertFile, roleID, secre
2834func LookupWithToken (ctx context.Context , vaultAddr , caCertFile , token , path string ) (* Config , error ) {
2935 client , err := newClient (vaultAddr , caCertFile )
3036 if err != nil {
31- return nil , err
37+ return nil , fmt . Errorf ( "token.Client: %w" , err )
3238 }
3339 if err = client .SetToken (token ); err != nil {
34- return nil , err
40+ return nil , fmt . Errorf ( "token.SetToken: %w" , err )
3541 }
3642 return lookup (ctx , client , path )
3743}
@@ -54,20 +60,28 @@ func newClient(vaultAddr, caCertFile string) (*vault.Client, error) {
5460func lookup (ctx context.Context , client * vault.Client , path string ) (* Config , error ) {
5561 secret , err := client .Read (ctx , path )
5662 if err != nil {
57- return nil , err
63+ var verr * vault.ResponseError
64+ if errors .As (err , & verr ) && verr .OriginalRequest != nil {
65+ return nil , expandError (verr .OriginalRequest , err )
66+ }
67+ return nil , fmt .Errorf ("vault.Read: %w" , err )
5868 }
59- if secret == nil {
69+ if secret == nil || secret . Data == nil {
6070 return nil , fmt .Errorf ("secret not found at path %q" , path )
6171 }
6272 var cfg Config
6373 if err = mapstructure .Decode (secret .Data , & cfg ); err != nil {
64- return nil , err
74+ return nil , fmt . Errorf ( "secret.Decode: %w" , err )
6575 }
6676 return & cfg , nil
6777}
6878
79+ func expandError (req * http.Request , err error ) error {
80+ return fmt .Errorf ("%s %s: %w" , req .Method , req .URL .String (), err )
81+ }
82+
6983func logout (ctx context.Context , client * vault.Client , shouldLogout bool ) {
7084 if shouldLogout {
71- client .Auth .TokenRevokeSelf (ctx ) //nolint:all
85+ _ , _ = client .Auth .TokenRevokeSelf (ctx )
7286 }
7387}
0 commit comments