update 'zrok share reserved' to latest subordinate protocol (#789)

This commit is contained in:
Michael Quigley 2024-11-12 13:34:31 -05:00
parent ef5e654558
commit bf3a470ebd
No known key found for this signature in database
GPG Key ID: 9B60314A9DD20A62
2 changed files with 48 additions and 74 deletions

View File

@ -91,7 +91,7 @@ func (cmd *sharePublicCommand) run(_ *cobra.Command, args []string) {
} }
if !root.IsEnabled() { if !root.IsEnabled() {
tui.Error("unable to load environment; did you 'zrok enable'?", nil) cmd.error("unable to create share", errors.New("unable to load environment; did you 'zrok enable'?"))
} }
if cmd.subordinate || cmd.forceLocal { if cmd.subordinate || cmd.forceLocal {

View File

@ -22,6 +22,7 @@ import (
"github.com/openziti/zrok/rest_model_zrok" "github.com/openziti/zrok/rest_model_zrok"
"github.com/openziti/zrok/sdk/golang/sdk" "github.com/openziti/zrok/sdk/golang/sdk"
"github.com/openziti/zrok/tui" "github.com/openziti/zrok/tui"
"github.com/pkg/errors"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
@ -66,14 +67,11 @@ func newShareReservedCommand() *shareReservedCommand {
func (cmd *shareReservedCommand) run(_ *cobra.Command, args []string) { func (cmd *shareReservedCommand) run(_ *cobra.Command, args []string) {
root, err := environment.LoadRoot() root, err := environment.LoadRoot()
if err != nil { if err != nil {
if !panicInstead { cmd.error("error loading environment", err)
tui.Error("error loading environment", err)
}
panic(err)
} }
if !root.IsEnabled() { if !root.IsEnabled() {
tui.Error("unable to load environment; did you 'zrok enable'?", nil) cmd.error("unable to create share", errors.New("unable to load environment; did you 'zrok enable'?"))
} }
if cmd.subordinate || cmd.forceLocal { if cmd.subordinate || cmd.forceLocal {
@ -100,20 +98,14 @@ func (cmd *shareReservedCommand) shareLocal(args []string, root env_core.Root) {
zrok, err := root.Client() zrok, err := root.Client()
if err != nil { if err != nil {
if !panicInstead { cmd.error("unable to create zrok client", err)
tui.Error("unable to create zrok client", err)
}
panic(err)
} }
auth := httptransport.APIKeyAuth("X-TOKEN", "header", root.Environment().Token) auth := httptransport.APIKeyAuth("X-TOKEN", "header", root.Environment().Token)
req := metadata.NewGetShareDetailParams() req := metadata.NewGetShareDetailParams()
req.ShrToken = shrToken req.ShrToken = shrToken
resp, err := zrok.Metadata.GetShareDetail(req, auth) resp, err := zrok.Metadata.GetShareDetail(req, auth)
if err != nil { if err != nil {
if !panicInstead { cmd.error("unable to retrieve reserved share", err)
tui.Error("unable to retrieve reserved share", err)
}
panic(err)
} }
target = cmd.overrideEndpoint target = cmd.overrideEndpoint
if target == "" { if target == "" {
@ -125,10 +117,7 @@ func (cmd *shareReservedCommand) shareLocal(args []string, root env_core.Root) {
zif, err := root.ZitiIdentityNamed(root.EnvironmentIdentityName()) zif, err := root.ZitiIdentityNamed(root.EnvironmentIdentityName())
if err != nil { if err != nil {
if !panicInstead { cmd.error("unable to load ziti identity configuration", err)
tui.Error("unable to load ziti identity configuration", err)
}
panic(err)
} }
if resp.Payload.BackendMode != "socks" { if resp.Payload.BackendMode != "socks" {
@ -143,10 +132,7 @@ func (cmd *shareReservedCommand) shareLocal(args []string, root env_core.Root) {
BackendProxyEndpoint: target, BackendProxyEndpoint: target,
} }
if _, err := zrok.Share.UpdateShare(upReq, auth); err != nil { if _, err := zrok.Share.UpdateShare(upReq, auth); err != nil {
if !panicInstead { cmd.error("unable to update backend target", err)
tui.Error("unable to update backend target", err)
}
panic(err)
} }
if !cmd.subordinate { if !cmd.subordinate {
logrus.Infof("updated backend target to: %v", target) logrus.Infof("updated backend target to: %v", target)
@ -166,24 +152,6 @@ func (cmd *shareReservedCommand) shareLocal(args []string, root env_core.Root) {
shareDescription = fmt.Sprintf("access your share with: %v", tui.Code.Render(fmt.Sprintf("zrok access private %v", shrToken))) shareDescription = fmt.Sprintf("access your share with: %v", tui.Code.Render(fmt.Sprintf("zrok access private %v", shrToken)))
} }
if cmd.subordinate {
data := make(map[string]interface{})
data["token"] = resp.Payload.Token
data["backend_mode"] = resp.Payload.BackendMode
data["share_mode"] = resp.Payload.ShareMode
if resp.Payload.FrontendEndpoint != "" {
data["frontend_endpoints"] = resp.Payload.FrontendEndpoint
}
if resp.Payload.BackendProxyEndpoint != "" {
data["target"] = resp.Payload.BackendProxyEndpoint
}
jsonData, err := json.Marshal(data)
if err != nil {
panic(err)
}
fmt.Println(string(jsonData))
}
mdl := newShareModel(shrToken, []string{shareDescription}, sdk.ShareMode(resp.Payload.ShareMode), sdk.BackendMode(resp.Payload.BackendMode)) mdl := newShareModel(shrToken, []string{shareDescription}, sdk.ShareMode(resp.Payload.ShareMode), sdk.BackendMode(resp.Payload.BackendMode))
if !cmd.headless && !cmd.subordinate { if !cmd.headless && !cmd.subordinate {
proxy.SetCaddyLoggingWriter(mdl) proxy.SetCaddyLoggingWriter(mdl)
@ -202,10 +170,7 @@ func (cmd *shareReservedCommand) shareLocal(args []string, root env_core.Root) {
be, err := proxy.NewBackend(cfg) be, err := proxy.NewBackend(cfg)
if err != nil { if err != nil {
if !panicInstead { cmd.error("unable to create 'proxy' backend", err)
tui.Error("unable to create proxy backend handler", err)
}
panic(err)
} }
go func() { go func() {
@ -224,10 +189,7 @@ func (cmd *shareReservedCommand) shareLocal(args []string, root env_core.Root) {
be, err := proxy.NewCaddyWebBackend(cfg) be, err := proxy.NewCaddyWebBackend(cfg)
if err != nil { if err != nil {
if !panicInstead { cmd.error("unable to create 'web' backend", err)
tui.Error("error creating web backend", err)
}
panic(err)
} }
go func() { go func() {
@ -246,10 +208,7 @@ func (cmd *shareReservedCommand) shareLocal(args []string, root env_core.Root) {
be, err := tcpTunnel.NewBackend(cfg) be, err := tcpTunnel.NewBackend(cfg)
if err != nil { if err != nil {
if !panicInstead { cmd.error("unable to create 'tcpTunnel' backend", err)
tui.Error("error creating tcpTunnel backend", err)
}
panic(err)
} }
go func() { go func() {
@ -268,10 +227,7 @@ func (cmd *shareReservedCommand) shareLocal(args []string, root env_core.Root) {
be, err := udpTunnel.NewBackend(cfg) be, err := udpTunnel.NewBackend(cfg)
if err != nil { if err != nil {
if !panicInstead { cmd.error("unable to create 'udpTunnel' backend", err)
tui.Error("error creating udpTunnel backend", err)
}
panic(err)
} }
go func() { go func() {
@ -289,10 +245,7 @@ func (cmd *shareReservedCommand) shareLocal(args []string, root env_core.Root) {
be, err := proxy.NewCaddyfileBackend(cfg) be, err := proxy.NewCaddyfileBackend(cfg)
if err != nil { if err != nil {
if !panicInstead { cmd.error("unable to create 'caddy' backend", err)
tui.Error("error creating caddy backend", err)
}
panic(err)
} }
go func() { go func() {
@ -311,10 +264,7 @@ func (cmd *shareReservedCommand) shareLocal(args []string, root env_core.Root) {
be, err := drive.NewBackend(cfg) be, err := drive.NewBackend(cfg)
if err != nil { if err != nil {
if !panicInstead { cmd.error("unable to create 'drive' backend", err)
tui.Error("error creating drive backend", err)
}
panic(err)
} }
go func() { go func() {
@ -332,10 +282,7 @@ func (cmd *shareReservedCommand) shareLocal(args []string, root env_core.Root) {
be, err := socks.NewBackend(cfg) be, err := socks.NewBackend(cfg)
if err != nil { if err != nil {
if !panicInstead { cmd.error("unable to create 'socks' backend", err)
tui.Error("error creating socks backend", err)
}
panic(err)
} }
go func() { go func() {
@ -354,10 +301,7 @@ func (cmd *shareReservedCommand) shareLocal(args []string, root env_core.Root) {
be, err := vpn.NewBackend(cfg) be, err := vpn.NewBackend(cfg)
if err != nil { if err != nil {
if !panicInstead { cmd.error("unable to create 'vpn' backend", err)
tui.Error("error creating VPN backend", err)
}
panic(err)
} }
go func() { go func() {
@ -367,10 +311,29 @@ func (cmd *shareReservedCommand) shareLocal(args []string, root env_core.Root) {
}() }()
default: default:
tui.Error("invalid backend mode", nil) cmd.error("unable to share", errors.New("invalid backend mode"))
} }
if cmd.headless { if cmd.subordinate {
data := make(map[string]interface{})
data["message"] = "boot"
data["token"] = resp.Payload.Token
data["backend_mode"] = resp.Payload.BackendMode
data["share_mode"] = resp.Payload.ShareMode
if resp.Payload.FrontendEndpoint != "" {
data["frontend_endpoints"] = resp.Payload.FrontendEndpoint
}
if resp.Payload.BackendProxyEndpoint != "" {
data["target"] = resp.Payload.BackendProxyEndpoint
}
jsonData, err := json.Marshal(data)
if err != nil {
cmd.error("unable to marshal", err)
}
fmt.Println(string(jsonData))
}
if cmd.headless && !cmd.subordinate {
switch resp.Payload.ShareMode { switch resp.Payload.ShareMode {
case string(sdk.PublicShareMode): case string(sdk.PublicShareMode):
logrus.Infof("access your zrok share: %v", resp.Payload.FrontendEndpoint) logrus.Infof("access your zrok share: %v", resp.Payload.FrontendEndpoint)
@ -390,6 +353,7 @@ func (cmd *shareReservedCommand) shareLocal(args []string, root env_core.Root) {
select { select {
case req := <-requests: case req := <-requests:
data := make(map[string]interface{}) data := make(map[string]interface{})
data["message"] = "access"
data["remote-address"] = req.RemoteAddr data["remote-address"] = req.RemoteAddr
data["method"] = req.Method data["method"] = req.Method
data["path"] = req.Path data["path"] = req.Path
@ -423,6 +387,16 @@ func (cmd *shareReservedCommand) shareLocal(args []string, root env_core.Root) {
} }
} }
func (cmd *shareReservedCommand) error(msg string, err error) {
if cmd.subordinate {
subordinateError(errors.Wrap(err, msg))
}
if !panicInstead {
tui.Error(msg, err)
}
panic(errors.Wrap(err, msg))
}
func (cmd *shareReservedCommand) shareAgent(args []string, root env_core.Root) { func (cmd *shareReservedCommand) shareAgent(args []string, root env_core.Root) {
logrus.Info("starting") logrus.Info("starting")