share public; share reserved (#922)

This commit is contained in:
Michael Quigley
2025-03-27 14:23:57 -04:00
parent ab9490e440
commit b5df385da4
3 changed files with 67 additions and 24 deletions

View File

@ -18,15 +18,16 @@ type SharePrivateRequest struct {
} }
type SharePublicRequest struct { type SharePublicRequest struct {
Target string Target string
BasicAuth []string BasicAuth []string
FrontendSelection []string FrontendSelection []string
BackendMode string BackendMode string
Insecure bool Insecure bool
OauthProvider string OauthProvider string
OauthCheckInterval string OauthEmailAddressPatterns []string
Closed bool OauthCheckInterval string
AccessGrants []string Closed bool
AccessGrants []string
} }
type ShareReservedRequest struct { type ShareReservedRequest struct {
@ -35,6 +36,14 @@ type ShareReservedRequest struct {
Insecure bool Insecure bool
} }
type ShareReservedResponse struct {
Token string
BackendMode string
ShareMode string
FrontendEndpoints []string
Target string
}
type share struct { type share struct {
token string token string
frontendEndpoints []string frontendEndpoints []string

View File

@ -13,14 +13,14 @@ import (
"os" "os"
) )
func (i *agentGrpcImpl) SharePublic(_ context.Context, req *agentGrpc.SharePublicRequest) (*agentGrpc.SharePublicResponse, error) { func (a *Agent) SharePublic(req *SharePublicRequest) (shareToken string, frontendEndpoint []string, err error) {
root, err := environment.LoadRoot() root, err := environment.LoadRoot()
if err != nil { if err != nil {
return nil, err return "", nil, err
} }
if !root.IsEnabled() { if !root.IsEnabled() {
return nil, errors.New("unable to load environment; did you 'zrok enable'?") return "", nil, errors.New("unable to load environment; did you 'zrok enable'?")
} }
shrCmd := []string{os.Args[0], "share", "public", "--subordinate", "-b", req.BackendMode} shrCmd := []string{os.Args[0], "share", "public", "--subordinate", "-b", req.BackendMode}
@ -28,7 +28,7 @@ func (i *agentGrpcImpl) SharePublic(_ context.Context, req *agentGrpc.SharePubli
shareMode: sdk.PublicShareMode, shareMode: sdk.PublicShareMode,
backendMode: sdk.BackendMode(req.BackendMode), backendMode: sdk.BackendMode(req.BackendMode),
sub: subordinate.NewMessageHandler(), sub: subordinate.NewMessageHandler(),
agent: i.agent, agent: a,
} }
shr.sub.MessageHandler = func(msg subordinate.Message) { shr.sub.MessageHandler = func(msg subordinate.Message) {
logrus.Info(msg) logrus.Info(msg)
@ -87,23 +87,39 @@ func (i *agentGrpcImpl) SharePublic(_ context.Context, req *agentGrpc.SharePubli
shr.process, err = proctree.StartChild(shr.sub.Tail, shrCmd...) shr.process, err = proctree.StartChild(shr.sub.Tail, shrCmd...)
if err != nil { if err != nil {
return nil, err return "", nil, err
} }
<-shr.sub.BootComplete <-shr.sub.BootComplete
if bootErr == nil { if bootErr == nil {
go shr.monitor() go shr.monitor()
i.agent.addShare <- shr a.addShare <- shr
return &agentGrpc.SharePublicResponse{ return shr.token, shr.frontendEndpoints, nil
Token: shr.token,
FrontendEndpoints: shr.frontendEndpoints,
}, nil
} else { } else {
if err := proctree.WaitChild(shr.process); err != nil { if err := proctree.WaitChild(shr.process); err != nil {
logrus.Errorf("error joining: %v", err) logrus.Errorf("error joining: %v", err)
} }
return nil, fmt.Errorf("unable to start share: %v", bootErr) return "", nil, fmt.Errorf("unable to start share: %v", bootErr)
}
}
func (i *agentGrpcImpl) SharePublic(_ context.Context, req *agentGrpc.SharePublicRequest) (*agentGrpc.SharePublicResponse, error) {
if shareToken, frontendEndpoints, err := i.agent.SharePublic(&SharePublicRequest{
Target: req.Target,
BasicAuth: req.BasicAuth,
FrontendSelection: req.FrontendSelection,
BackendMode: req.BackendMode,
Insecure: req.Insecure,
OauthProvider: req.OauthProvider,
OauthEmailAddressPatterns: req.OauthEmailAddressPatterns,
OauthCheckInterval: req.OauthCheckInterval,
Closed: req.Closed,
AccessGrants: req.AccessGrants,
}); err == nil {
return &agentGrpc.SharePublicResponse{Token: shareToken, FrontendEndpoints: frontendEndpoints}, nil
} else {
return nil, err
} }
} }

View File

@ -12,7 +12,7 @@ import (
"os" "os"
) )
func (i *agentGrpcImpl) ShareReserved(_ context.Context, req *agentGrpc.ShareReservedRequest) (*agentGrpc.ShareReservedResponse, error) { func (a *Agent) ShareReserved(req *ShareReservedRequest) (*ShareReservedResponse, error) {
root, err := environment.LoadRoot() root, err := environment.LoadRoot()
if err != nil { if err != nil {
return nil, err return nil, err
@ -26,7 +26,7 @@ func (i *agentGrpcImpl) ShareReserved(_ context.Context, req *agentGrpc.ShareRes
shr := &share{ shr := &share{
reserved: true, reserved: true,
sub: subordinate.NewMessageHandler(), sub: subordinate.NewMessageHandler(),
agent: i.agent, agent: a,
} }
shr.sub.MessageHandler = func(msg subordinate.Message) { shr.sub.MessageHandler = func(msg subordinate.Message) {
logrus.Info(msg) logrus.Info(msg)
@ -60,8 +60,8 @@ func (i *agentGrpcImpl) ShareReserved(_ context.Context, req *agentGrpc.ShareRes
if bootErr == nil { if bootErr == nil {
go shr.monitor() go shr.monitor()
i.agent.addShare <- shr a.addShare <- shr
return &agentGrpc.ShareReservedResponse{ return &ShareReservedResponse{
Token: shr.token, Token: shr.token,
BackendMode: string(shr.backendMode), BackendMode: string(shr.backendMode),
ShareMode: string(shr.shareMode), ShareMode: string(shr.shareMode),
@ -76,3 +76,21 @@ func (i *agentGrpcImpl) ShareReserved(_ context.Context, req *agentGrpc.ShareRes
return nil, fmt.Errorf("unable to start share: %v", bootErr) return nil, fmt.Errorf("unable to start share: %v", bootErr)
} }
} }
func (i *agentGrpcImpl) ShareReserved(_ context.Context, req *agentGrpc.ShareReservedRequest) (*agentGrpc.ShareReservedResponse, error) {
if resp, err := i.agent.ShareReserved(&ShareReservedRequest{
Token: req.Token,
OverrideEndpoint: req.OverrideEndpoint,
Insecure: req.Insecure,
}); err == nil {
return &agentGrpc.ShareReservedResponse{
Token: resp.Token,
BackendMode: resp.BackendMode,
ShareMode: resp.ShareMode,
FrontendEndpoints: resp.FrontendEndpoints,
Target: resp.Target,
}, nil
} else {
return nil, err
}
}