diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 56a621e..f3f32e3 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -19,7 +19,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v4 with: - go-version: '1.22' + go-version: '1.24' - name: Build run: go build -v -o out/vault-cli main.go diff --git a/cmd/root.go b/cmd/root.go index 8f1a602..15eb9fa 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -2,6 +2,7 @@ package cmd import ( "encoding/json" + "fmt" "github.com/olekukonko/tablewriter" "github.com/previder/vault-cli/pkg" "github.com/spf13/cobra" @@ -70,7 +71,7 @@ func setupClient(cmd *cobra.Command, args []string) { func printJson(input any) { marshal, _ := json.MarshalIndent(input, "", " ") - println(string(marshal)) + fmt.Println(string(marshal)) } func printTable(headers []string, content []interface{}) { diff --git a/go.mod b/go.mod index 539d5b1..b82d9af 100644 --- a/go.mod +++ b/go.mod @@ -1,9 +1,9 @@ module github.com/previder/vault-cli -go 1.24.4 +go 1.24 require ( - github.com/olekukonko/tablewriter v1.0.8 + github.com/olekukonko/tablewriter v1.0.9 github.com/spf13/cobra v1.9.1 ) @@ -13,9 +13,10 @@ require ( github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-runewidth v0.0.16 // indirect + github.com/olekukonko/cat v0.0.0-20250817074551-3280053e4e00 // indirect github.com/olekukonko/errors v1.1.0 // indirect - github.com/olekukonko/ll v0.0.9 // indirect + github.com/olekukonko/ll v0.1.0 // indirect github.com/rivo/uniseg v0.4.7 // indirect - github.com/spf13/pflag v1.0.6 // indirect - golang.org/x/sys v0.33.0 // indirect + github.com/spf13/pflag v1.0.7 // indirect + golang.org/x/sys v0.35.0 // indirect ) diff --git a/go.sum b/go.sum index c232b47..fa42991 100644 --- a/go.sum +++ b/go.sum @@ -9,22 +9,25 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/olekukonko/cat v0.0.0-20250817074551-3280053e4e00 h1:ZCnkxe9GgWqqBxAk3cIKlQJuaqgOUF/nUtQs8flVTHM= +github.com/olekukonko/cat v0.0.0-20250817074551-3280053e4e00/go.mod h1:rEKTHC9roVVicUIfZK7DYrdIoM0EOr8mK1Hj5s3JjH0= github.com/olekukonko/errors v1.1.0 h1:RNuGIh15QdDenh+hNvKrJkmxxjV4hcS50Db478Ou5sM= github.com/olekukonko/errors v1.1.0/go.mod h1:ppzxA5jBKcO1vIpCXQ9ZqgDh8iwODz6OXIGKU8r5m4Y= -github.com/olekukonko/ll v0.0.9 h1:Y+1YqDfVkqMWuEQMclsF9HUR5+a82+dxJuL1HHSRpxI= -github.com/olekukonko/ll v0.0.9/go.mod h1:En+sEW0JNETl26+K8eZ6/W4UQ7CYSrrgg/EdIYT2H8g= -github.com/olekukonko/tablewriter v1.0.8 h1:f6wJzHg4QUtJdvrVPKco4QTrAylgaU0+b9br/lJxEiQ= -github.com/olekukonko/tablewriter v1.0.8/go.mod h1:H428M+HzoUXC6JU2Abj9IT9ooRmdq9CxuDmKMtrOCMs= +github.com/olekukonko/ll v0.1.0 h1:7nX5bgpvfyxsvI90IJpOIU5zd4MBV6nRkD49e/dEx98= +github.com/olekukonko/ll v0.1.0/go.mod h1:2dJo+hYZcJMLMbKwHEWvxCUbAOLc/CXWS9noET22Mdo= +github.com/olekukonko/tablewriter v1.0.9 h1:XGwRsYLC2bY7bNd93Dk51bcPZksWZmLYuaTHR0FqfL8= +github.com/olekukonko/tablewriter v1.0.9/go.mod h1:5c+EBPeSqvXnLLgkm9isDdzR3wjfBkHR9Nhfp3NWrzo= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0= -github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/pflag v1.0.7 h1:vN6T9TfwStFPFM5XzjsvmzZkLuaLX+HS+0SeFLRgU6M= +github.com/spf13/pflag v1.0.7/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= -golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= +golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/pkg/token.go b/pkg/token.go index fd587a6..0a8713a 100644 --- a/pkg/token.go +++ b/pkg/token.go @@ -39,3 +39,12 @@ func (v *VaultClient) DeleteToken(id string) error { } return nil } + +func (v *VaultClient) GetTokenInfo() (*model.Token, error) { + var result model.Token + err := v.request("GET", fmt.Sprintf("/token/info"), nil, &result) + if err != nil { + return nil, err + } + return &result, nil +} diff --git a/pkg/vault-client.go b/pkg/vault-client.go index 03e2ed2..98c6741 100644 --- a/pkg/vault-client.go +++ b/pkg/vault-client.go @@ -26,6 +26,7 @@ type PreviderVaultClient interface { GetToken(id string) (*model.Token, error) CreateToken(create model.TokenCreate) (*model.TokenCreateResponse, error) DeleteToken(id string) error + GetTokenInfo() (*model.Token, error) GetSecrets() ([]model.Secret, error) GetSecret(id string) (*model.Secret, error) @@ -65,10 +66,6 @@ func (v *VaultClient) SetVerbose(verbose bool) { func (v *VaultClient) validateConnection() error { version := model.Version{Version: "test"} - /* err := v.request("GET", "/version", nil, version) - if err != nil { - return err - }*/ if v.verbose { log.Println(fmt.Sprintf("Setup new Vault client [%v] to %v", version.Version, v.baseUri)) } @@ -113,7 +110,8 @@ func (v *VaultClient) request(method string, url string, requestBody interface{} if res.StatusCode < 200 || res.StatusCode >= 300 { if res.StatusCode == 401 { - log.Fatal("Unauthorized") + log.Println("Vault token is not authorized to read and decrypt secrets") + return errors.New(fmt.Sprintf("vault token is not authorized to read and decrypt secrets")) } log.Printf("An error was returned: %v, %v\n", res.StatusCode, res.Body) }