From c0702fdae8776269a8c5c89abc6a2727c37d2ebc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Otto=20Kr=C3=B6pke?= Date: Thu, 24 Jul 2025 16:45:08 +0200 Subject: [PATCH 1/3] feat: support output format in stackit auth get-access-token command --- .../auth/get-access-token/get_access_token.go | 67 ++++++++++++++++++- 1 file changed, 64 insertions(+), 3 deletions(-) diff --git a/internal/cmd/auth/get-access-token/get_access_token.go b/internal/cmd/auth/get-access-token/get_access_token.go index 25576427a..5854c69ae 100644 --- a/internal/cmd/auth/get-access-token/get_access_token.go +++ b/internal/cmd/auth/get-access-token/get_access_token.go @@ -1,14 +1,24 @@ package getaccesstoken import ( + "encoding/json" + "fmt" + + "github.com/goccy/go-yaml" "github.com/spf13/cobra" "github.com/stackitcloud/stackit-cli/internal/cmd/params" "github.com/stackitcloud/stackit-cli/internal/pkg/args" "github.com/stackitcloud/stackit-cli/internal/pkg/auth" cliErr "github.com/stackitcloud/stackit-cli/internal/pkg/errors" "github.com/stackitcloud/stackit-cli/internal/pkg/examples" + "github.com/stackitcloud/stackit-cli/internal/pkg/globalflags" + "github.com/stackitcloud/stackit-cli/internal/pkg/print" ) +type inputModel struct { + *globalflags.GlobalFlagModel +} + func NewCmd(params *params.CmdParams) *cobra.Command { cmd := &cobra.Command{ Use: "get-access-token", @@ -20,7 +30,12 @@ func NewCmd(params *params.CmdParams) *cobra.Command { `Print a short-lived access token`, "$ stackit auth get-access-token"), ), - RunE: func(_ *cobra.Command, _ []string) error { + RunE: func(cmd *cobra.Command, _ []string) error { + model, err := parseInput(params.Printer, cmd) + if err != nil { + return err + } + userSessionExpired, err := auth.UserSessionExpired() if err != nil { return err @@ -29,15 +44,61 @@ func NewCmd(params *params.CmdParams) *cobra.Command { return &cliErr.SessionExpiredError{} } + // Try to get a valid access token, refreshing if necessary + // Try to get a valid access token, refreshing if necessary accessToken, err := auth.RefreshAccessToken(params.Printer) if err != nil { return err } - params.Printer.Outputf("%s\n", accessToken) - return nil + switch model.OutputFormat { + case print.JSONOutputFormat: + details, err := json.MarshalIndent(map[string]string{ + "access_token": accessToken, + }, "", " ") + if err != nil { + return fmt.Errorf("marshal image list: %w", err) + } + params.Printer.Outputln(string(details)) + + return nil + case print.YAMLOutputFormat: + params.Printer.Outputf(`access_token: %q`, accessToken) + details, err := yaml.MarshalWithOptions(map[string]string{ + "access_token": accessToken, + }, yaml.IndentSequence(true), yaml.UseJSONMarshaler()) + if err != nil { + return fmt.Errorf("marshal image list: %w", err) + } + params.Printer.Outputln(string(details)) + + return nil + default: + params.Printer.Outputln(accessToken) + + return nil + } }, } return cmd } + +func parseInput(p *print.Printer, cmd *cobra.Command) (*inputModel, error) { + globalFlags := globalflags.Parse(p, cmd) + + model := inputModel{ + GlobalFlagModel: globalFlags, + } + + if p.IsVerbosityDebug() { + modelStr, err := print.BuildDebugStrFromInputModel(model) + if err != nil { + p.Debug(print.ErrorLevel, "convert model to string for debugging: %v", err) + } else { + p.Debug(print.DebugLevel, "parsed input values: %s", modelStr) + } + } + + return &model, nil +} From ee5e172b9ad770adc3870a1f068b30d7f2cfd72c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Otto=20Kr=C3=B6pke?= Date: Thu, 24 Jul 2025 16:45:48 +0200 Subject: [PATCH 2/3] feat: support output format in stackit auth get-access-token command --- internal/cmd/auth/get-access-token/get_access_token.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/internal/cmd/auth/get-access-token/get_access_token.go b/internal/cmd/auth/get-access-token/get_access_token.go index 5854c69ae..15db94bc6 100644 --- a/internal/cmd/auth/get-access-token/get_access_token.go +++ b/internal/cmd/auth/get-access-token/get_access_token.go @@ -44,8 +44,6 @@ func NewCmd(params *params.CmdParams) *cobra.Command { return &cliErr.SessionExpiredError{} } - // Try to get a valid access token, refreshing if necessary - // Try to get a valid access token, refreshing if necessary accessToken, err := auth.RefreshAccessToken(params.Printer) if err != nil { From 5fa11189cc2b800d15232ae449ca9ed047cd22bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Otto=20Kr=C3=B6pke?= Date: Thu, 24 Jul 2025 17:15:09 +0200 Subject: [PATCH 3/3] feat: support output format in stackit auth get-access-token command --- internal/cmd/auth/get-access-token/get_access_token.go | 1 - 1 file changed, 1 deletion(-) diff --git a/internal/cmd/auth/get-access-token/get_access_token.go b/internal/cmd/auth/get-access-token/get_access_token.go index 15db94bc6..5e5b9d60b 100644 --- a/internal/cmd/auth/get-access-token/get_access_token.go +++ b/internal/cmd/auth/get-access-token/get_access_token.go @@ -62,7 +62,6 @@ func NewCmd(params *params.CmdParams) *cobra.Command { return nil case print.YAMLOutputFormat: - params.Printer.Outputf(`access_token: %q`, accessToken) details, err := yaml.MarshalWithOptions(map[string]string{ "access_token": accessToken, }, yaml.IndentSequence(true), yaml.UseJSONMarshaler())