mirror of
https://github.com/gravitl/netmaker.git
synced 2024-09-21 07:46:04 +08:00
initial gui testing passed
This commit is contained in:
parent
cd065e35f4
commit
7a1b719a91
|
@ -9,6 +9,7 @@ import (
|
||||||
"github.com/gravitl/netmaker/netclient/config"
|
"github.com/gravitl/netmaker/netclient/config"
|
||||||
"github.com/gravitl/netmaker/netclient/daemon"
|
"github.com/gravitl/netmaker/netclient/daemon"
|
||||||
"github.com/gravitl/netmaker/netclient/functions"
|
"github.com/gravitl/netmaker/netclient/functions"
|
||||||
|
"github.com/gravitl/netmaker/netclient/gui"
|
||||||
"github.com/gravitl/netmaker/netclient/ncutils"
|
"github.com/gravitl/netmaker/netclient/ncutils"
|
||||||
"github.com/gravitl/netmaker/tls"
|
"github.com/gravitl/netmaker/tls"
|
||||||
)
|
)
|
||||||
|
@ -142,3 +143,12 @@ func Daemon() error {
|
||||||
err := functions.Daemon()
|
err := functions.Daemon()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Gui - runs the netclient gui
|
||||||
|
func Gui() error {
|
||||||
|
currNets, err := ncutils.GetSystemNetworks()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return gui.Run(currNets)
|
||||||
|
}
|
||||||
|
|
|
@ -6,8 +6,6 @@ import (
|
||||||
"crypto/ed25519"
|
"crypto/ed25519"
|
||||||
"crypto/x509"
|
"crypto/x509"
|
||||||
"crypto/x509/pkix"
|
"crypto/x509/pkix"
|
||||||
"encoding/base64"
|
|
||||||
"encoding/json"
|
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
|
@ -184,14 +182,8 @@ func ReplaceWithBackup(network string) error {
|
||||||
func GetCLIConfig(c *cli.Context) (ClientConfig, string, error) {
|
func GetCLIConfig(c *cli.Context) (ClientConfig, string, error) {
|
||||||
var cfg ClientConfig
|
var cfg ClientConfig
|
||||||
if c.String("token") != "" {
|
if c.String("token") != "" {
|
||||||
tokenbytes, err := base64.StdEncoding.DecodeString(c.String("token"))
|
accesstoken, err := ParseAccessToken(c.String("token"))
|
||||||
if err != nil {
|
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
|
return cfg, "", err
|
||||||
}
|
}
|
||||||
cfg.Network = accesstoken.ClientConfig.Network
|
cfg.Network = accesstoken.ClientConfig.Network
|
||||||
|
@ -216,7 +208,6 @@ func GetCLIConfig(c *cli.Context) (ClientConfig, string, error) {
|
||||||
if c.String("apiserver") != "" {
|
if c.String("apiserver") != "" {
|
||||||
cfg.Server.API = c.String("apiserver")
|
cfg.Server.API = c.String("apiserver")
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
cfg.Server.AccessKey = c.String("key")
|
cfg.Server.AccessKey = c.String("key")
|
||||||
cfg.Network = c.String("network")
|
cfg.Network = c.String("network")
|
||||||
|
|
24
netclient/config/util.go
Normal file
24
netclient/config/util.go
Normal 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
|
||||||
|
}
|
|
@ -1,14 +1,14 @@
|
||||||
package views
|
package views
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"fyne.io/fyne/v2"
|
"fyne.io/fyne/v2"
|
||||||
"fyne.io/fyne/v2/container"
|
"fyne.io/fyne/v2/container"
|
||||||
"fyne.io/fyne/v2/theme"
|
"fyne.io/fyne/v2/theme"
|
||||||
"fyne.io/fyne/v2/widget"
|
"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/gui/components"
|
||||||
|
"github.com/gravitl/netmaker/netclient/ncutils"
|
||||||
)
|
)
|
||||||
|
|
||||||
// GetJoinView - get's the join screen where a user inputs an access token
|
// 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...")
|
input.SetPlaceHolder("access token here...")
|
||||||
|
|
||||||
submitBtn := components.ColoredIconButton("Submit", theme.UploadIcon(), func() {
|
submitBtn := components.ColoredIconButton("Submit", theme.UploadIcon(), func() {
|
||||||
fmt.Printf("got text %s \n", input.Text)
|
|
||||||
// ErrorNotify("Could not process token")
|
// ErrorNotify("Could not process token")
|
||||||
LoadingNotify()
|
LoadingNotify()
|
||||||
time.Sleep(time.Second)
|
var cfg config.ClientConfig
|
||||||
SuccessNotify("Joined!")
|
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
|
// TODO
|
||||||
// - call join
|
// - call join
|
||||||
// - display loading
|
// - display loading
|
||||||
|
|
|
@ -9,8 +9,10 @@ import (
|
||||||
"fyne.io/fyne/v2/layout"
|
"fyne.io/fyne/v2/layout"
|
||||||
"fyne.io/fyne/v2/theme"
|
"fyne.io/fyne/v2/theme"
|
||||||
"fyne.io/fyne/v2/widget"
|
"fyne.io/fyne/v2/widget"
|
||||||
|
"github.com/gravitl/netmaker/netclient/config"
|
||||||
"github.com/gravitl/netmaker/netclient/functions"
|
"github.com/gravitl/netmaker/netclient/functions"
|
||||||
"github.com/gravitl/netmaker/netclient/gui/components"
|
"github.com/gravitl/netmaker/netclient/gui/components"
|
||||||
|
"github.com/gravitl/netmaker/netclient/ncutils"
|
||||||
)
|
)
|
||||||
|
|
||||||
var currentNetwork *string
|
var currentNetwork *string
|
||||||
|
@ -62,25 +64,39 @@ func GetSingleNetworkView(network string) fyne.CanvasObject {
|
||||||
if network == "" || len(network) == 0 {
|
if network == "" || len(network) == 0 {
|
||||||
return container.NewCenter(widget.NewLabel("No valid network selected"))
|
return container.NewCenter(widget.NewLabel("No valid network selected"))
|
||||||
}
|
}
|
||||||
nodeID := "somenodeid"
|
|
||||||
health := "healthy"
|
// == read node values ==
|
||||||
privateAddr := "10.10.10.10"
|
var nodecfg config.ClientConfig
|
||||||
privateAddr6 := "23:23:23:23"
|
nodecfg.Network = network
|
||||||
endpoint := "182.3.4.4:55555"
|
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 := components.ColoredButton("pull "+network, func() { pull(network) }, components.Blue_color)
|
||||||
pullBtn.Resize(fyne.NewSize(pullBtn.Size().Width, 50))
|
pullBtn.Resize(fyne.NewSize(pullBtn.Size().Width, 50))
|
||||||
LoadingNotify()
|
LoadingNotify()
|
||||||
time.Sleep(time.Second)
|
|
||||||
netDetailsView := container.NewCenter(
|
netDetailsView := container.NewCenter(
|
||||||
// components.ColoredText("Selected "+network, components.Orange_color),
|
// components.ColoredText("Selected "+network, components.Orange_color),
|
||||||
container.NewGridWithColumns(1, widget.NewRichTextFromMarkdown(fmt.Sprintf(`### %s
|
container.NewGridWithColumns(1, widget.NewRichTextFromMarkdown(fmt.Sprintf(`### %s
|
||||||
- ID: %s
|
- ID: %s
|
||||||
- Health: %s
|
- Last Check In: %s
|
||||||
- Endpoint: %s
|
- Endpoint: %s
|
||||||
- Address (IPv4): %s
|
- Address (IPv4): %s
|
||||||
- Address6 (IPv6): %s
|
- Address6 (IPv6): %s
|
||||||
`, network, nodeID, health, endpoint, privateAddr, privateAddr6)),
|
- Version: %s
|
||||||
|
`, network, nodeID, lastCheckIn, endpoint, privateAddr, privateAddr6, version)),
|
||||||
container.NewCenter(pullBtn),
|
container.NewCenter(pullBtn),
|
||||||
))
|
))
|
||||||
ClearNotification()
|
ClearNotification()
|
||||||
|
@ -110,6 +126,12 @@ func leave(network string) {
|
||||||
} else {
|
} else {
|
||||||
SuccessNotify("Left " + network)
|
SuccessNotify("Left " + network)
|
||||||
}
|
}
|
||||||
|
networks, err := ncutils.GetSystemNetworks()
|
||||||
|
if err != nil {
|
||||||
|
networks = []string{}
|
||||||
|
ErrorNotify("Failed to read local networks!")
|
||||||
|
}
|
||||||
|
RefreshComponent(Networks, GetNetworksView(networks))
|
||||||
ShowView(Networks)
|
ShowView(Networks)
|
||||||
})
|
})
|
||||||
RefreshComponent(Confirm, confirmView)
|
RefreshComponent(Confirm, confirmView)
|
||||||
|
|
|
@ -3,27 +3,29 @@ package gui
|
||||||
import (
|
import (
|
||||||
"embed"
|
"embed"
|
||||||
"image/color"
|
"image/color"
|
||||||
"time"
|
|
||||||
|
|
||||||
"fyne.io/fyne/v2"
|
"fyne.io/fyne/v2"
|
||||||
"fyne.io/fyne/v2/app"
|
"fyne.io/fyne/v2/app"
|
||||||
"fyne.io/fyne/v2/container"
|
"fyne.io/fyne/v2/container"
|
||||||
"fyne.io/fyne/v2/theme"
|
"fyne.io/fyne/v2/theme"
|
||||||
"fyne.io/fyne/v2/widget"
|
"fyne.io/fyne/v2/widget"
|
||||||
|
"github.com/gravitl/netmaker/logger"
|
||||||
"github.com/gravitl/netmaker/netclient/functions"
|
"github.com/gravitl/netmaker/netclient/functions"
|
||||||
"github.com/gravitl/netmaker/netclient/gui/components"
|
"github.com/gravitl/netmaker/netclient/gui/components"
|
||||||
"github.com/gravitl/netmaker/netclient/gui/components/views"
|
"github.com/gravitl/netmaker/netclient/gui/components/views"
|
||||||
|
"github.com/gravitl/netmaker/netclient/ncutils"
|
||||||
)
|
)
|
||||||
|
|
||||||
//go:embed nm-logo-sm.png
|
//go:embed nm-logo-sm.png
|
||||||
var logoContent embed.FS
|
var logoContent embed.FS
|
||||||
|
|
||||||
func run(networks []string) error {
|
func Run(networks []string) error {
|
||||||
a := app.New()
|
a := app.New()
|
||||||
window := a.NewWindow("Netclient")
|
window := a.NewWindow("Netclient")
|
||||||
|
|
||||||
img, err := logoContent.ReadFile("nm-logo.png")
|
img, err := logoContent.ReadFile("nm-logo-sm.png")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
logger.Log(0, "failed to read logo", err.Error())
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,13 +55,16 @@ func run(networks []string) error {
|
||||||
}, func() {
|
}, func() {
|
||||||
views.LoadingNotify()
|
views.LoadingNotify()
|
||||||
err := functions.Uninstall()
|
err := functions.Uninstall()
|
||||||
time.Sleep(time.Second >> 1)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
views.ErrorNotify("Failed to uninstall: \n" + err.Error())
|
views.ErrorNotify("Failed to uninstall: \n" + err.Error())
|
||||||
} else {
|
} else {
|
||||||
views.SuccessNotify("Uninstalled Netclient!")
|
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.ShowView(views.Networks)
|
||||||
})
|
})
|
||||||
views.RefreshComponent(views.Confirm, confirmView)
|
views.RefreshComponent(views.Confirm, confirmView)
|
||||||
|
|
|
@ -8,6 +8,7 @@ import (
|
||||||
"runtime/debug"
|
"runtime/debug"
|
||||||
|
|
||||||
"github.com/gravitl/netmaker/netclient/cli_options"
|
"github.com/gravitl/netmaker/netclient/cli_options"
|
||||||
|
"github.com/gravitl/netmaker/netclient/gui"
|
||||||
"github.com/gravitl/netmaker/netclient/ncutils"
|
"github.com/gravitl/netmaker/netclient/ncutils"
|
||||||
"github.com/gravitl/netmaker/netclient/ncwindows"
|
"github.com/gravitl/netmaker/netclient/ncwindows"
|
||||||
"github.com/urfave/cli/v2"
|
"github.com/urfave/cli/v2"
|
||||||
|
@ -35,9 +36,17 @@ func main() {
|
||||||
ncutils.CheckWG()
|
ncutils.CheckWG()
|
||||||
}
|
}
|
||||||
|
|
||||||
err := app.Run(os.Args)
|
if len(os.Args) <= 1 {
|
||||||
if err != nil {
|
networks, err := ncutils.GetSystemNetworks()
|
||||||
log.Fatal(err)
|
if err != nil {
|
||||||
|
networks = []string{}
|
||||||
|
}
|
||||||
|
gui.Run(networks)
|
||||||
|
} else {
|
||||||
|
err := app.Run(os.Args)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue