Browse Source

initial gui testing passed

0xdcarns 3 years ago
parent
commit
7a1b719a91

+ 10 - 0
netclient/command/commands.go

@@ -9,6 +9,7 @@ import (
 	"github.com/gravitl/netmaker/netclient/config"
 	"github.com/gravitl/netmaker/netclient/daemon"
 	"github.com/gravitl/netmaker/netclient/functions"
+	"github.com/gravitl/netmaker/netclient/gui"
 	"github.com/gravitl/netmaker/netclient/ncutils"
 	"github.com/gravitl/netmaker/tls"
 )
@@ -142,3 +143,12 @@ func Daemon() error {
 	err := functions.Daemon()
 	return err
 }
+
+// Gui - runs the netclient gui
+func Gui() error {
+	currNets, err := ncutils.GetSystemNetworks()
+	if err != nil {
+		return err
+	}
+	return gui.Run(currNets)
+}

+ 1 - 10
netclient/config/config.go

@@ -6,8 +6,6 @@ import (
 	"crypto/ed25519"
 	"crypto/x509"
 	"crypto/x509/pkix"
-	"encoding/base64"
-	"encoding/json"
 	"errors"
 	"fmt"
 	"log"
@@ -184,14 +182,8 @@ func ReplaceWithBackup(network string) error {
 func GetCLIConfig(c *cli.Context) (ClientConfig, string, error) {
 	var cfg ClientConfig
 	if c.String("token") != "" {
-		tokenbytes, err := base64.StdEncoding.DecodeString(c.String("token"))
+		accesstoken, err := ParseAccessToken(c.String("token"))
 		if err != nil {
-			log.Println("error decoding token")
-			return cfg, "", err
-		}
-		var accesstoken models.AccessToken
-		if err := json.Unmarshal(tokenbytes, &accesstoken); err != nil {
-			log.Println("error converting token json to object", tokenbytes)
 			return cfg, "", err
 		}
 		cfg.Network = accesstoken.ClientConfig.Network
@@ -216,7 +208,6 @@ func GetCLIConfig(c *cli.Context) (ClientConfig, string, error) {
 		if c.String("apiserver") != "" {
 			cfg.Server.API = c.String("apiserver")
 		}
-
 	} else {
 		cfg.Server.AccessKey = c.String("key")
 		cfg.Network = c.String("network")

+ 24 - 0
netclient/config/util.go

@@ -0,0 +1,24 @@
+package config
+
+import (
+	"encoding/base64"
+	"encoding/json"
+
+	"github.com/gravitl/netmaker/logger"
+	"github.com/gravitl/netmaker/models"
+)
+
+// ParseAccessToken - used to parse the base64 encoded access token
+func ParseAccessToken(token string) (*models.AccessToken, error) {
+	tokenbytes, err := base64.StdEncoding.DecodeString(token)
+	if err != nil {
+		logger.Log(0, "error decoding token", err.Error())
+		return nil, err
+	}
+	var accesstoken models.AccessToken
+	if err := json.Unmarshal(tokenbytes, &accesstoken); err != nil {
+		logger.Log(0, "error decoding token", err.Error())
+		return nil, err
+	}
+	return &accesstoken, nil
+}

+ 28 - 6
netclient/gui/components/views/join.go

@@ -1,14 +1,14 @@
 package views
 
 import (
-	"fmt"
-	"time"
-
 	"fyne.io/fyne/v2"
 	"fyne.io/fyne/v2/container"
 	"fyne.io/fyne/v2/theme"
 	"fyne.io/fyne/v2/widget"
+	"github.com/gravitl/netmaker/netclient/config"
+	"github.com/gravitl/netmaker/netclient/functions"
 	"github.com/gravitl/netmaker/netclient/gui/components"
+	"github.com/gravitl/netmaker/netclient/ncutils"
 )
 
 // GetJoinView - get's the join screen where a user inputs an access token
@@ -18,11 +18,33 @@ func GetJoinView() fyne.CanvasObject {
 	input.SetPlaceHolder("access token here...")
 
 	submitBtn := components.ColoredIconButton("Submit", theme.UploadIcon(), func() {
-		fmt.Printf("got text %s \n", input.Text)
 		// ErrorNotify("Could not process token")
 		LoadingNotify()
-		time.Sleep(time.Second)
-		SuccessNotify("Joined!")
+		var cfg config.ClientConfig
+		accesstoken, err := config.ParseAccessToken(input.Text)
+		if err != nil {
+			ErrorNotify("Failed to parse access token!")
+			return
+		}
+		cfg.Network = accesstoken.ClientConfig.Network
+		cfg.Node.Network = accesstoken.ClientConfig.Network
+		cfg.Server.AccessKey = accesstoken.ClientConfig.Key
+		cfg.Node.LocalRange = accesstoken.ClientConfig.LocalRange
+		cfg.Server.Server = accesstoken.ServerConfig.Server
+		cfg.Server.API = accesstoken.ServerConfig.APIConnString
+		err = functions.JoinNetwork(&cfg, "")
+		if err != nil {
+			ErrorNotify("Failed to join " + cfg.Network + "!")
+			return
+		}
+		networks, err := ncutils.GetSystemNetworks()
+		if err != nil {
+			ErrorNotify("Failed to read local networks!")
+			return
+		}
+		SuccessNotify("Joined " + cfg.Network + "!")
+		RefreshComponent(Networks, GetNetworksView(networks))
+		ShowView(Networks)
 		// TODO
 		// - call join
 		// - display loading

+ 30 - 8
netclient/gui/components/views/networks.go

@@ -9,8 +9,10 @@ import (
 	"fyne.io/fyne/v2/layout"
 	"fyne.io/fyne/v2/theme"
 	"fyne.io/fyne/v2/widget"
+	"github.com/gravitl/netmaker/netclient/config"
 	"github.com/gravitl/netmaker/netclient/functions"
 	"github.com/gravitl/netmaker/netclient/gui/components"
+	"github.com/gravitl/netmaker/netclient/ncutils"
 )
 
 var currentNetwork *string
@@ -62,25 +64,39 @@ func GetSingleNetworkView(network string) fyne.CanvasObject {
 	if network == "" || len(network) == 0 {
 		return container.NewCenter(widget.NewLabel("No valid network selected"))
 	}
-	nodeID := "somenodeid"
-	health := "healthy"
-	privateAddr := "10.10.10.10"
-	privateAddr6 := "23:23:23:23"
-	endpoint := "182.3.4.4:55555"
+
+	// == read node values ==
+	var nodecfg config.ClientConfig
+	nodecfg.Network = network
+	nodecfg.ReadConfig()
+	nodeID := nodecfg.Node.ID
+	lastCheckInTime := time.Unix(nodecfg.Node.LastCheckIn, 0)
+	lastCheckIn := lastCheckInTime.Format("2006-01-02 15:04:05")
+	privateAddr := nodecfg.Node.Address
+	privateAddr6 := nodecfg.Node.Address6
+	endpoint := nodecfg.Node.Endpoint
+	health := " (HEALTHY)"
+	if time.Now().After(lastCheckInTime.Add(time.Minute * 5)) {
+		health = " (WARNING)"
+	} else if time.Now().After(lastCheckInTime.Add(time.Minute * 30)) {
+		health = " (ERROR)"
+	}
+	lastCheckIn += health
+	version := nodecfg.Node.Version
 
 	pullBtn := components.ColoredButton("pull "+network, func() { pull(network) }, components.Blue_color)
 	pullBtn.Resize(fyne.NewSize(pullBtn.Size().Width, 50))
 	LoadingNotify()
-	time.Sleep(time.Second)
 	netDetailsView := container.NewCenter(
 		// components.ColoredText("Selected "+network, components.Orange_color),
 		container.NewGridWithColumns(1, widget.NewRichTextFromMarkdown(fmt.Sprintf(`### %s
 - ID: %s
-- Health: %s
+- Last Check In: %s
 - Endpoint: %s
 - Address (IPv4): %s
 - Address6 (IPv6): %s
-`, network, nodeID, health, endpoint, privateAddr, privateAddr6)),
+- Version: %s
+`, network, nodeID, lastCheckIn, endpoint, privateAddr, privateAddr6, version)),
 			container.NewCenter(pullBtn),
 		))
 	ClearNotification()
@@ -110,6 +126,12 @@ func leave(network string) {
 		} else {
 			SuccessNotify("Left " + network)
 		}
+		networks, err := ncutils.GetSystemNetworks()
+		if err != nil {
+			networks = []string{}
+			ErrorNotify("Failed to read local networks!")
+		}
+		RefreshComponent(Networks, GetNetworksView(networks))
 		ShowView(Networks)
 	})
 	RefreshComponent(Confirm, confirmView)

+ 10 - 5
netclient/gui/gui.go

@@ -3,27 +3,29 @@ package gui
 import (
 	"embed"
 	"image/color"
-	"time"
 
 	"fyne.io/fyne/v2"
 	"fyne.io/fyne/v2/app"
 	"fyne.io/fyne/v2/container"
 	"fyne.io/fyne/v2/theme"
 	"fyne.io/fyne/v2/widget"
+	"github.com/gravitl/netmaker/logger"
 	"github.com/gravitl/netmaker/netclient/functions"
 	"github.com/gravitl/netmaker/netclient/gui/components"
 	"github.com/gravitl/netmaker/netclient/gui/components/views"
+	"github.com/gravitl/netmaker/netclient/ncutils"
 )
 
 //go:embed nm-logo-sm.png
 var logoContent embed.FS
 
-func run(networks []string) error {
+func Run(networks []string) error {
 	a := app.New()
 	window := a.NewWindow("Netclient")
 
-	img, err := logoContent.ReadFile("nm-logo.png")
+	img, err := logoContent.ReadFile("nm-logo-sm.png")
 	if err != nil {
+		logger.Log(0, "failed to read logo", err.Error())
 		return err
 	}
 
@@ -53,13 +55,16 @@ func run(networks []string) error {
 			}, func() {
 				views.LoadingNotify()
 				err := functions.Uninstall()
-				time.Sleep(time.Second >> 1)
 				if err != nil {
 					views.ErrorNotify("Failed to uninstall: \n" + err.Error())
 				} else {
 					views.SuccessNotify("Uninstalled Netclient!")
 				}
-				time.Sleep(time.Second >> 1)
+				networks, err := ncutils.GetSystemNetworks()
+				if err != nil {
+					networks = []string{}
+				}
+				views.RefreshComponent(views.Networks, views.GetNetworksView(networks))
 				views.ShowView(views.Networks)
 			})
 			views.RefreshComponent(views.Confirm, confirmView)

+ 12 - 3
netclient/main.go

@@ -8,6 +8,7 @@ import (
 	"runtime/debug"
 
 	"github.com/gravitl/netmaker/netclient/cli_options"
+	"github.com/gravitl/netmaker/netclient/gui"
 	"github.com/gravitl/netmaker/netclient/ncutils"
 	"github.com/gravitl/netmaker/netclient/ncwindows"
 	"github.com/urfave/cli/v2"
@@ -35,9 +36,17 @@ func main() {
 		ncutils.CheckWG()
 	}
 
-	err := app.Run(os.Args)
-	if err != nil {
-		log.Fatal(err)
+	if len(os.Args) <= 1 {
+		networks, err := ncutils.GetSystemNetworks()
+		if err != nil {
+			networks = []string{}
+		}
+		gui.Run(networks)
+	} else {
+		err := app.Run(os.Args)
+		if err != nil {
+			log.Fatal(err)
+		}
 	}
 }