migrated all usages to the new package (#369)

This commit is contained in:
Michael Quigley
2023-07-13 14:26:35 -04:00
parent 7bfafd494f
commit 04b0b64ebf
38 changed files with 545 additions and 893 deletions

View File

@ -8,7 +8,7 @@ import (
"github.com/openziti/zrok/endpoints/proxy" "github.com/openziti/zrok/endpoints/proxy"
"github.com/openziti/zrok/endpoints/tcpTunnel" "github.com/openziti/zrok/endpoints/tcpTunnel"
"github.com/openziti/zrok/endpoints/udpTunnel" "github.com/openziti/zrok/endpoints/udpTunnel"
"github.com/openziti/zrok/environment/env_v0_3" "github.com/openziti/zrok/environment"
"github.com/openziti/zrok/rest_client_zrok" "github.com/openziti/zrok/rest_client_zrok"
"github.com/openziti/zrok/rest_client_zrok/share" "github.com/openziti/zrok/rest_client_zrok/share"
"github.com/openziti/zrok/rest_model_zrok" "github.com/openziti/zrok/rest_model_zrok"
@ -48,16 +48,16 @@ func newAccessPrivateCommand() *accessPrivateCommand {
func (cmd *accessPrivateCommand) run(_ *cobra.Command, args []string) { func (cmd *accessPrivateCommand) run(_ *cobra.Command, args []string) {
shrToken := args[0] shrToken := args[0]
zrd, err := env_v0_3.Load() env, err := environment.LoadRoot()
if err != nil { if err != nil {
tui.Error("error loading environment", err) tui.Error("error loading environment", err)
} }
if zrd.Env == nil { if !env.IsEnabled() {
tui.Error("unable to load environment; did you 'zrok enable'?", nil) tui.Error("unable to load environment; did you 'zrok enable'?", nil)
} }
zrok, err := zrd.Client() zrok, err := env.Client()
if err != nil { if err != nil {
if !panicInstead { if !panicInstead {
tui.Error("unable to create zrok client", err) tui.Error("unable to create zrok client", err)
@ -65,11 +65,11 @@ func (cmd *accessPrivateCommand) run(_ *cobra.Command, args []string) {
panic(err) panic(err)
} }
auth := httptransport.APIKeyAuth("X-TOKEN", "header", zrd.Env.Token) auth := httptransport.APIKeyAuth("X-TOKEN", "header", env.Environment().Token)
req := share.NewAccessParams() req := share.NewAccessParams()
req.Body = &rest_model_zrok.AccessRequest{ req.Body = &rest_model_zrok.AccessRequest{
ShrToken: shrToken, ShrToken: shrToken,
EnvZID: zrd.Env.ZId, EnvZID: env.Environment().ZitiIdentity,
} }
accessResp, err := zrok.Share.Access(req, auth) accessResp, err := zrok.Share.Access(req, auth)
if err != nil { if err != nil {
@ -168,7 +168,7 @@ func (cmd *accessPrivateCommand) run(_ *cobra.Command, args []string) {
signal.Notify(c, os.Interrupt, syscall.SIGTERM) signal.Notify(c, os.Interrupt, syscall.SIGTERM)
go func() { go func() {
<-c <-c
cmd.destroy(accessResp.Payload.FrontendToken, zrd.Env.ZId, shrToken, zrok, auth) cmd.destroy(accessResp.Payload.FrontendToken, env.Environment().ZitiIdentity, shrToken, zrok, auth)
os.Exit(0) os.Exit(0)
}() }()
@ -203,7 +203,7 @@ func (cmd *accessPrivateCommand) run(_ *cobra.Command, args []string) {
} }
close(requests) close(requests)
cmd.destroy(accessResp.Payload.FrontendToken, zrd.Env.ZId, shrToken, zrok, auth) cmd.destroy(accessResp.Payload.FrontendToken, env.Environment().ZitiIdentity, shrToken, zrok, auth)
} }
} }

View File

@ -1,14 +1,13 @@
package main package main
import ( import (
"github.com/openziti/zrok/environment/env_v0_3" "github.com/openziti/zrok/environment"
"os"
"github.com/openziti/zrok/rest_client_zrok/admin" "github.com/openziti/zrok/rest_client_zrok/admin"
"github.com/openziti/zrok/rest_model_zrok" "github.com/openziti/zrok/rest_model_zrok"
"github.com/openziti/zrok/tui" "github.com/openziti/zrok/tui"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"os"
) )
func init() { func init() {
@ -35,12 +34,12 @@ func (cmd *adminCreateFrontendCommand) run(_ *cobra.Command, args []string) {
publicName := args[1] publicName := args[1]
urlTemplate := args[2] urlTemplate := args[2]
zrd, err := env_v0_3.Load() env, err := environment.LoadRoot()
if err != nil { if err != nil {
panic(err) panic(err)
} }
zrok, err := zrd.Client() zrok, err := env.Client()
if err != nil { if err != nil {
panic(err) panic(err)
} }

View File

@ -2,7 +2,7 @@ package main
import ( import (
"fmt" "fmt"
"github.com/openziti/zrok/environment/env_v0_3" "github.com/openziti/zrok/environment"
"github.com/openziti/zrok/rest_client_zrok/admin" "github.com/openziti/zrok/rest_client_zrok/admin"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
"github.com/spf13/cobra" "github.com/spf13/cobra"
@ -32,7 +32,11 @@ func newAdminCreateIdentity() *adminCreateIdentity {
func (cmd *adminCreateIdentity) run(_ *cobra.Command, args []string) { func (cmd *adminCreateIdentity) run(_ *cobra.Command, args []string) {
name := args[0] name := args[0]
zif, err := env_v0_3.ZitiIdentityFile(name) env, err := environment.LoadRoot()
if err != nil {
panic(err)
}
zif, err := env.ZitiIdentityFile(name)
if err != nil { if err != nil {
panic(err) panic(err)
} }
@ -41,12 +45,7 @@ func (cmd *adminCreateIdentity) run(_ *cobra.Command, args []string) {
os.Exit(1) os.Exit(1)
} }
zrd, err := env_v0_3.Load() zrok, err := env.Client()
if err != nil {
panic(err)
}
zrok, err := zrd.Client()
if err != nil { if err != nil {
panic(err) panic(err)
} }
@ -59,7 +58,7 @@ func (cmd *adminCreateIdentity) run(_ *cobra.Command, args []string) {
panic(err) panic(err)
} }
if err := env_v0_3.SaveZitiIdentity(name, resp.Payload.Cfg); err != nil { if err := env.SaveZitiIdentity(name, resp.Payload.Cfg); err != nil {
panic(err) panic(err)
} }

View File

@ -1,7 +1,7 @@
package main package main
import ( import (
"github.com/openziti/zrok/environment/env_v0_3" "github.com/openziti/zrok/environment"
"github.com/openziti/zrok/rest_client_zrok/admin" "github.com/openziti/zrok/rest_client_zrok/admin"
"github.com/openziti/zrok/rest_model_zrok" "github.com/openziti/zrok/rest_model_zrok"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
@ -30,12 +30,12 @@ func newAdminDeleteFrontendCommand() *adminDeleteFrontendCommand {
func (cmd *adminDeleteFrontendCommand) run(_ *cobra.Command, args []string) { func (cmd *adminDeleteFrontendCommand) run(_ *cobra.Command, args []string) {
feToken := args[0] feToken := args[0]
zrd, err := env_v0_3.Load() env, err := environment.LoadRoot()
if err != nil { if err != nil {
panic(err) panic(err)
} }
zrok, err := zrd.Client() zrok, err := env.Client()
if err != nil { if err != nil {
panic(err) panic(err)
} }

View File

@ -3,7 +3,7 @@ package main
import ( import (
"fmt" "fmt"
"github.com/jaevor/go-nanoid" "github.com/jaevor/go-nanoid"
"github.com/openziti/zrok/environment/env_v0_3" "github.com/openziti/zrok/environment"
"github.com/openziti/zrok/rest_client_zrok/admin" "github.com/openziti/zrok/rest_client_zrok/admin"
"github.com/openziti/zrok/rest_model_zrok" "github.com/openziti/zrok/rest_model_zrok"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
@ -43,12 +43,12 @@ func (cmd *adminGenerateCommand) run(_ *cobra.Command, args []string) {
} }
} }
zrd, err := env_v0_3.Load() env, err := environment.LoadRoot()
if err != nil { if err != nil {
logrus.Error("error loading environment", err) logrus.Error("error loading environment", err)
} }
zrok, err := zrd.Client() zrok, err := env.Client()
if err != nil { if err != nil {
if !panicInstead { if !panicInstead {
logrus.Error("error creating zrok api client", err) logrus.Error("error creating zrok api client", err)

View File

@ -3,7 +3,7 @@ package main
import ( import (
"fmt" "fmt"
"github.com/jedib0t/go-pretty/v6/table" "github.com/jedib0t/go-pretty/v6/table"
"github.com/openziti/zrok/environment/env_v0_3" "github.com/openziti/zrok/environment"
"github.com/openziti/zrok/rest_client_zrok/admin" "github.com/openziti/zrok/rest_client_zrok/admin"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"os" "os"
@ -31,12 +31,12 @@ func newAdminListFrontendsCommand() *adminListFrontendsCommand {
} }
func (cmd *adminListFrontendsCommand) run(_ *cobra.Command, _ []string) { func (cmd *adminListFrontendsCommand) run(_ *cobra.Command, _ []string) {
zrd, err := env_v0_3.Load() env, err := environment.LoadRoot()
if err != nil { if err != nil {
panic(err) panic(err)
} }
zrok, err := zrd.Client() zrok, err := env.Client()
if err != nil { if err != nil {
panic(err) panic(err)
} }

View File

@ -1,7 +1,7 @@
package main package main
import ( import (
"github.com/openziti/zrok/environment/env_v0_3" "github.com/openziti/zrok/environment"
"github.com/openziti/zrok/rest_client_zrok/admin" "github.com/openziti/zrok/rest_client_zrok/admin"
"github.com/openziti/zrok/rest_model_zrok" "github.com/openziti/zrok/rest_model_zrok"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
@ -38,12 +38,12 @@ func (cmd *adminUpdateFrontendCommand) run(_ *cobra.Command, args []string) {
panic("must specify at least one of public name or url template") panic("must specify at least one of public name or url template")
} }
zrd, err := env_v0_3.Load() env, err := environment.LoadRoot()
if err != nil { if err != nil {
panic(err) panic(err)
} }
zrok, err := zrd.Client() zrok, err := env.Client()
if err != nil { if err != nil {
panic(err) panic(err)
} }

View File

@ -2,7 +2,7 @@ package main
import ( import (
"fmt" "fmt"
"github.com/openziti/zrok/environment/env_v0_3" "github.com/openziti/zrok/environment"
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
@ -28,15 +28,15 @@ func newConfigGetCommand() *configGetCommand {
func (cmd *configGetCommand) run(_ *cobra.Command, args []string) { func (cmd *configGetCommand) run(_ *cobra.Command, args []string) {
configName := args[0] configName := args[0]
zrd, err := env_v0_3.Load() env, err := environment.LoadRoot()
if err != nil { if err != nil {
panic(err) panic(err)
} }
switch configName { switch configName {
case "apiEndpoint": case "apiEndpoint":
if zrd.Cfg != nil && zrd.Cfg.ApiEndpoint != "" { if env.Config() != nil && env.Config().ApiEndpoint != "" {
fmt.Printf("apiEndpoint = %v\n", zrd.Cfg.ApiEndpoint) fmt.Printf("apiEndpoint = %v\n", env.Config().ApiEndpoint)
} else { } else {
fmt.Println("apiEndpoint = <unset>") fmt.Println("apiEndpoint = <unset>")
} }

View File

@ -2,12 +2,12 @@ package main
import ( import (
"fmt" "fmt"
"github.com/openziti/zrok/environment/env_v0_3" "github.com/openziti/zrok/environment"
"net/url" "github.com/openziti/zrok/environment/env_core"
"os"
"github.com/openziti/zrok/tui" "github.com/openziti/zrok/tui"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"net/url"
"os"
) )
func init() { func init() {
@ -33,17 +33,13 @@ func (cmd *configSetCommand) run(_ *cobra.Command, args []string) {
configName := args[0] configName := args[0]
value := args[1] value := args[1]
zrd, err := env_v0_3.Load() env, err := environment.LoadRoot()
if err != nil { if err != nil {
panic(err) panic(err)
} }
modified := false
switch configName { switch configName {
case "apiEndpoint": case "apiEndpoint":
if zrd.Cfg == nil {
zrd.Cfg = &env_v0_3.Config{}
}
ok, err := isFullyValidUrl(value) ok, err := isFullyValidUrl(value)
if err != nil { if err != nil {
tui.Error("unable to validate api endpoint", err) tui.Error("unable to validate api endpoint", err)
@ -51,25 +47,26 @@ func (cmd *configSetCommand) run(_ *cobra.Command, args []string) {
if !ok { if !ok {
tui.Error("invalid apiEndpoint; please make sure URL starts with http:// or https://", nil) tui.Error("invalid apiEndpoint; please make sure URL starts with http:// or https://", nil)
} }
zrd.Cfg.ApiEndpoint = value if env.Config() == nil {
modified = true if err := env.SetConfig(&env_core.Config{ApiEndpoint: value}); err != nil {
tui.Error("unable to save config", err)
}
} else {
cfg := env.Config()
cfg.ApiEndpoint = value
if err := env.SetConfig(cfg); err != nil {
tui.Error("unable to save config", err)
}
}
fmt.Println("zrok configuration updated")
if env.IsEnabled() {
fmt.Printf("\n[%v]: because you have a %v-d environment, you won't see your config change until you run %v first!\n\n", tui.WarningLabel, tui.Code.Render("zrok enable"), tui.Code.Render("zrok disable"))
}
default: default:
fmt.Printf("unknown config name '%v'\n", configName) fmt.Printf("unknown config name '%v'\n", configName)
os.Exit(1) os.Exit(1)
} }
if modified {
if err := zrd.Save(); err != nil {
panic(err)
}
fmt.Println("zrok configuration updated")
if zrd.Env != nil && configName == "apiEndpoint" {
fmt.Printf("\n[%v]: because you have a %v-d environment, you won't see your config change until you run %v first!\n\n", tui.WarningLabel, tui.Code.Render("zrok enable"), tui.Code.Render("zrok disable"))
}
} else {
fmt.Println("zrok configuration not changed")
}
} }
func isFullyValidUrl(rawUrl string) (bool, error) { func isFullyValidUrl(rawUrl string) (bool, error) {

View File

@ -2,7 +2,8 @@ package main
import ( import (
"fmt" "fmt"
"github.com/openziti/zrok/environment/env_v0_3" "github.com/openziti/zrok/environment"
"github.com/openziti/zrok/environment/env_core"
"github.com/openziti/zrok/tui" "github.com/openziti/zrok/tui"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"os" "os"
@ -30,33 +31,23 @@ func newConfigUnsetCommand() *configUnsetCommand {
func (cmd *configUnsetCommand) run(_ *cobra.Command, args []string) { func (cmd *configUnsetCommand) run(_ *cobra.Command, args []string) {
configName := args[0] configName := args[0]
zrd, err := env_v0_3.Load() env, err := environment.LoadRoot()
if err != nil { if err != nil {
panic(err) panic(err)
} }
modified := false
switch configName { switch configName {
case "apiEndpoint": case "apiEndpoint":
if zrd.Cfg != nil && zrd.Cfg.ApiEndpoint != "" { if err := env.SetConfig(&env_core.Config{}); err != nil {
zrd.Cfg.ApiEndpoint = "" tui.Error("unable to save config", err)
modified = true }
fmt.Println("zrok configuration updated")
if env.IsEnabled() {
fmt.Printf("\n[%v]: because you have a %v-d environment, you won't see your config change until you run %v first!\n\n", tui.WarningLabel, tui.Code.Render("zrok enable"), tui.Code.Render("zrok disable"))
} }
default: default:
fmt.Printf("unknown config name '%v'\n", configName) fmt.Printf("unknown config name '%v'\n", configName)
os.Exit(1) os.Exit(1)
} }
if modified {
if err := zrd.Save(); err != nil {
panic(err)
}
fmt.Println("zrok configuration updated")
if zrd.Env != nil && configName == "apiEndpoint" {
fmt.Printf("\n[%v]: because you have a %v-d environment, you won't see your config change until you run %v first!\n\n", tui.WarningLabel, tui.Code.Render("zrok enable"), tui.Code.Render("zrok disable"))
}
} else {
fmt.Println("zrok configuration not changed")
}
} }

View File

@ -2,7 +2,7 @@ package main
import ( import (
"fmt" "fmt"
"github.com/openziti/zrok/environment/env_v0_3" "github.com/openziti/zrok/environment"
"github.com/openziti/zrok/tui" "github.com/openziti/zrok/tui"
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
@ -27,7 +27,7 @@ func newConsoleCommand() *consoleCommand {
} }
func (cmd *consoleCommand) run(_ *cobra.Command, _ []string) { func (cmd *consoleCommand) run(_ *cobra.Command, _ []string) {
env, err := env_v0_3.Load() env, err := environment.LoadRoot()
if err != nil { if err != nil {
tui.Error("unable to load environment", err) tui.Error("unable to load environment", err)
} }

View File

@ -3,7 +3,7 @@ package main
import ( import (
"fmt" "fmt"
httpTransport "github.com/go-openapi/runtime/client" httpTransport "github.com/go-openapi/runtime/client"
"github.com/openziti/zrok/environment/env_v0_3" "github.com/openziti/zrok/environment"
restEnvironment "github.com/openziti/zrok/rest_client_zrok/environment" restEnvironment "github.com/openziti/zrok/rest_client_zrok/environment"
"github.com/openziti/zrok/rest_model_zrok" "github.com/openziti/zrok/rest_model_zrok"
"github.com/openziti/zrok/tui" "github.com/openziti/zrok/tui"
@ -31,7 +31,7 @@ func newDisableCommand() *disableCommand {
} }
func (cmd *disableCommand) run(_ *cobra.Command, _ []string) { func (cmd *disableCommand) run(_ *cobra.Command, _ []string) {
zrd, err := env_v0_3.Load() env, err := environment.LoadRoot()
if err != nil { if err != nil {
if !panicInstead { if !panicInstead {
tui.Error("unable to load environment", err) tui.Error("unable to load environment", err)
@ -39,33 +39,33 @@ func (cmd *disableCommand) run(_ *cobra.Command, _ []string) {
panic(err) panic(err)
} }
if zrd.Env == nil { if !env.IsEnabled() {
tui.Error("no environment found; nothing to disable!", nil) tui.Error("no environment found; nothing to disable!", nil)
} }
zrok, err := zrd.Client() zrok, err := env.Client()
if err != nil { if err != nil {
if !panicInstead { if !panicInstead {
tui.Error("could not create zrok client", err) tui.Error("could not create zrok client", err)
} }
panic(err) panic(err)
} }
auth := httpTransport.APIKeyAuth("X-TOKEN", "header", zrd.Env.Token) auth := httpTransport.APIKeyAuth("X-TOKEN", "header", env.Environment().Token)
req := restEnvironment.NewDisableParams() req := restEnvironment.NewDisableParams()
req.Body = &rest_model_zrok.DisableRequest{ req.Body = &rest_model_zrok.DisableRequest{
Identity: zrd.Env.ZId, Identity: env.Environment().ZitiIdentity,
} }
_, err = zrok.Environment.Disable(req, auth) _, err = zrok.Environment.Disable(req, auth)
if err != nil { if err != nil {
logrus.Warnf("share cleanup failed (%v); will clean up local environment", err) logrus.Warnf("share cleanup failed (%v); will clean up local environment", err)
} }
if err := env_v0_3.DeleteEnvironment(); err != nil { if err := env.DeleteEnvironment(); err != nil {
if !panicInstead { if !panicInstead {
tui.Error("error removing zrok environment", err) tui.Error("error removing zrok environment", err)
} }
panic(err) panic(err)
} }
if err := env_v0_3.DeleteZitiIdentity("backend"); err != nil { if err := env.DeleteZitiIdentity("backend"); err != nil {
if !panicInstead { if !panicInstead {
tui.Error("error removing zrok backend identity", err) tui.Error("error removing zrok backend identity", err)
} }

View File

@ -2,20 +2,20 @@ package main
import ( import (
"fmt" "fmt"
"github.com/openziti/zrok/environment/env_v0_3"
"github.com/sirupsen/logrus"
"os"
user2 "os/user"
"time"
"github.com/charmbracelet/bubbles/spinner" "github.com/charmbracelet/bubbles/spinner"
tea "github.com/charmbracelet/bubbletea" tea "github.com/charmbracelet/bubbletea"
httptransport "github.com/go-openapi/runtime/client" httptransport "github.com/go-openapi/runtime/client"
"github.com/openziti/zrok/environment"
"github.com/openziti/zrok/environment/env_core"
restEnvironment "github.com/openziti/zrok/rest_client_zrok/environment" restEnvironment "github.com/openziti/zrok/rest_client_zrok/environment"
"github.com/openziti/zrok/rest_model_zrok" "github.com/openziti/zrok/rest_model_zrok"
"github.com/openziti/zrok/tui" "github.com/openziti/zrok/tui"
"github.com/shirou/gopsutil/v3/host" "github.com/shirou/gopsutil/v3/host"
"github.com/sirupsen/logrus"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"os"
user2 "os/user"
"time"
) )
func init() { func init() {
@ -42,13 +42,13 @@ func newEnableCommand() *enableCommand {
} }
func (cmd *enableCommand) run(_ *cobra.Command, args []string) { func (cmd *enableCommand) run(_ *cobra.Command, args []string) {
zrd, err := env_v0_3.Load() env, err := environment.LoadRoot()
if err != nil { if err != nil {
panic(err) panic(err)
} }
token := args[0] token := args[0]
if zrd.Env != nil { if env.IsEnabled() {
tui.Error(fmt.Sprintf("you already have an enabled environment, %v first before you %v", tui.Code.Render("zrok disable"), tui.Code.Render("zrok enable")), nil) tui.Error(fmt.Sprintf("you already have an enabled environment, %v first before you %v", tui.Code.Render("zrok disable"), tui.Code.Render("zrok enable")), nil)
} }
@ -64,9 +64,9 @@ func (cmd *enableCommand) run(_ *cobra.Command, args []string) {
if cmd.description == "<user>@<hostname>" { if cmd.description == "<user>@<hostname>" {
cmd.description = fmt.Sprintf("%v@%v", user.Username, hostName) cmd.description = fmt.Sprintf("%v@%v", user.Username, hostName)
} }
zrok, err := zrd.Client() zrok, err := env.Client()
if err != nil { if err != nil {
cmd.endpointError(zrd.ApiEndpoint()) cmd.endpointError(env.ApiEndpoint())
tui.Error("error creating service client", err) tui.Error("error creating service client", err)
} }
auth := httptransport.APIKeyAuth("X-TOKEN", "header", token) auth := httptransport.APIKeyAuth("X-TOKEN", "header", token)
@ -110,15 +110,14 @@ func (cmd *enableCommand) run(_ *cobra.Command, args []string) {
case <-done: case <-done:
case <-time.After(1 * time.Second): case <-time.After(1 * time.Second):
} }
cmd.endpointError(zrd.ApiEndpoint()) cmd.endpointError(env.ApiEndpoint())
os.Exit(1) os.Exit(1)
} }
if err != nil { if err != nil {
prg.Send("writing the environment details...") prg.Send("writing the environment details...")
} }
apiEndpoint, _ := zrd.ApiEndpoint() apiEndpoint, _ := env.ApiEndpoint()
zrd.Env = &env_v0_3.Environment{Token: token, ZId: resp.Payload.Identity, ApiEndpoint: apiEndpoint} if err := env.SetEnvironment(&env_core.Environment{Token: token, ZitiIdentity: resp.Payload.Identity, ApiEndpoint: apiEndpoint}); err != nil {
if err := zrd.Save(); err != nil {
if !cmd.headless && prg != nil { if !cmd.headless && prg != nil {
prg.Send(fmt.Sprintf("there was an error saving the new environment: %v", err)) prg.Send(fmt.Sprintf("there was an error saving the new environment: %v", err))
prg.Quit() prg.Quit()
@ -131,7 +130,7 @@ func (cmd *enableCommand) run(_ *cobra.Command, args []string) {
} }
os.Exit(1) os.Exit(1)
} }
if err := env_v0_3.SaveZitiIdentity("backend", resp.Payload.Cfg); err != nil { if err := env.SaveZitiIdentity("backend", resp.Payload.Cfg); err != nil {
if !cmd.headless && prg != nil { if !cmd.headless && prg != nil {
prg.Send(fmt.Sprintf("there was an error writing the environment: %v", err)) prg.Send(fmt.Sprintf("there was an error writing the environment: %v", err))
prg.Quit() prg.Quit()

View File

@ -2,19 +2,18 @@ package main
import ( import (
"fmt" "fmt"
"github.com/openziti/zrok/environment/env_v0_3"
"os"
"strings"
"github.com/charmbracelet/bubbles/textinput" "github.com/charmbracelet/bubbles/textinput"
tea "github.com/charmbracelet/bubbletea" tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss" "github.com/charmbracelet/lipgloss"
"github.com/openziti/zrok/environment"
"github.com/openziti/zrok/rest_client_zrok/account" "github.com/openziti/zrok/rest_client_zrok/account"
"github.com/openziti/zrok/rest_client_zrok/metadata" "github.com/openziti/zrok/rest_client_zrok/metadata"
"github.com/openziti/zrok/rest_model_zrok" "github.com/openziti/zrok/rest_model_zrok"
"github.com/openziti/zrok/tui" "github.com/openziti/zrok/tui"
"github.com/openziti/zrok/util" "github.com/openziti/zrok/util"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"os"
"strings"
) )
func init() { func init() {
@ -42,15 +41,15 @@ func newInviteCommand() *inviteCommand {
} }
func (cmd *inviteCommand) run(_ *cobra.Command, _ []string) { func (cmd *inviteCommand) run(_ *cobra.Command, _ []string) {
zrd, err := env_v0_3.Load() env, err := environment.LoadRoot()
if err != nil { if err != nil {
tui.Error("error loading environment", err) tui.Error("error loading environment", err)
} }
zrok, err := zrd.Client() zrok, err := env.Client()
if err != nil { if err != nil {
if !panicInstead { if !panicInstead {
cmd.endpointError(zrd.ApiEndpoint()) cmd.endpointError(env.ApiEndpoint())
tui.Error("error creating zrok api client", err) tui.Error("error creating zrok api client", err)
} }
panic(err) panic(err)
@ -63,7 +62,7 @@ func (cmd *inviteCommand) run(_ *cobra.Command, _ []string) {
if md != nil { if md != nil {
if !md.GetPayload().InvitesOpen { if !md.GetPayload().InvitesOpen {
apiEndpoint, _ := zrd.ApiEndpoint() apiEndpoint, _ := env.ApiEndpoint()
tui.Error(fmt.Sprintf("'%v' is not currently accepting new users", apiEndpoint), nil) tui.Error(fmt.Sprintf("'%v' is not currently accepting new users", apiEndpoint), nil)
} }
cmd.tui.invitesOpen = md.GetPayload().InvitesOpen cmd.tui.invitesOpen = md.GetPayload().InvitesOpen
@ -86,7 +85,7 @@ func (cmd *inviteCommand) run(_ *cobra.Command, _ []string) {
} }
_, err = zrok.Account.Invite(req) _, err = zrok.Account.Invite(req)
if err != nil { if err != nil {
cmd.endpointError(zrd.ApiEndpoint()) cmd.endpointError(env.ApiEndpoint())
tui.Error("error creating invitation", err) tui.Error("error creating invitation", err)
} }

View File

@ -2,7 +2,7 @@ package main
import ( import (
httptransport "github.com/go-openapi/runtime/client" httptransport "github.com/go-openapi/runtime/client"
"github.com/openziti/zrok/environment/env_v0_3" "github.com/openziti/zrok/environment"
"github.com/openziti/zrok/rest_client_zrok/share" "github.com/openziti/zrok/rest_client_zrok/share"
"github.com/openziti/zrok/rest_model_zrok" "github.com/openziti/zrok/rest_model_zrok"
"github.com/openziti/zrok/tui" "github.com/openziti/zrok/tui"
@ -31,7 +31,7 @@ func newReleaseCommand() *releaseCommand {
func (cmd *releaseCommand) run(_ *cobra.Command, args []string) { func (cmd *releaseCommand) run(_ *cobra.Command, args []string) {
shrToken := args[0] shrToken := args[0]
zrd, err := env_v0_3.Load() env, err := environment.LoadRoot()
if err != nil { if err != nil {
if !panicInstead { if !panicInstead {
tui.Error("unable to load environment", err) tui.Error("unable to load environment", err)
@ -39,11 +39,11 @@ func (cmd *releaseCommand) run(_ *cobra.Command, args []string) {
panic(err) panic(err)
} }
if zrd.Env == nil { if !env.IsEnabled() {
tui.Error("unable to load environment; did you 'zrok enable'?", nil) tui.Error("unable to load environment; did you 'zrok enable'?", nil)
} }
zrok, err := zrd.Client() zrok, err := env.Client()
if err != nil { if err != nil {
if !panicInstead { if !panicInstead {
tui.Error("unable to create zrok client", err) tui.Error("unable to create zrok client", err)
@ -51,10 +51,10 @@ func (cmd *releaseCommand) run(_ *cobra.Command, args []string) {
panic(err) panic(err)
} }
auth := httptransport.APIKeyAuth("X-TOKEN", "header", zrd.Env.Token) auth := httptransport.APIKeyAuth("X-TOKEN", "header", env.Environment().Token)
req := share.NewUnshareParams() req := share.NewUnshareParams()
req.Body = &rest_model_zrok.UnshareRequest{ req.Body = &rest_model_zrok.UnshareRequest{
EnvZID: zrd.Env.ZId, EnvZID: env.Environment().ZitiIdentity,
ShrToken: shrToken, ShrToken: shrToken,
Reserved: true, Reserved: true,
} }

View File

@ -2,7 +2,7 @@ package main
import ( import (
httptransport "github.com/go-openapi/runtime/client" httptransport "github.com/go-openapi/runtime/client"
"github.com/openziti/zrok/environment/env_v0_3" "github.com/openziti/zrok/environment"
"github.com/openziti/zrok/model" "github.com/openziti/zrok/model"
"github.com/openziti/zrok/rest_client_zrok/share" "github.com/openziti/zrok/rest_client_zrok/share"
"github.com/openziti/zrok/rest_model_zrok" "github.com/openziti/zrok/rest_model_zrok"
@ -60,7 +60,7 @@ func (cmd *reserveCommand) run(_ *cobra.Command, args []string) {
target = args[1] target = args[1]
} }
zrd, err := env_v0_3.Load() env, err := environment.LoadRoot()
if err != nil { if err != nil {
if !panicInstead { if !panicInstead {
tui.Error("error loading environment", err) tui.Error("error loading environment", err)
@ -68,21 +68,21 @@ func (cmd *reserveCommand) run(_ *cobra.Command, args []string) {
panic(err) panic(err)
} }
if zrd.Env == nil { if !env.IsEnabled() {
tui.Error("unable to load environment; did you 'zrok enable'?", nil) tui.Error("unable to load environment; did you 'zrok enable'?", nil)
} }
zrok, err := zrd.Client() zrok, err := env.Client()
if err != nil { if err != nil {
if !panicInstead { if !panicInstead {
tui.Error("unable to create zrok client", err) tui.Error("unable to create zrok client", err)
} }
panic(err) panic(err)
} }
auth := httptransport.APIKeyAuth("X-TOKEN", "header", zrd.Env.Token) auth := httptransport.APIKeyAuth("X-TOKEN", "header", env.Environment().Token)
req := share.NewShareParams() req := share.NewShareParams()
req.Body = &rest_model_zrok.ShareRequest{ req.Body = &rest_model_zrok.ShareRequest{
EnvZID: zrd.Env.ZId, EnvZID: env.Environment().ZitiIdentity,
ShareMode: shareMode, ShareMode: shareMode,
BackendMode: cmd.backendMode, BackendMode: cmd.backendMode,
BackendProxyEndpoint: target, BackendProxyEndpoint: target,

View File

@ -9,7 +9,7 @@ import (
"github.com/openziti/zrok/endpoints/proxy" "github.com/openziti/zrok/endpoints/proxy"
"github.com/openziti/zrok/endpoints/tcpTunnel" "github.com/openziti/zrok/endpoints/tcpTunnel"
"github.com/openziti/zrok/endpoints/udpTunnel" "github.com/openziti/zrok/endpoints/udpTunnel"
"github.com/openziti/zrok/environment/env_v0_3" "github.com/openziti/zrok/environment"
"github.com/openziti/zrok/model" "github.com/openziti/zrok/model"
"github.com/openziti/zrok/rest_client_zrok" "github.com/openziti/zrok/rest_client_zrok"
"github.com/openziti/zrok/rest_client_zrok/share" "github.com/openziti/zrok/rest_client_zrok/share"
@ -78,7 +78,7 @@ func (cmd *sharePrivateCommand) run(_ *cobra.Command, args []string) {
tui.Error(fmt.Sprintf("invalid backend mode '%v'; expected {proxy, web, tcpTunnel}", cmd.backendMode), nil) tui.Error(fmt.Sprintf("invalid backend mode '%v'; expected {proxy, web, tcpTunnel}", cmd.backendMode), nil)
} }
zrd, err := env_v0_3.Load() env, err := environment.LoadRoot()
if err != nil { if err != nil {
if !panicInstead { if !panicInstead {
tui.Error("unable to load environment", err) tui.Error("unable to load environment", err)
@ -86,11 +86,11 @@ func (cmd *sharePrivateCommand) run(_ *cobra.Command, args []string) {
panic(err) panic(err)
} }
if zrd.Env == nil { if !env.IsEnabled() {
tui.Error("unable to load environment; did you 'zrok enable'?", nil) tui.Error("unable to load environment; did you 'zrok enable'?", nil)
} }
zif, err := env_v0_3.ZitiIdentityFile("backend") zif, err := env.ZitiIdentityFile("backend")
if err != nil { if err != nil {
if !panicInstead { if !panicInstead {
tui.Error("unable to load ziti identity configuration", err) tui.Error("unable to load ziti identity configuration", err)
@ -98,7 +98,7 @@ func (cmd *sharePrivateCommand) run(_ *cobra.Command, args []string) {
panic(err) panic(err)
} }
zrok, err := zrd.Client() zrok, err := env.Client()
if err != nil { if err != nil {
if !panicInstead { if !panicInstead {
tui.Error("unable to create zrok client", err) tui.Error("unable to create zrok client", err)
@ -106,10 +106,10 @@ func (cmd *sharePrivateCommand) run(_ *cobra.Command, args []string) {
panic(err) panic(err)
} }
auth := httptransport.APIKeyAuth("X-TOKEN", "header", zrd.Env.Token) auth := httptransport.APIKeyAuth("X-TOKEN", "header", env.Environment().Token)
req := share.NewShareParams() req := share.NewShareParams()
req.Body = &rest_model_zrok.ShareRequest{ req.Body = &rest_model_zrok.ShareRequest{
EnvZID: zrd.Env.ZId, EnvZID: env.Environment().ZitiIdentity,
ShareMode: "private", ShareMode: "private",
BackendMode: cmd.backendMode, BackendMode: cmd.backendMode,
BackendProxyEndpoint: target, BackendProxyEndpoint: target,
@ -139,7 +139,7 @@ func (cmd *sharePrivateCommand) run(_ *cobra.Command, args []string) {
signal.Notify(c, os.Interrupt, syscall.SIGTERM) signal.Notify(c, os.Interrupt, syscall.SIGTERM)
go func() { go func() {
<-c <-c
cmd.destroy(zrd.Env.ZId, resp.Payload.ShrToken, zrok, auth) cmd.destroy(env.Environment().ZitiIdentity, resp.Payload.ShrToken, zrok, auth)
os.Exit(0) os.Exit(0)
}() }()
@ -250,7 +250,7 @@ func (cmd *sharePrivateCommand) run(_ *cobra.Command, args []string) {
} }
close(requestsChan) close(requestsChan)
cmd.destroy(zrd.Env.ZId, resp.Payload.ShrToken, zrok, auth) cmd.destroy(env.Environment().ZitiIdentity, resp.Payload.ShrToken, zrok, auth)
} }
} }

View File

@ -7,7 +7,7 @@ import (
httptransport "github.com/go-openapi/runtime/client" httptransport "github.com/go-openapi/runtime/client"
"github.com/openziti/zrok/endpoints" "github.com/openziti/zrok/endpoints"
"github.com/openziti/zrok/endpoints/proxy" "github.com/openziti/zrok/endpoints/proxy"
"github.com/openziti/zrok/environment/env_v0_3" "github.com/openziti/zrok/environment"
"github.com/openziti/zrok/model" "github.com/openziti/zrok/model"
"github.com/openziti/zrok/rest_client_zrok" "github.com/openziti/zrok/rest_client_zrok"
"github.com/openziti/zrok/rest_client_zrok/share" "github.com/openziti/zrok/rest_client_zrok/share"
@ -72,7 +72,7 @@ func (cmd *sharePublicCommand) run(_ *cobra.Command, args []string) {
tui.Error(fmt.Sprintf("invalid backend mode '%v'; expected {proxy, web}", cmd.backendMode), nil) tui.Error(fmt.Sprintf("invalid backend mode '%v'; expected {proxy, web}", cmd.backendMode), nil)
} }
zrd, err := env_v0_3.Load() env, err := environment.LoadRoot()
if err != nil { if err != nil {
if !panicInstead { if !panicInstead {
tui.Error("unable to load environment", err) tui.Error("unable to load environment", err)
@ -80,11 +80,11 @@ func (cmd *sharePublicCommand) run(_ *cobra.Command, args []string) {
panic(err) panic(err)
} }
if zrd.Env == nil { if !env.IsEnabled() {
tui.Error("unable to load environment; did you 'zrok enable'?", nil) tui.Error("unable to load environment; did you 'zrok enable'?", nil)
} }
zif, err := env_v0_3.ZitiIdentityFile("backend") zif, err := env.ZitiIdentityFile("backend")
if err != nil { if err != nil {
if !panicInstead { if !panicInstead {
tui.Error("unable to load ziti identity configuration", err) tui.Error("unable to load ziti identity configuration", err)
@ -92,7 +92,7 @@ func (cmd *sharePublicCommand) run(_ *cobra.Command, args []string) {
panic(err) panic(err)
} }
zrok, err := zrd.Client() zrok, err := env.Client()
if err != nil { if err != nil {
if !panicInstead { if !panicInstead {
tui.Error("unable to create zrok client", err) tui.Error("unable to create zrok client", err)
@ -100,10 +100,10 @@ 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", env.Environment().Token)
req := share.NewShareParams() req := share.NewShareParams()
req.Body = &rest_model_zrok.ShareRequest{ req.Body = &rest_model_zrok.ShareRequest{
EnvZID: zrd.Env.ZId, EnvZID: env.Environment().ZitiIdentity,
ShareMode: "public", ShareMode: "public",
FrontendSelection: cmd.frontendSelection, FrontendSelection: cmd.frontendSelection,
BackendMode: cmd.backendMode, BackendMode: cmd.backendMode,
@ -134,7 +134,7 @@ func (cmd *sharePublicCommand) run(_ *cobra.Command, args []string) {
signal.Notify(c, os.Interrupt, syscall.SIGTERM) signal.Notify(c, os.Interrupt, syscall.SIGTERM)
go func() { go func() {
<-c <-c
cmd.destroy(zrd.Env.ZId, resp.Payload.ShrToken, zrok, auth) cmd.destroy(env.Environment().ZitiIdentity, resp.Payload.ShrToken, zrok, auth)
os.Exit(0) os.Exit(0)
}() }()
@ -204,7 +204,7 @@ func (cmd *sharePublicCommand) run(_ *cobra.Command, args []string) {
} }
close(requestsChan) close(requestsChan)
cmd.destroy(zrd.Env.ZId, resp.Payload.ShrToken, zrok, auth) cmd.destroy(env.Environment().ZitiIdentity, resp.Payload.ShrToken, zrok, auth)
} }
} }

View File

@ -6,7 +6,7 @@ import (
httptransport "github.com/go-openapi/runtime/client" httptransport "github.com/go-openapi/runtime/client"
"github.com/openziti/zrok/endpoints" "github.com/openziti/zrok/endpoints"
"github.com/openziti/zrok/endpoints/proxy" "github.com/openziti/zrok/endpoints/proxy"
"github.com/openziti/zrok/environment/env_v0_3" "github.com/openziti/zrok/environment"
"github.com/openziti/zrok/rest_client_zrok/metadata" "github.com/openziti/zrok/rest_client_zrok/metadata"
"github.com/openziti/zrok/rest_client_zrok/share" "github.com/openziti/zrok/rest_client_zrok/share"
"github.com/openziti/zrok/rest_model_zrok" "github.com/openziti/zrok/rest_model_zrok"
@ -44,7 +44,7 @@ func (cmd *shareReservedCommand) run(_ *cobra.Command, args []string) {
shrToken := args[0] shrToken := args[0]
var target string var target string
zrd, err := env_v0_3.Load() env, err := environment.LoadRoot()
if err != nil { if err != nil {
if !panicInstead { if !panicInstead {
tui.Error("error loading environment", err) tui.Error("error loading environment", err)
@ -52,18 +52,18 @@ func (cmd *shareReservedCommand) run(_ *cobra.Command, args []string) {
panic(err) panic(err)
} }
if zrd.Env == nil { if !env.IsEnabled() {
tui.Error("unable to load environment; did you 'zrok enable'?", nil) tui.Error("unable to load environment; did you 'zrok enable'?", nil)
} }
zrok, err := zrd.Client() zrok, err := env.Client()
if err != nil { if err != nil {
if !panicInstead { if !panicInstead {
tui.Error("unable to create zrok client", err) tui.Error("unable to create zrok client", err)
} }
panic(err) panic(err)
} }
auth := httptransport.APIKeyAuth("X-TOKEN", "header", zrd.Env.Token) auth := httptransport.APIKeyAuth("X-TOKEN", "header", env.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)
@ -78,7 +78,7 @@ func (cmd *shareReservedCommand) run(_ *cobra.Command, args []string) {
target = resp.Payload.BackendProxyEndpoint target = resp.Payload.BackendProxyEndpoint
} }
zif, err := env_v0_3.ZitiIdentityFile("backend") zif, err := env.ZitiIdentityFile("backend")
if err != nil { if err != nil {
if !panicInstead { if !panicInstead {
tui.Error("unable to load ziti identity configuration", err) tui.Error("unable to load ziti identity configuration", err)

View File

@ -3,7 +3,7 @@ package main
import ( import (
"fmt" "fmt"
"github.com/jedib0t/go-pretty/v6/table" "github.com/jedib0t/go-pretty/v6/table"
"github.com/openziti/zrok/environment/env_v0_3" "github.com/openziti/zrok/environment"
"github.com/openziti/zrok/tui" "github.com/openziti/zrok/tui"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"os" "os"
@ -34,7 +34,7 @@ func newStatusCommand() *statusCommand {
func (cmd *statusCommand) run(_ *cobra.Command, _ []string) { func (cmd *statusCommand) run(_ *cobra.Command, _ []string) {
_, _ = fmt.Fprintf(os.Stderr, "\n") _, _ = fmt.Fprintf(os.Stderr, "\n")
zrd, err := env_v0_3.Load() env, err := environment.LoadRoot()
if err != nil { if err != nil {
tui.Error("error loading environment", err) tui.Error("error loading environment", err)
} }
@ -44,12 +44,12 @@ func (cmd *statusCommand) run(_ *cobra.Command, _ []string) {
t.SetOutputMirror(os.Stdout) t.SetOutputMirror(os.Stdout)
t.SetStyle(table.StyleColoredDark) t.SetStyle(table.StyleColoredDark)
t.AppendHeader(table.Row{"Config", "Value", "Source"}) t.AppendHeader(table.Row{"Config", "Value", "Source"})
apiEndpoint, from := zrd.ApiEndpoint() apiEndpoint, from := env.ApiEndpoint()
t.AppendRow(table.Row{"apiEndpoint", apiEndpoint, from}) t.AppendRow(table.Row{"apiEndpoint", apiEndpoint, from})
t.Render() t.Render()
_, _ = fmt.Fprintf(os.Stderr, "\n") _, _ = fmt.Fprintf(os.Stderr, "\n")
if zrd.Env == nil { if !env.IsEnabled() {
tui.Warning("Unable to load your local environment!\n") tui.Warning("Unable to load your local environment!\n")
_, _ = fmt.Fprintf(os.Stderr, "To create a local environment use the %v command.\n", tui.Code.Render("zrok enable")) _, _ = fmt.Fprintf(os.Stderr, "To create a local environment use the %v command.\n", tui.Code.Render("zrok enable"))
} else { } else {
@ -60,17 +60,17 @@ func (cmd *statusCommand) run(_ *cobra.Command, _ []string) {
t.SetStyle(table.StyleColoredDark) t.SetStyle(table.StyleColoredDark)
t.AppendHeader(table.Row{"Property", "Value"}) t.AppendHeader(table.Row{"Property", "Value"})
if cmd.secrets { if cmd.secrets {
t.AppendRow(table.Row{"Secret Token", zrd.Env.Token}) t.AppendRow(table.Row{"Secret Token", env.Environment().Token})
t.AppendRow(table.Row{"Ziti Identity", zrd.Env.ZId}) t.AppendRow(table.Row{"Ziti Identity", env.Environment().ZitiIdentity})
} else { } else {
secretToken := "<<SET>>" secretToken := "<<SET>>"
if zrd.Env.Token == "" { if env.Environment().Token == "" {
secretToken = "<<UNSET>>" secretToken = "<<UNSET>>"
} }
t.AppendRow(table.Row{"Secret Token", secretToken}) t.AppendRow(table.Row{"Secret Token", secretToken})
zId := "<<SET>>" zId := "<<SET>>"
if zrd.Env.ZId == "" { if env.Environment().ZitiIdentity == "" {
zId = "<<UNSET>>" zId = "<<UNSET>>"
} }
t.AppendRow(table.Row{"Ziti Identity", zId}) t.AppendRow(table.Row{"Ziti Identity", zId})

View File

@ -8,7 +8,8 @@ import (
httptransport "github.com/go-openapi/runtime/client" httptransport "github.com/go-openapi/runtime/client"
"github.com/openziti/sdk-golang/ziti" "github.com/openziti/sdk-golang/ziti"
"github.com/openziti/sdk-golang/ziti/edge" "github.com/openziti/sdk-golang/ziti/edge"
"github.com/openziti/zrok/environment/env_v0_3" "github.com/openziti/zrok/environment"
"github.com/openziti/zrok/environment/env_core"
"github.com/openziti/zrok/model" "github.com/openziti/zrok/model"
"github.com/openziti/zrok/rest_client_zrok" "github.com/openziti/zrok/rest_client_zrok"
"github.com/openziti/zrok/rest_client_zrok/share" "github.com/openziti/zrok/rest_client_zrok/share"
@ -105,7 +106,7 @@ func (cmd *testLoopPublicCommand) run(_ *cobra.Command, _ []string) {
type looper struct { type looper struct {
id int id int
cmd *testLoopPublicCommand cmd *testLoopPublicCommand
env *env_v0_3.Environment env *env_core.Environment
done chan struct{} done chan struct{}
listener edge.Listener listener edge.Listener
zif string zif string
@ -175,28 +176,28 @@ func (l *looper) ServeHTTP(w http.ResponseWriter, r *http.Request) {
func (l *looper) startup() { func (l *looper) startup() {
logrus.Infof("starting #%d", l.id) logrus.Infof("starting #%d", l.id)
zrd, err := env_v0_3.Load() env, err := environment.LoadRoot()
if err != nil { if err != nil {
panic(err) panic(err)
} }
if zrd.Env == nil { if !env.IsEnabled() {
tui.Error("unable to load environment; did you 'zrok enable'?", nil) tui.Error("unable to load environment; did you 'zrok enable'?", nil)
} }
l.env = zrd.Env l.env = env.Environment()
l.zif, err = env_v0_3.ZitiIdentityFile("backend") l.zif, err = env.ZitiIdentityFile("backend")
if err != nil { if err != nil {
panic(err) panic(err)
} }
l.zrok, err = zrd.Client() l.zrok, err = env.Client()
if err != nil { if err != nil {
panic(err) panic(err)
} }
l.auth = httptransport.APIKeyAuth("x-token", "header", l.env.Token) l.auth = httptransport.APIKeyAuth("x-token", "header", l.env.Token)
tunnelReq := share.NewShareParams() tunnelReq := share.NewShareParams()
tunnelReq.Body = &rest_model_zrok.ShareRequest{ tunnelReq.Body = &rest_model_zrok.ShareRequest{
EnvZID: l.env.ZId, EnvZID: l.env.ZitiIdentity,
ShareMode: "public", ShareMode: "public",
FrontendSelection: l.cmd.frontendSelection, FrontendSelection: l.cmd.frontendSelection,
BackendMode: "proxy", BackendMode: "proxy",
@ -272,7 +273,7 @@ func (l *looper) shutdown() {
untunnelReq := share.NewUnshareParams() untunnelReq := share.NewUnshareParams()
untunnelReq.Body = &rest_model_zrok.UnshareRequest{ untunnelReq.Body = &rest_model_zrok.UnshareRequest{
EnvZID: l.env.ZId, EnvZID: l.env.ZitiIdentity,
ShrToken: l.shrToken, ShrToken: l.shrToken,
} }
if _, err := l.zrok.Share.Unshare(untunnelReq, l.auth); err != nil { if _, err := l.zrok.Share.Unshare(untunnelReq, l.auth); err != nil {

View File

@ -14,7 +14,7 @@ import (
zrok_config "github.com/openziti/zrok/controller/config" zrok_config "github.com/openziti/zrok/controller/config"
"github.com/openziti/zrok/controller/store" "github.com/openziti/zrok/controller/store"
"github.com/openziti/zrok/controller/zrokEdgeSdk" "github.com/openziti/zrok/controller/zrokEdgeSdk"
"github.com/openziti/zrok/environment/env_v0_3" "github.com/openziti/zrok/environment"
"github.com/openziti/zrok/model" "github.com/openziti/zrok/model"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
@ -133,7 +133,11 @@ func assertZrokProxyConfigType(edge *rest_management_api_client.ZitiEdgeManageme
} }
func getIdentityId(identityName string) (string, error) { func getIdentityId(identityName string) (string, error) {
zif, err := env_v0_3.ZitiIdentityFile(identityName) env, err := environment.LoadRoot()
if err != nil {
return "", errors.Wrap(err, "error opening environment root")
}
zif, err := env.ZitiIdentityFile(identityName)
if err != nil { if err != nil {
return "", errors.Wrapf(err, "error opening identity '%v' from environment", identityName) return "", errors.Wrapf(err, "error opening identity '%v' from environment", identityName)
} }
@ -177,6 +181,11 @@ func assertIdentity(zId string, edge *rest_management_api_client.ZitiEdgeManagem
} }
func bootstrapIdentity(name string, edge *rest_management_api_client.ZitiEdgeManagement) (string, error) { func bootstrapIdentity(name string, edge *rest_management_api_client.ZitiEdgeManagement) (string, error) {
env, err := environment.LoadRoot()
if err != nil {
return "", errors.Wrap(err, "error loading environment root")
}
idc, err := zrokEdgeSdk.CreateIdentity(name, rest_model_edge.IdentityTypeDevice, nil, edge) idc, err := zrokEdgeSdk.CreateIdentity(name, rest_model_edge.IdentityTypeDevice, nil, edge)
if err != nil { if err != nil {
return "", errors.Wrapf(err, "error creating '%v' identity", name) return "", errors.Wrapf(err, "error creating '%v' identity", name)
@ -195,7 +204,7 @@ func bootstrapIdentity(name string, edge *rest_management_api_client.ZitiEdgeMan
if err != nil { if err != nil {
return "", errors.Wrapf(err, "error encoding identity config '%v'", name) return "", errors.Wrapf(err, "error encoding identity config '%v'", name)
} }
if err := env_v0_3.SaveZitiIdentity(name, out.String()); err != nil { if err := env.SaveZitiIdentity(name, out.String()); err != nil {
return "", errors.Wrapf(err, "error saving identity config '%v'", name) return "", errors.Wrapf(err, "error saving identity config '%v'", name)
} }
return zId, nil return zId, nil

View File

@ -6,7 +6,7 @@ import (
"github.com/openziti/sdk-golang/ziti" "github.com/openziti/sdk-golang/ziti"
"github.com/openziti/zrok/endpoints" "github.com/openziti/zrok/endpoints"
"github.com/openziti/zrok/endpoints/publicProxy/notFoundUi" "github.com/openziti/zrok/endpoints/publicProxy/notFoundUi"
"github.com/openziti/zrok/environment/env_v0_3" "github.com/openziti/zrok/environment"
"github.com/openziti/zrok/model" "github.com/openziti/zrok/model"
"github.com/openziti/zrok/util" "github.com/openziti/zrok/util"
"github.com/pkg/errors" "github.com/pkg/errors"
@ -40,7 +40,11 @@ type Frontend struct {
} }
func NewFrontend(cfg *FrontendConfig) (*Frontend, error) { func NewFrontend(cfg *FrontendConfig) (*Frontend, error) {
zCfgPath, err := env_v0_3.ZitiIdentityFile(cfg.IdentityName) env, err := environment.LoadRoot()
if err != nil {
return nil, errors.Wrap(err, "error loading environment root")
}
zCfgPath, err := env.ZitiIdentityFile(cfg.IdentityName)
if err != nil { if err != nil {
return nil, errors.Wrapf(err, "error getting ziti identity '%v' from environment", cfg.IdentityName) return nil, errors.Wrapf(err, "error getting ziti identity '%v' from environment", cfg.IdentityName)
} }

View File

@ -7,7 +7,7 @@ import (
"github.com/openziti/zrok/endpoints" "github.com/openziti/zrok/endpoints"
"github.com/openziti/zrok/endpoints/publicProxy/healthUi" "github.com/openziti/zrok/endpoints/publicProxy/healthUi"
"github.com/openziti/zrok/endpoints/publicProxy/notFoundUi" "github.com/openziti/zrok/endpoints/publicProxy/notFoundUi"
"github.com/openziti/zrok/environment/env_v0_3" "github.com/openziti/zrok/environment"
"github.com/openziti/zrok/model" "github.com/openziti/zrok/model"
"github.com/openziti/zrok/util" "github.com/openziti/zrok/util"
"github.com/pkg/errors" "github.com/pkg/errors"
@ -26,7 +26,11 @@ type httpFrontend struct {
} }
func NewHTTP(cfg *Config) (*httpFrontend, error) { func NewHTTP(cfg *Config) (*httpFrontend, error) {
zCfgPath, err := env_v0_3.ZitiIdentityFile(cfg.Identity) env, err := environment.LoadRoot()
if err != nil {
return nil, errors.Wrap(err, "error loading environment root")
}
zCfgPath, err := env.ZitiIdentityFile(cfg.Identity)
if err != nil { if err != nil {
return nil, errors.Wrapf(err, "error getting ziti identity '%v' from environment", cfg.Identity) return nil, errors.Wrapf(err, "error getting ziti identity '%v' from environment", cfg.Identity)
} }

View File

@ -3,7 +3,7 @@ package tcpTunnel
import ( import (
"github.com/openziti/sdk-golang/ziti" "github.com/openziti/sdk-golang/ziti"
"github.com/openziti/zrok/endpoints" "github.com/openziti/zrok/endpoints"
"github.com/openziti/zrok/environment/env_v0_3" "github.com/openziti/zrok/environment"
"github.com/openziti/zrok/model" "github.com/openziti/zrok/model"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
@ -29,7 +29,11 @@ func NewFrontend(cfg *FrontendConfig) (*Frontend, error) {
if err != nil { if err != nil {
return nil, errors.Wrapf(err, "error resolving tcp address '%v'", cfg.BindAddress) return nil, errors.Wrapf(err, "error resolving tcp address '%v'", cfg.BindAddress)
} }
zCfgPath, err := env_v0_3.ZitiIdentityFile(cfg.IdentityName) env, err := environment.LoadRoot()
if err != nil {
return nil, errors.Wrap(err, "error loading environment root")
}
zCfgPath, err := env.ZitiIdentityFile(cfg.IdentityName)
if err != nil { if err != nil {
return nil, errors.Wrapf(err, "error getting ziti identity '%v' from environment", cfg.IdentityName) return nil, errors.Wrapf(err, "error getting ziti identity '%v' from environment", cfg.IdentityName)
} }

View File

@ -3,7 +3,7 @@ package udpTunnel
import ( import (
"github.com/openziti/sdk-golang/ziti" "github.com/openziti/sdk-golang/ziti"
"github.com/openziti/zrok/endpoints" "github.com/openziti/zrok/endpoints"
"github.com/openziti/zrok/environment/env_v0_3" "github.com/openziti/zrok/environment"
"github.com/openziti/zrok/model" "github.com/openziti/zrok/model"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
@ -99,7 +99,11 @@ func NewFrontend(cfg *FrontendConfig) (*Frontend, error) {
if err != nil { if err != nil {
return nil, errors.Wrapf(err, "error resolving udp address '%v'", cfg.BindAddress) return nil, errors.Wrapf(err, "error resolving udp address '%v'", cfg.BindAddress)
} }
zCfgPath, err := env_v0_3.ZitiIdentityFile(cfg.IdentityName) env, err := environment.LoadRoot()
if err != nil {
return nil, errors.Wrap(err, "error loading environment root")
}
zCfgPath, err := env.ZitiIdentityFile(cfg.IdentityName)
if err != nil { if err != nil {
return nil, errors.Wrapf(err, "error getting ziti identity '%v' from environment", cfg.IdentityName) return nil, errors.Wrapf(err, "error getting ziti identity '%v' from environment", cfg.IdentityName)
} }

View File

@ -2,7 +2,6 @@ package environment
import ( import (
"github.com/openziti/zrok/environment/env_core" "github.com/openziti/zrok/environment/env_core"
"github.com/openziti/zrok/environment/env_v0_3x"
"github.com/openziti/zrok/rest_client_zrok" "github.com/openziti/zrok/rest_client_zrok"
"github.com/pkg/errors" "github.com/pkg/errors"
) )
@ -15,20 +14,21 @@ type Root interface {
Client() (*rest_client_zrok.Zrok, error) Client() (*rest_client_zrok.Zrok, error)
ApiEndpoint() (string, string) ApiEndpoint() (string, string)
Environment() *env_core.Environment Environment() *env_core.Environment
SetEnvironment(env *env_core.Environment) error
DeleteEnvironment() error DeleteEnvironment() error
IsEnabled() (bool, error) IsEnabled() bool
ZitiIdentityFile(name string) (string, error) ZitiIdentityFile(name string) (string, error)
SaveZitiIdentity(name, data string) error SaveZitiIdentity(name, data string) error
DeleteZitiIdentity(name string) error DeleteZitiIdentity(name string) error
Obliterate() error Obliterate() error
} }
func ListRoots() ([]*env_core.Metadata, error) { func LoadRoot() (Root, error) {
return nil, nil return env_v0_3.Load()
} }
func LoadRoot() (Root, error) { func ListRoots() ([]*env_core.Metadata, error) {
return env_v0_3x.Load() return nil, nil
} }
func LoadRootVersion(m *env_core.Metadata) (Root, error) { func LoadRootVersion(m *env_core.Metadata) (Root, error) {
@ -36,8 +36,8 @@ func LoadRootVersion(m *env_core.Metadata) (Root, error) {
return nil, errors.Errorf("specify metadata version") return nil, errors.Errorf("specify metadata version")
} }
switch m.V { switch m.V {
case env_v0_3x.V: case env_v0_3.V:
return env_v0_3x.Load() return env_v0_3.Load()
default: default:
return nil, errors.Errorf("unknown metadata version '%v'", m.V) return nil, errors.Errorf("unknown metadata version '%v'", m.V)
@ -45,7 +45,7 @@ func LoadRootVersion(m *env_core.Metadata) (Root, error) {
} }
func NeedsUpdate(r Root) bool { func NeedsUpdate(r Root) bool {
return r.Metadata().V != env_v0_3x.V return r.Metadata().V != env_v0_3.V
} }
func UpdateRoot(r Root) (Root, error) { func UpdateRoot(r Root) (Root, error) {

151
environment/env_v0_3/api.go Normal file
View File

@ -0,0 +1,151 @@
package env_v0_3
import (
"github.com/go-openapi/runtime"
httptransport "github.com/go-openapi/runtime/client"
"github.com/go-openapi/strfmt"
"github.com/openziti/zrok/build"
"github.com/openziti/zrok/environment/env_core"
"github.com/openziti/zrok/rest_client_zrok"
"github.com/pkg/errors"
"net/url"
"os"
"path/filepath"
"regexp"
)
func (r *Root) Metadata() *env_core.Metadata {
return r.meta
}
func (r *Root) HasConfig() (bool, error) {
return r.cfg != nil, nil
}
func (r *Root) Config() *env_core.Config {
return r.cfg
}
func (r *Root) SetConfig(cfg *env_core.Config) error {
if err := saveConfig(cfg); err != nil {
return err
}
r.cfg = cfg
return nil
}
func (r *Root) Client() (*rest_client_zrok.Zrok, error) {
apiEndpoint, _ := r.ApiEndpoint()
apiUrl, err := url.Parse(apiEndpoint)
if err != nil {
return nil, errors.Wrapf(err, "error parsing api endpoint '%v'", r)
}
transport := httptransport.New(apiUrl.Host, "/api/v1", []string{apiUrl.Scheme})
transport.Producers["application/zrok.v1+json"] = runtime.JSONProducer()
transport.Consumers["application/zrok.v1+json"] = runtime.JSONConsumer()
zrok := rest_client_zrok.New(transport, strfmt.Default)
v, err := zrok.Metadata.Version(nil)
if err != nil {
return nil, errors.Wrapf(err, "error getting version from api endpoint '%v': %v", apiEndpoint, err)
}
// allow reported version string to be optionally prefixed with
// "refs/heads/" or "refs/tags/"
re := regexp.MustCompile(`^(refs/(heads|tags)/)?` + build.Series)
if !re.MatchString(string(v.Payload)) {
return nil, errors.Errorf("expected a '%v' version, received: '%v'", build.Series, v.Payload)
}
return zrok, nil
}
func (r *Root) ApiEndpoint() (string, string) {
apiEndpoint := "https://api.zrok.io"
from := "binary"
if r.Config() != nil && r.Config().ApiEndpoint != "" {
apiEndpoint = r.Config().ApiEndpoint
from = "config"
}
env := os.Getenv("ZROK_API_ENDPOINT")
if env != "" {
apiEndpoint = env
from = "ZROK_API_ENDPOINT"
}
if r.IsEnabled() {
apiEndpoint = r.Environment().ApiEndpoint
from = "env"
}
return apiEndpoint, from
}
func (r *Root) Environment() *env_core.Environment {
return r.env
}
func (r *Root) SetEnvironment(env *env_core.Environment) error {
if err := saveEnvironment(env); err != nil {
return err
}
r.env = env
return nil
}
func (r *Root) DeleteEnvironment() error {
ef, err := environmentFile()
if err != nil {
return errors.Wrap(err, "error getting environment file")
}
if err := os.Remove(ef); err != nil {
return errors.Wrap(err, "error removing environment file")
}
r.env = nil
return nil
}
func (r *Root) IsEnabled() bool {
return r.env != nil
}
func (r *Root) ZitiIdentityFile(name string) (string, error) {
return identityFile(name)
}
func (r *Root) SaveZitiIdentity(name, data string) error {
zif, err := r.ZitiIdentityFile(name)
if err != nil {
return err
}
if err := os.MkdirAll(filepath.Dir(zif), os.FileMode(0700)); err != nil {
return errors.Wrapf(err, "error creating environment path '%v'", filepath.Dir(zif))
}
if err := os.WriteFile(zif, []byte(data), os.FileMode(0600)); err != nil {
return errors.Wrapf(err, "error writing ziti identity file '%v'", zif)
}
return nil
}
func (r *Root) DeleteZitiIdentity(name string) error {
zif, err := r.ZitiIdentityFile(name)
if err != nil {
return errors.Wrapf(err, "error getting ziti identity file path for '%v'", name)
}
if err := os.Remove(zif); err != nil {
return errors.Wrapf(err, "error removing ziti identity file '%v'", zif)
}
return nil
}
func (r *Root) Obliterate() error {
zrd, err := rootDir()
if err != nil {
return err
}
if err := os.RemoveAll(zrd); err != nil {
return err
}
return nil
}

View File

@ -1,61 +0,0 @@
package env_v0_3
import (
"github.com/go-openapi/runtime"
httptransport "github.com/go-openapi/runtime/client"
"github.com/go-openapi/strfmt"
"github.com/openziti/zrok/build"
"github.com/openziti/zrok/rest_client_zrok"
"github.com/pkg/errors"
"net/url"
"os"
"regexp"
)
func (r *Root) Client() (*rest_client_zrok.Zrok, error) {
apiEndpoint, _ := r.ApiEndpoint()
apiUrl, err := url.Parse(apiEndpoint)
if err != nil {
return nil, errors.Wrapf(err, "error parsing api endpoint '%v'", r)
}
transport := httptransport.New(apiUrl.Host, "/api/v1", []string{apiUrl.Scheme})
transport.Producers["application/zrok.v1+json"] = runtime.JSONProducer()
transport.Consumers["application/zrok.v1+json"] = runtime.JSONConsumer()
zrok := rest_client_zrok.New(transport, strfmt.Default)
v, err := zrok.Metadata.Version(nil)
if err != nil {
return nil, errors.Wrapf(err, "error getting version from api endpoint '%v': %v", apiEndpoint, err)
}
// allow reported version string to be optionally prefixed with
// "refs/heads/" or "refs/tags/"
re := regexp.MustCompile(`^(refs/(heads|tags)/)?` + build.Series)
if !re.MatchString(string(v.Payload)) {
return nil, errors.Errorf("expected a '%v' version, received: '%v'", build.Series, v.Payload)
}
return zrok, nil
}
func (r *Root) ApiEndpoint() (apiEndpoint string, from string) {
apiEndpoint = "https://api.zrok.io"
from = "binary"
if r.Cfg != nil && r.Cfg.ApiEndpoint != "" {
apiEndpoint = r.Cfg.ApiEndpoint
from = "config"
}
env := os.Getenv("ZROK_API_ENDPOINT")
if env != "" {
apiEndpoint = env
from = "ZROK_API_ENDPOINT"
}
if r.Env != nil && r.Env.ApiEndpoint != "" {
apiEndpoint = r.Env.ApiEndpoint
from = "env"
}
return apiEndpoint, from
}

View File

@ -1,61 +0,0 @@
package env_v0_3
import (
"encoding/json"
"github.com/pkg/errors"
"os"
"path/filepath"
)
type Config struct {
ApiEndpoint string `json:"api_endpoint"`
}
func HasConfig() (bool, error) {
cf, err := configFile()
if err != nil {
return false, errors.Wrap(err, "error getting config file path")
}
_, err = os.Stat(cf)
if os.IsNotExist(err) {
return false, nil
}
if err != nil {
return false, errors.Wrapf(err, "error stat-ing config file '%v'", cf)
}
return true, nil
}
func LoadConfig() (*Config, error) {
cf, err := configFile()
if err != nil {
return nil, errors.Wrap(err, "error getting config file path")
}
data, err := os.ReadFile(cf)
if err != nil {
return nil, errors.Wrapf(err, "error reading config file '%v'", cf)
}
cfg := &Config{}
if err := json.Unmarshal(data, cfg); err != nil {
return nil, errors.Wrapf(err, "error unmarshaling config file '%v'", cf)
}
return cfg, nil
}
func SaveConfig(cfg *Config) error {
data, err := json.MarshalIndent(cfg, "", " ")
if err != nil {
return errors.Wrap(err, "error marshaling config")
}
cf, err := configFile()
if err != nil {
return errors.Wrap(err, "error getting config file path")
}
if err := os.MkdirAll(filepath.Dir(cf), os.FileMode(0700)); err != nil {
return errors.Wrapf(err, "error creating environment path '%v'", filepath.Dir(cf))
}
if err := os.WriteFile(cf, data, os.FileMode(0600)); err != nil {
return errors.Wrap(err, "error saving config file")
}
return nil
}

View File

@ -1,6 +1,7 @@
package env_v0_3x package env_v0_3
import ( import (
"fmt"
"os" "os"
"path/filepath" "path/filepath"
) )
@ -36,3 +37,19 @@ func environmentFile() (string, error) {
} }
return filepath.Join(zrd, "environment.json"), nil return filepath.Join(zrd, "environment.json"), nil
} }
func identitiesDir() (string, error) {
zrd, err := rootDir()
if err != nil {
return "", err
}
return filepath.Join(zrd, "identities"), nil
}
func identityFile(name string) (string, error) {
idd, err := identitiesDir()
if err != nil {
return "", err
}
return filepath.Join(idd, fmt.Sprintf("%v.json", name)), nil
}

View File

@ -1,75 +0,0 @@
package env_v0_3
import (
"encoding/json"
"github.com/pkg/errors"
"os"
"path/filepath"
)
type Environment struct {
Token string `json:"zrok_token"`
ZId string `json:"ziti_identity"`
ApiEndpoint string `json:"api_endpoint"`
}
func IsEnabled() (bool, error) {
ef, err := environmentFile()
if err != nil {
return false, errors.Wrap(err, "error getting environment file path")
}
_, err = os.Stat(ef)
if os.IsNotExist(err) {
return false, nil
}
if err != nil {
return false, errors.Wrapf(err, "error stat-ing environment file '%v'", ef)
}
return true, nil
}
func loadEnvironment() (*Environment, error) {
ef, err := environmentFile()
if err != nil {
return nil, errors.Wrap(err, "error getting environment file")
}
data, err := os.ReadFile(ef)
if err != nil {
return nil, errors.Wrapf(err, "error reading environment file '%v'", ef)
}
env := &Environment{}
if err := json.Unmarshal(data, env); err != nil {
return nil, errors.Wrapf(err, "error unmarshaling environment file '%v'", ef)
}
return env, nil
}
func saveEnvironment(env *Environment) error {
data, err := json.MarshalIndent(env, "", " ")
if err != nil {
return errors.Wrap(err, "error marshaling environment")
}
ef, err := environmentFile()
if err != nil {
return errors.Wrap(err, "error getting environment file")
}
if err := os.MkdirAll(filepath.Dir(ef), os.FileMode(0700)); err != nil {
return errors.Wrapf(err, "error creating environment path '%v'", filepath.Dir(ef))
}
if err := os.WriteFile(ef, data, os.FileMode(0600)); err != nil {
return errors.Wrap(err, "error saving environment file")
}
return nil
}
func DeleteEnvironment() error {
ef, err := environmentFile()
if err != nil {
return errors.Wrap(err, "error getting environment file")
}
if err := os.Remove(ef); err != nil {
return errors.Wrap(err, "error removing environment file")
}
return nil
}

View File

@ -1,36 +0,0 @@
package env_v0_3
import (
"github.com/pkg/errors"
"os"
"path/filepath"
)
func ZitiIdentityFile(name string) (string, error) {
return identityFile(name)
}
func SaveZitiIdentity(name, data string) error {
zif, err := ZitiIdentityFile(name)
if err != nil {
return err
}
if err := os.MkdirAll(filepath.Dir(zif), os.FileMode(0700)); err != nil {
return errors.Wrapf(err, "error creating environment path '%v'", filepath.Dir(zif))
}
if err := os.WriteFile(zif, []byte(data), os.FileMode(0600)); err != nil {
return errors.Wrapf(err, "error writing ziti identity file '%v'", zif)
}
return nil
}
func DeleteZitiIdentity(name string) error {
zif, err := ZitiIdentityFile(name)
if err != nil {
return errors.Wrapf(err, "error getting ziti identity file path for '%v'", name)
}
if err := os.Remove(zif); err != nil {
return errors.Wrapf(err, "error removing ziti identity file '%v'", zif)
}
return nil
}

View File

@ -1,179 +1,234 @@
package env_v0_3 package env_v0_3
import ( import (
"fmt" "encoding/json"
"github.com/openziti/zrok/environment/env_core"
"github.com/pkg/errors" "github.com/pkg/errors"
"os" "os"
"path/filepath" "path/filepath"
"strings"
) )
type Root struct { const V = "v0.3"
Env *Environment
Cfg *Config
identities map[string]struct{}
}
func Initialize() (*Root, error) { type Root struct {
zrd, err := rootDir() meta *env_core.Metadata
if err != nil { cfg *env_core.Config
return nil, errors.Wrap(err, "error getting environment path") env *env_core.Environment
}
if err := os.MkdirAll(zrd, os.FileMode(0700)); err != nil {
return nil, errors.Wrapf(err, "error creating environment root path '%v'", zrd)
}
if err := DeleteEnvironment(); err != nil {
return nil, errors.Wrap(err, "error deleting environment")
}
idd, err := identitiesDir()
if err != nil {
return nil, errors.Wrap(err, "error getting environment identities path")
}
if err := os.MkdirAll(idd, os.FileMode(0700)); err != nil {
return nil, errors.Wrapf(err, "error creating environment identities root path '%v'", idd)
}
return Load()
} }
func Load() (*Root, error) { func Load() (*Root, error) {
if err := checkMetadata(); err != nil { r := &Root{}
return nil, err exists, err := rootExists()
}
zrd := &Root{}
ids, err := listIdentities()
if err != nil { if err != nil {
return nil, err return nil, err
} }
zrd.identities = ids if exists {
if meta, err := loadMetadata(); err == nil {
r.meta = meta
} else {
return nil, err
}
hasCfg, err := HasConfig() if cfg, err := loadConfig(); err == nil {
if err != nil { r.cfg = cfg
return nil, err }
}
if hasCfg { if env, err := loadEnvironment(); err == nil {
cfg, err := LoadConfig() r.env = env
}
} else {
root, err := rootDir()
if err != nil { if err != nil {
return nil, err return nil, err
} }
zrd.Cfg = cfg r.meta = &env_core.Metadata{
} V: V,
RootPath: root,
hasEnv, err := IsEnabled()
if err != nil {
return nil, err
}
if hasEnv {
env, err := loadEnvironment()
if err != nil {
return nil, err
}
zrd.Env = env
}
return zrd, nil
}
func (r *Root) Save() error {
if err := writeMetadata(); err != nil {
return errors.Wrap(err, "error saving metadata")
}
if r.Env != nil {
if err := saveEnvironment(r.Env); err != nil {
return errors.Wrap(err, "error saving environment")
} }
} }
if r.Cfg != nil { return r, nil
if err := SaveConfig(r.Cfg); err != nil {
return errors.Wrap(err, "error saving config")
}
}
return nil
} }
func Obliterate() error { func rootExists() (bool, error) {
zrd, err := rootDir() mf, err := metadataFile()
if err != nil { if err != nil {
return err return false, err
} }
if err := os.RemoveAll(zrd); err != nil { _, err = os.Stat(mf)
return err
}
return nil
}
func listIdentities() (map[string]struct{}, error) {
ids := make(map[string]struct{})
idd, err := identitiesDir()
if err != nil {
return nil, errors.Wrap(err, "error getting environment identities path")
}
_, err = os.Stat(idd)
if os.IsNotExist(err) { if os.IsNotExist(err) {
return ids, nil return false, nil
} }
if err != nil { if err != nil {
return nil, errors.Wrapf(err, "error stat-ing environment identities root '%v'", idd) return false, err
} }
des, err := os.ReadDir(idd) return true, err
if err != nil {
return nil, errors.Wrapf(err, "error listing environment identities from '%v'", idd)
}
for _, de := range des {
if strings.HasSuffix(de.Name(), ".json") && !de.IsDir() {
name := strings.TrimSuffix(de.Name(), ".json")
ids[name] = struct{}{}
}
}
return ids, nil
} }
func configFile() (string, error) { func loadMetadata() (*env_core.Metadata, error) {
zrd, err := rootDir() mf, err := metadataFile()
if err != nil { if err != nil {
return "", err return nil, err
} }
return filepath.Join(zrd, "config.json"), nil data, err := os.ReadFile(mf)
if err != nil {
return nil, err
}
m := &metadata{}
if err := json.Unmarshal(data, m); err != nil {
return nil, errors.Wrapf(err, "error unmarshaling metadata file '%v'", mf)
}
if m.V != V {
return nil, errors.Errorf("got metadata version '%v', expected '%v'", m.V, V)
}
rf, err := rootDir()
if err != nil {
return nil, err
}
out := &env_core.Metadata{
V: m.V,
RootPath: rf,
}
return out, nil
} }
func environmentFile() (string, error) { func writeMetadata() error {
zrd, err := rootDir() mf, err := metadataFile()
if err != nil { if err != nil {
return "", err return err
} }
return filepath.Join(zrd, "environment.json"), nil data, err := json.Marshal(&metadata{V: V})
if err != nil {
return err
}
if err := os.MkdirAll(filepath.Dir(mf), os.FileMode(0700)); err != nil {
return err
}
if err := os.WriteFile(mf, data, os.FileMode(0600)); err != nil {
return err
}
return nil
} }
func identityFile(name string) (string, error) { func loadConfig() (*env_core.Config, error) {
idd, err := identitiesDir() cf, err := configFile()
if err != nil { if err != nil {
return "", err return nil, errors.Wrap(err, "error getting config file path")
} }
return filepath.Join(idd, fmt.Sprintf("%v.json", name)), nil data, err := os.ReadFile(cf)
if err != nil {
return nil, errors.Wrapf(err, "error reading config file '%v'", cf)
}
cfg := &config{}
if err := json.Unmarshal(data, cfg); err != nil {
return nil, errors.Wrapf(err, "error unmarshaling config file '%v'", cf)
}
out := &env_core.Config{
ApiEndpoint: cfg.ApiEndpoint,
}
return out, nil
} }
func identitiesDir() (string, error) { func saveConfig(cfg *env_core.Config) error {
zrd, err := rootDir() in := &config{ApiEndpoint: cfg.ApiEndpoint}
data, err := json.MarshalIndent(in, "", " ")
if err != nil { if err != nil {
return "", err return errors.Wrap(err, "error marshaling config")
} }
return filepath.Join(zrd, "identities"), nil cf, err := configFile()
if err != nil {
return errors.Wrap(err, "error getting config file path")
}
if err := os.MkdirAll(filepath.Dir(cf), os.FileMode(0700)); err != nil {
return errors.Wrapf(err, "error creating environment path '%v'", filepath.Dir(cf))
}
if err := os.WriteFile(cf, data, os.FileMode(0600)); err != nil {
return errors.Wrap(err, "error saving config file")
}
return nil
} }
func metadataFile() (string, error) { func isEnabled() (bool, error) {
zrd, err := rootDir() ef, err := environmentFile()
if err != nil { if err != nil {
return "", err return false, errors.Wrap(err, "error getting environment file path")
} }
return filepath.Join(zrd, "metadata.json"), nil _, err = os.Stat(ef)
if os.IsNotExist(err) {
return false, nil
}
if err != nil {
return false, errors.Wrapf(err, "error stat-ing environment file '%v'", ef)
}
return true, nil
} }
func rootDir() (string, error) { func loadEnvironment() (*env_core.Environment, error) {
home, err := os.UserHomeDir() ef, err := environmentFile()
if err != nil { if err != nil {
return "", err return nil, errors.Wrap(err, "error getting environment file")
} }
return filepath.Join(home, ".zrok"), nil data, err := os.ReadFile(ef)
if err != nil {
return nil, errors.Wrapf(err, "error reading environment file '%v'", ef)
}
env := &environment{}
if err := json.Unmarshal(data, env); err != nil {
return nil, errors.Wrapf(err, "error unmarshaling environment file '%v'", ef)
}
out := &env_core.Environment{
Token: env.Token,
ZitiIdentity: env.ZId,
ApiEndpoint: env.ApiEndpoint,
}
return out, nil
}
func saveEnvironment(env *env_core.Environment) error {
in := &environment{
Token: env.Token,
ZId: env.ZitiIdentity,
ApiEndpoint: env.ApiEndpoint,
}
data, err := json.MarshalIndent(in, "", " ")
if err != nil {
return errors.Wrap(err, "error marshaling environment")
}
ef, err := environmentFile()
if err != nil {
return errors.Wrap(err, "error getting environment file")
}
if err := os.MkdirAll(filepath.Dir(ef), os.FileMode(0700)); err != nil {
return errors.Wrapf(err, "error creating environment path '%v'", filepath.Dir(ef))
}
if err := os.WriteFile(ef, data, os.FileMode(0600)); err != nil {
return errors.Wrap(err, "error saving environment file")
}
return nil
}
func deleteEnvironment() error {
ef, err := environmentFile()
if err != nil {
return errors.Wrap(err, "error getting environment file")
}
if err := os.Remove(ef); err != nil {
return errors.Wrap(err, "error removing environment file")
}
return nil
}
type metadata struct {
V string `json:"v"`
}
type config struct {
ApiEndpoint string `json:"api_endpoint"`
}
type environment struct {
Token string `json:"zrok_token"`
ZId string `json:"ziti_identity"`
ApiEndpoint string `json:"api_endpoint"`
} }

View File

@ -1,53 +0,0 @@
package env_v0_3
import (
"encoding/json"
"github.com/openziti/zrok/tui"
"github.com/pkg/errors"
"os"
"path/filepath"
)
const V = "v0.3"
type Metadata struct {
V string `json:"v"`
}
func checkMetadata() error {
mf, err := metadataFile()
if err != nil {
return err
}
data, err := os.ReadFile(mf)
if err != nil {
tui.Warning("unable to open environment metadata; ignoring\n")
return nil
}
m := &Metadata{}
if err := json.Unmarshal(data, m); err != nil {
return errors.Wrapf(err, "error unmarshaling metadata file '%v'", mf)
}
if m.V != V {
return errors.Errorf("invalid environment metadata version '%v'", m.V)
}
return nil
}
func writeMetadata() error {
mf, err := metadataFile()
if err != nil {
return err
}
data, err := json.Marshal(&Metadata{V: V})
if err != nil {
return err
}
if err := os.MkdirAll(filepath.Dir(mf), os.FileMode(0700)); err != nil {
return err
}
if err := os.WriteFile(mf, data, os.FileMode(0600)); err != nil {
return err
}
return nil
}

View File

@ -1,65 +0,0 @@
package env_v0_3x
import (
"github.com/openziti/zrok/environment/env_core"
"github.com/openziti/zrok/rest_client_zrok"
)
func (r *Root) Metadata() *env_core.Metadata {
return r.meta
}
func (r *Root) HasConfig() (bool, error) {
return r.cfg != nil, nil
}
func (r *Root) Config() *env_core.Config {
return r.cfg
}
func (r *Root) SetConfig(cfg *env_core.Config) error {
if err := saveConfig(cfg); err != nil {
return err
}
r.cfg = cfg
return nil
}
func (r *Root) Client() (*rest_client_zrok.Zrok, error) {
return nil, nil
}
func (r *Root) ApiEndpoint() (string, string) {
if r.env != nil {
return r.env.ApiEndpoint, "env"
}
return "", ""
}
func (r *Root) Environment() *env_core.Environment {
return r.env
}
func (r *Root) DeleteEnvironment() error {
return nil
}
func (r *Root) IsEnabled() (bool, error) {
return r.env != nil, nil
}
func (r *Root) ZitiIdentityFile(name string) (string, error) {
return "", nil
}
func (r *Root) SaveZitiIdentity(name, data string) error {
return nil
}
func (r *Root) DeleteZitiIdentity(name string) error {
return nil
}
func (r *Root) Obliterate() error {
return nil
}

View File

@ -1,216 +0,0 @@
package env_v0_3x
import (
"encoding/json"
"github.com/openziti/zrok/environment/env_core"
"github.com/pkg/errors"
"os"
"path/filepath"
)
const V = "v0.3"
type Root struct {
meta *env_core.Metadata
cfg *env_core.Config
env *env_core.Environment
}
func Load() (*Root, error) {
r := &Root{}
exists, err := rootExists()
if err != nil {
return nil, err
}
if exists {
if meta, err := loadMetadata(); err == nil {
r.meta = meta
} else {
return nil, err
}
if cfg, err := loadConfig(); err == nil {
r.cfg = cfg
}
if env, err := loadEnvironment(); err == nil {
r.env = env
}
} else {
root, err := rootDir()
if err != nil {
return nil, err
}
r.meta = &env_core.Metadata{
V: V,
RootPath: root,
}
}
return r, nil
}
func rootExists() (bool, error) {
mf, err := metadataFile()
if err != nil {
return false, err
}
_, err = os.Stat(mf)
if os.IsNotExist(err) {
return false, nil
}
if err != nil {
return false, err
}
return true, err
}
func loadMetadata() (*env_core.Metadata, error) {
mf, err := metadataFile()
if err != nil {
return nil, err
}
data, err := os.ReadFile(mf)
if err != nil {
return nil, err
}
m := &metadata{}
if err := json.Unmarshal(data, m); err != nil {
return nil, errors.Wrapf(err, "error unmarshaling metadata file '%v'", mf)
}
if m.V != V {
return nil, errors.Errorf("got metadata version '%v', expected '%v'", m.V, V)
}
rf, err := rootDir()
if err != nil {
return nil, err
}
out := &env_core.Metadata{
V: m.V,
RootPath: rf,
}
return out, nil
}
func loadConfig() (*env_core.Config, error) {
cf, err := configFile()
if err != nil {
return nil, errors.Wrap(err, "error getting config file path")
}
data, err := os.ReadFile(cf)
if err != nil {
return nil, errors.Wrapf(err, "error reading config file '%v'", cf)
}
cfg := &config{}
if err := json.Unmarshal(data, cfg); err != nil {
return nil, errors.Wrapf(err, "error unmarshaling config file '%v'", cf)
}
out := &env_core.Config{
ApiEndpoint: cfg.ApiEndpoint,
}
return out, nil
}
func saveConfig(cfg *env_core.Config) error {
in := &config{ApiEndpoint: cfg.ApiEndpoint}
data, err := json.MarshalIndent(in, "", " ")
if err != nil {
return errors.Wrap(err, "error marshaling config")
}
cf, err := configFile()
if err != nil {
return errors.Wrap(err, "error getting config file path")
}
if err := os.MkdirAll(filepath.Dir(cf), os.FileMode(0700)); err != nil {
return errors.Wrapf(err, "error creating environment path '%v'", filepath.Dir(cf))
}
if err := os.WriteFile(cf, data, os.FileMode(0600)); err != nil {
return errors.Wrap(err, "error saving config file")
}
return nil
}
func isEnabled() (bool, error) {
ef, err := environmentFile()
if err != nil {
return false, errors.Wrap(err, "error getting environment file path")
}
_, err = os.Stat(ef)
if os.IsNotExist(err) {
return false, nil
}
if err != nil {
return false, errors.Wrapf(err, "error stat-ing environment file '%v'", ef)
}
return true, nil
}
func loadEnvironment() (*env_core.Environment, error) {
ef, err := environmentFile()
if err != nil {
return nil, errors.Wrap(err, "error getting environment file")
}
data, err := os.ReadFile(ef)
if err != nil {
return nil, errors.Wrapf(err, "error reading environment file '%v'", ef)
}
env := &environment{}
if err := json.Unmarshal(data, env); err != nil {
return nil, errors.Wrapf(err, "error unmarshaling environment file '%v'", ef)
}
out := &env_core.Environment{
Token: env.Token,
ZitiIdentity: env.ZId,
ApiEndpoint: env.ApiEndpoint,
}
return out, nil
}
func saveEnvironment(env *env_core.Environment) error {
in := &environment{
Token: env.Token,
ZId: env.ZitiIdentity,
ApiEndpoint: env.ApiEndpoint,
}
data, err := json.MarshalIndent(in, "", " ")
if err != nil {
return errors.Wrap(err, "error marshaling environment")
}
ef, err := environmentFile()
if err != nil {
return errors.Wrap(err, "error getting environment file")
}
if err := os.MkdirAll(filepath.Dir(ef), os.FileMode(0700)); err != nil {
return errors.Wrapf(err, "error creating environment path '%v'", filepath.Dir(ef))
}
if err := os.WriteFile(ef, data, os.FileMode(0600)); err != nil {
return errors.Wrap(err, "error saving environment file")
}
return nil
}
func deleteEnvironment() error {
ef, err := environmentFile()
if err != nil {
return errors.Wrap(err, "error getting environment file")
}
if err := os.Remove(ef); err != nil {
return errors.Wrap(err, "error removing environment file")
}
return nil
}
type metadata struct {
V string `json:"v"`
}
type config struct {
ApiEndpoint string `json:"api_endpoint"`
}
type environment struct {
Token string `json:"zrok_token"`
ZId string `json:"ziti_identity"`
ApiEndpoint string `json:"api_endpoint"`
}

View File

@ -1,8 +1,6 @@
package sdk package sdk
import ( import (
"github.com/openziti/zrok/environment/env_v0_3"
"github.com/openziti/zrok/rest_model_zrok"
"github.com/pkg/errors" "github.com/pkg/errors"
) )
@ -28,15 +26,3 @@ func newPrivateShare(request *ShareRequest) (*Share, error) {
func newPublicShare(request *ShareRequest) (*Share, error) { func newPublicShare(request *ShareRequest) (*Share, error) {
return nil, nil return nil, nil
} }
func loadEnvironment(request *ShareRequest) (*env_v0_3.Root, error) {
env, err := env_v0_3.Load()
if err != nil {
return nil, errors.Wrap(err, "error loading environment")
}
return env, nil
}
func createShare(zrd *env_v0_3.Root, req *rest_model_zrok.ShareRequest) (*Share, error) {
return nil, nil
}