initial gui testing passed

This commit is contained in:
0xdcarns 2022-05-05 09:48:02 -04:00
parent cd065e35f4
commit 7a1b719a91
7 changed files with 115 additions and 32 deletions

View file

@ -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)
}

View file

@ -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
netclient/config/util.go Normal file
View file

@ -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
}

View file

@ -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

View file

@ -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)

View file

@ -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)

View file

@ -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)
}
}
}