From 98814018442f690fb43fe7fc98165521af903e0f Mon Sep 17 00:00:00 2001 From: Michael Quigley Date: Mon, 16 Sep 2024 14:29:17 -0400 Subject: [PATCH] support '--agent' for 'zrok share private' (#463) --- cmd/zrok/sharePrivate.go | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/cmd/zrok/sharePrivate.go b/cmd/zrok/sharePrivate.go index 304a7a6ff..2a1135b84 100644 --- a/cmd/zrok/sharePrivate.go +++ b/cmd/zrok/sharePrivate.go @@ -1,6 +1,7 @@ package main import ( + "encoding/json" "fmt" tea "github.com/charmbracelet/bubbletea" "github.com/openziti/zrok/endpoints" @@ -29,6 +30,7 @@ func init() { type sharePrivateCommand struct { backendMode string headless bool + agent bool insecure bool closed bool accessGrants []string @@ -44,6 +46,8 @@ func newSharePrivateCommand() *sharePrivateCommand { command := &sharePrivateCommand{cmd: cmd} cmd.Flags().StringVarP(&command.backendMode, "backend-mode", "b", "proxy", "The backend mode {proxy, web, tcpTunnel, udpTunnel, caddy, drive, socks, vpn}") cmd.Flags().BoolVar(&command.headless, "headless", false, "Disable TUI and run headless") + cmd.Flags().BoolVar(&command.agent, "agent", false, "Enable agent mode") + cmd.MarkFlagsMutuallyExclusive("headless", "agent") cmd.Flags().BoolVar(&command.insecure, "insecure", false, "Enable insecure TLS certificate validation for ") cmd.Flags().BoolVar(&command.closed, "closed", false, "Enable closed permission mode (see --access-grant)") cmd.Flags().StringArrayVar(&command.accessGrants, "access-grant", []string{}, "zrok accounts that are allowed to access this share (see --closed)") @@ -157,9 +161,20 @@ func (cmd *sharePrivateCommand) run(_ *cobra.Command, args []string) { panic(err) } + if cmd.agent { + data := make(map[string]interface{}) + data["token"] = shr.Token + data["frontend_endpoints"] = shr.FrontendEndpoints + jsonData, err := json.Marshal(data) + if err != nil { + panic(err) + } + fmt.Println(string(jsonData)) + } + shareDescription := fmt.Sprintf("access your share with: %v", tui.Code.Render(fmt.Sprintf("zrok access private %v", shr.Token))) mdl := newShareModel(shr.Token, []string{shareDescription}, sdk.PrivateShareMode, sdk.BackendMode(cmd.backendMode)) - if !cmd.headless { + if !cmd.headless && !cmd.agent { proxy.SetCaddyLoggingWriter(mdl) } @@ -363,6 +378,22 @@ func (cmd *sharePrivateCommand) run(_ *cobra.Command, args []string) { } } + } else if cmd.agent { + for { + select { + case req := <-requests: + data := make(map[string]interface{}) + data["remote-address"] = req.RemoteAddr + data["method"] = req.Method + data["path"] = req.Path + jsonData, err := json.Marshal(data) + if err != nil { + fmt.Println(err) + } + fmt.Println(string(jsonData)) + } + } + } else { logrus.SetOutput(mdl) prg := tea.NewProgram(mdl, tea.WithAltScreen())