From 870c1a083bdf7e846d5edaa2a3816a2762c6b6c6 Mon Sep 17 00:00:00 2001 From: Michael Quigley Date: Wed, 25 Oct 2023 11:44:21 -0400 Subject: [PATCH] incorporate '--json-output' flag to the 'zrok reserve' command (#422) --- CHANGELOG.md | 2 ++ cmd/zrok/reserve.go | 33 +++++++++++++++++---------------- sdk/model.go | 4 ++-- 3 files changed, 21 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a24a0d790..be97ecdca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ # v0.4.11 +FEATURE: The `zrok reserve` command now incorporates the `--json-output|-j` flag, which outputs the reservation details as JSON, rather than as human-consumable log messages. Other commands will produce similar output in the future (https://github.com/openziti/zrok/issues/422) + FIX: Include `--oauth-provider` and associated flags for the `zrok reserve` command, allowing reserved shares to specify OAuth authentication (https://github.com/openziti/zrok/issues/421) # v0.4.10 diff --git a/cmd/zrok/reserve.go b/cmd/zrok/reserve.go index 803d6d2ec..69e6ecf55 100644 --- a/cmd/zrok/reserve.go +++ b/cmd/zrok/reserve.go @@ -1,6 +1,7 @@ package main import ( + "encoding/json" "fmt" "github.com/openziti/zrok/environment" "github.com/openziti/zrok/sdk" @@ -18,6 +19,7 @@ type reserveCommand struct { basicAuth []string frontendSelection []string backendMode string + jsonOutput bool oauthProvider string oauthEmailDomains []string oauthCheckInterval time.Duration @@ -33,7 +35,7 @@ func newReserveCommand() *reserveCommand { command := &reserveCommand{cmd: cmd} cmd.Flags().StringArrayVar(&command.frontendSelection, "frontends", []string{"public"}, "Selected frontends to use for the share") cmd.Flags().StringVarP(&command.backendMode, "backend-mode", "b", "proxy", "The backend mode {proxy, web, , caddy}") - + cmd.Flags().BoolVarP(&command.jsonOutput, "json-output", "j", false, "Emit JSON describing the created reserved share") cmd.Flags().StringArrayVar(&command.basicAuth, "basic-auth", []string{}, "Basic authentication users (,...)") cmd.Flags().StringVar(&command.oauthProvider, "oauth-provider", "", "Enable OAuth provider [google, github]") cmd.Flags().StringArrayVar(&command.oauthEmailDomains, "oauth-email-domains", []string{}, "Allow only these email domains to authenticate via OAuth") @@ -55,10 +57,7 @@ func (cmd *reserveCommand) run(_ *cobra.Command, args []string) { case "proxy": v, err := parseUrl(args[1]) if err != nil { - if !panicInstead { - tui.Error("invalid target endpoint URL", err) - } - panic(err) + tui.Error("invalid target endpoint URL", err) } target = v @@ -80,10 +79,7 @@ func (cmd *reserveCommand) run(_ *cobra.Command, args []string) { env, err := environment.LoadRoot() if err != nil { - if !panicInstead { - tui.Error("error loading environment", err) - } - panic(err) + tui.Error("error loading environment", err) } if !env.IsEnabled() { @@ -109,14 +105,19 @@ func (cmd *reserveCommand) run(_ *cobra.Command, args []string) { } shr, err := sdk.CreateShare(env, req) if err != nil { - if !panicInstead { - tui.Error("unable to create share", err) - } - panic(err) + tui.Error("unable to create share", err) } - logrus.Infof("your reserved share token is '%v'", shr.Token) - for _, fpe := range shr.FrontendEndpoints { - logrus.Infof("reserved frontend endpoint: %v", fpe) + if !cmd.jsonOutput { + logrus.Infof("your reserved share token is '%v'", shr.Token) + for _, fpe := range shr.FrontendEndpoints { + logrus.Infof("reserved frontend endpoint: %v", fpe) + } + } else { + out, err := json.Marshal(shr) + if err != nil { + tui.Error("error emitting JSON", err) + } + fmt.Println(string(out)) } } diff --git a/sdk/model.go b/sdk/model.go index fa0310eb4..cefb1eb0e 100644 --- a/sdk/model.go +++ b/sdk/model.go @@ -31,8 +31,8 @@ type ShareRequest struct { } type Share struct { - Token string - FrontendEndpoints []string + Token string `json:"token"` + FrontendEndpoints []string `json:"frontend_endpoints"` } type AccessRequest struct {