mirror of
https://github.com/openziti/zrok.git
synced 2024-11-25 17:43:53 +01:00
share private tui (#56)
This commit is contained in:
parent
ad3ecab2ac
commit
2c5ea40b73
@ -2,6 +2,7 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
tea "github.com/charmbracelet/bubbletea"
|
||||||
"github.com/go-openapi/runtime"
|
"github.com/go-openapi/runtime"
|
||||||
httptransport "github.com/go-openapi/runtime/client"
|
httptransport "github.com/go-openapi/runtime/client"
|
||||||
"github.com/openziti-test-kitchen/zrok/endpoints"
|
"github.com/openziti-test-kitchen/zrok/endpoints"
|
||||||
@ -21,7 +22,6 @@ import (
|
|||||||
"os/signal"
|
"os/signal"
|
||||||
"strings"
|
"strings"
|
||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
@ -31,18 +31,20 @@ func init() {
|
|||||||
type sharePrivateCommand struct {
|
type sharePrivateCommand struct {
|
||||||
basicAuth []string
|
basicAuth []string
|
||||||
backendMode string
|
backendMode string
|
||||||
|
headless bool
|
||||||
cmd *cobra.Command
|
cmd *cobra.Command
|
||||||
}
|
}
|
||||||
|
|
||||||
func newSharePrivateCommand() *sharePrivateCommand {
|
func newSharePrivateCommand() *sharePrivateCommand {
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "private <targetEndpoint>",
|
Use: "private <target>",
|
||||||
Short: "Share a target endpoint privately",
|
Short: "Share a target resource privately",
|
||||||
Args: cobra.ExactArgs(1),
|
Args: cobra.ExactArgs(1),
|
||||||
}
|
}
|
||||||
command := &sharePrivateCommand{cmd: cmd}
|
command := &sharePrivateCommand{cmd: cmd}
|
||||||
cmd.Flags().StringArrayVar(&command.basicAuth, "basic-auth", []string{}, "Basic authentication users (<username:password>,...")
|
cmd.Flags().StringArrayVar(&command.basicAuth, "basic-auth", []string{}, "Basic authentication users (<username:password>,...")
|
||||||
cmd.Flags().StringVar(&command.backendMode, "backend-mode", "proxy", "The backend mode {proxy, web}")
|
cmd.Flags().StringVar(&command.backendMode, "backend-mode", "proxy", "The backend mode {proxy, web}")
|
||||||
|
cmd.Flags().BoolVar(&command.headless, "headless", false, "Disable TUI and run headless")
|
||||||
cmd.Run = command.run
|
cmd.Run = command.run
|
||||||
return command
|
return command
|
||||||
}
|
}
|
||||||
@ -136,12 +138,14 @@ func (cmd *sharePrivateCommand) run(_ *cobra.Command, args []string) {
|
|||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
requestsChan := make(chan *endpoints.BackendRequest, 1024)
|
||||||
switch cmd.backendMode {
|
switch cmd.backendMode {
|
||||||
case "proxy":
|
case "proxy":
|
||||||
cfg := &proxyBackend.Config{
|
cfg := &proxyBackend.Config{
|
||||||
IdentityPath: zif,
|
IdentityPath: zif,
|
||||||
EndpointAddress: target,
|
EndpointAddress: target,
|
||||||
ShrToken: resp.Payload.ShrToken,
|
ShrToken: resp.Payload.ShrToken,
|
||||||
|
RequestsChan: requestsChan,
|
||||||
}
|
}
|
||||||
_, err = cmd.proxyBackendMode(cfg)
|
_, err = cmd.proxyBackendMode(cfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -156,6 +160,7 @@ func (cmd *sharePrivateCommand) run(_ *cobra.Command, args []string) {
|
|||||||
IdentityPath: zif,
|
IdentityPath: zif,
|
||||||
WebRoot: target,
|
WebRoot: target,
|
||||||
ShrToken: resp.Payload.ShrToken,
|
ShrToken: resp.Payload.ShrToken,
|
||||||
|
RequestsChan: requestsChan,
|
||||||
}
|
}
|
||||||
_, err = cmd.webBackendMode(cfg)
|
_, err = cmd.webBackendMode(cfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -169,10 +174,35 @@ func (cmd *sharePrivateCommand) run(_ *cobra.Command, args []string) {
|
|||||||
tui.Error("invalid backend mode", nil)
|
tui.Error("invalid backend mode", nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
logrus.Infof("share with others; they will use this command for access: 'zrok access private %v'", resp.Payload.ShrToken)
|
if cmd.headless {
|
||||||
|
logrus.Infof("allow other to access your share with the following command:\nzrok access private %v", resp.Payload.ShrToken)
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case req := <-requestsChan:
|
||||||
|
logrus.Infof("%v -> %v %v", req.RemoteAddr, req.Method, req.Path)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for {
|
} else {
|
||||||
time.Sleep(30 * time.Second)
|
shareDescription := fmt.Sprintf("access your share with: %v", tui.CodeStyle.Render(fmt.Sprintf("zrok access private %v", resp.Payload.ShrToken)))
|
||||||
|
mdl := newShareModel(resp.Payload.ShrToken, []string{shareDescription}, "public", cmd.backendMode)
|
||||||
|
prg := tea.NewProgram(mdl, tea.WithAltScreen())
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case req := <-requestsChan:
|
||||||
|
prg.Send(req)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
if _, err := prg.Run(); err != nil {
|
||||||
|
tui.Error("An error occurred", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
close(requestsChan)
|
||||||
|
cmd.destroy(zrd.Env.ZId, resp.Payload.ShrToken, zrok, auth)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,7 +78,7 @@ func (cmd *sharePublicCommand) run(_ *cobra.Command, args []string) {
|
|||||||
zrd, err := zrokdir.Load()
|
zrd, err := zrokdir.Load()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if !panicInstead {
|
if !panicInstead {
|
||||||
tui.Error("unable to load zrokdir", nil)
|
tui.Error("unable to load zrokdir", err)
|
||||||
}
|
}
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
@ -102,6 +102,7 @@ func (cmd *sharePublicCommand) run(_ *cobra.Command, args []string) {
|
|||||||
}
|
}
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
auth := httptransport.APIKeyAuth("X-TOKEN", "header", zrd.Env.Token)
|
auth := httptransport.APIKeyAuth("X-TOKEN", "header", zrd.Env.Token)
|
||||||
req := share.NewShareParams()
|
req := share.NewShareParams()
|
||||||
req.Body = &rest_model_zrok.ShareRequest{
|
req.Body = &rest_model_zrok.ShareRequest{
|
||||||
@ -127,7 +128,7 @@ func (cmd *sharePublicCommand) run(_ *cobra.Command, args []string) {
|
|||||||
resp, err := zrok.Share.Share(req, auth)
|
resp, err := zrok.Share.Share(req, auth)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if !panicInstead {
|
if !panicInstead {
|
||||||
tui.Error("unable to create tunnel", err)
|
tui.Error("unable to create share", err)
|
||||||
}
|
}
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
@ -140,7 +141,6 @@ func (cmd *sharePublicCommand) run(_ *cobra.Command, args []string) {
|
|||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
var bh endpoints.BackendHandler
|
|
||||||
requestsChan := make(chan *endpoints.BackendRequest, 1024)
|
requestsChan := make(chan *endpoints.BackendRequest, 1024)
|
||||||
switch cmd.backendMode {
|
switch cmd.backendMode {
|
||||||
case "proxy":
|
case "proxy":
|
||||||
@ -150,7 +150,7 @@ func (cmd *sharePublicCommand) run(_ *cobra.Command, args []string) {
|
|||||||
ShrToken: resp.Payload.ShrToken,
|
ShrToken: resp.Payload.ShrToken,
|
||||||
RequestsChan: requestsChan,
|
RequestsChan: requestsChan,
|
||||||
}
|
}
|
||||||
bh, err = cmd.proxyBackendMode(cfg)
|
_, err = cmd.proxyBackendMode(cfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if !panicInstead {
|
if !panicInstead {
|
||||||
tui.Error("unable to create proxy backend handler", err)
|
tui.Error("unable to create proxy backend handler", err)
|
||||||
@ -165,7 +165,7 @@ func (cmd *sharePublicCommand) run(_ *cobra.Command, args []string) {
|
|||||||
ShrToken: resp.Payload.ShrToken,
|
ShrToken: resp.Payload.ShrToken,
|
||||||
RequestsChan: requestsChan,
|
RequestsChan: requestsChan,
|
||||||
}
|
}
|
||||||
bh, err = cmd.webBackendMode(cfg)
|
_, err = cmd.webBackendMode(cfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if !panicInstead {
|
if !panicInstead {
|
||||||
tui.Error("unable to create web backend handler", err)
|
tui.Error("unable to create web backend handler", err)
|
||||||
@ -177,8 +177,6 @@ func (cmd *sharePublicCommand) run(_ *cobra.Command, args []string) {
|
|||||||
tui.Error("invalid backend mode", nil)
|
tui.Error("invalid backend mode", nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
_ = bh.Requests()()
|
|
||||||
|
|
||||||
if cmd.headless {
|
if cmd.headless {
|
||||||
logrus.Infof("access your zrok share at the following endpoints:\n %v", strings.Join(resp.Payload.FrontendProxyEndpoints, "\n"))
|
logrus.Infof("access your zrok share at the following endpoints:\n %v", strings.Join(resp.Payload.FrontendProxyEndpoints, "\n"))
|
||||||
for {
|
for {
|
||||||
|
Loading…
Reference in New Issue
Block a user