diff --git a/agent/share.go b/agent/share.go index edc7f146..ab633154 100644 --- a/agent/share.go +++ b/agent/share.go @@ -18,15 +18,16 @@ type SharePrivateRequest struct { } type SharePublicRequest struct { - Target string - BasicAuth []string - FrontendSelection []string - BackendMode string - Insecure bool - OauthProvider string - OauthCheckInterval string - Closed bool - AccessGrants []string + Target string + BasicAuth []string + FrontendSelection []string + BackendMode string + Insecure bool + OauthProvider string + OauthEmailAddressPatterns []string + OauthCheckInterval string + Closed bool + AccessGrants []string } type ShareReservedRequest struct { @@ -35,6 +36,14 @@ type ShareReservedRequest struct { Insecure bool } +type ShareReservedResponse struct { + Token string + BackendMode string + ShareMode string + FrontendEndpoints []string + Target string +} + type share struct { token string frontendEndpoints []string diff --git a/agent/sharePublic.go b/agent/sharePublic.go index fb584eda..33891da3 100644 --- a/agent/sharePublic.go +++ b/agent/sharePublic.go @@ -13,14 +13,14 @@ import ( "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() if err != nil { - return nil, err + return "", nil, err } 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} @@ -28,7 +28,7 @@ func (i *agentGrpcImpl) SharePublic(_ context.Context, req *agentGrpc.SharePubli shareMode: sdk.PublicShareMode, backendMode: sdk.BackendMode(req.BackendMode), sub: subordinate.NewMessageHandler(), - agent: i.agent, + agent: a, } shr.sub.MessageHandler = func(msg subordinate.Message) { 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...) if err != nil { - return nil, err + return "", nil, err } <-shr.sub.BootComplete if bootErr == nil { go shr.monitor() - i.agent.addShare <- shr - return &agentGrpc.SharePublicResponse{ - Token: shr.token, - FrontendEndpoints: shr.frontendEndpoints, - }, nil + a.addShare <- shr + return shr.token, shr.frontendEndpoints, nil } else { if err := proctree.WaitChild(shr.process); err != nil { 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 } } diff --git a/agent/shareReserved.go b/agent/shareReserved.go index cfa5eebc..f5e3e588 100644 --- a/agent/shareReserved.go +++ b/agent/shareReserved.go @@ -12,7 +12,7 @@ import ( "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() if err != nil { return nil, err @@ -26,7 +26,7 @@ func (i *agentGrpcImpl) ShareReserved(_ context.Context, req *agentGrpc.ShareRes shr := &share{ reserved: true, sub: subordinate.NewMessageHandler(), - agent: i.agent, + agent: a, } shr.sub.MessageHandler = func(msg subordinate.Message) { logrus.Info(msg) @@ -60,8 +60,8 @@ func (i *agentGrpcImpl) ShareReserved(_ context.Context, req *agentGrpc.ShareRes if bootErr == nil { go shr.monitor() - i.agent.addShare <- shr - return &agentGrpc.ShareReservedResponse{ + a.addShare <- shr + return &ShareReservedResponse{ Token: shr.token, BackendMode: string(shr.backendMode), 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) } } + +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 + } +}