Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .golangci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ linters:
- noctx
- noinlineerr
- paralleltest
- prealloc
- testpackage
- wrapcheck
- wsl
Expand Down Expand Up @@ -77,5 +78,8 @@ formatters:
enable:
- gofumpt
- golines
settings:
golines:
max-len: 120
exclusions:
generated: lax
4 changes: 1 addition & 3 deletions app/plexus-agent/cmd/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,6 @@ import (
"github.com/spf13/cobra"
)

const version = "v0.4.0"

// versionCmd represents the version command.
var versionCmd = &cobra.Command{
Use: "version",
Expand All @@ -54,7 +52,7 @@ var versionCmd = &cobra.Command{
fmt.Printf("Agent: %s\n", response.Agent)
fmt.Printf("Binary: ")
}
fmt.Printf("%s: ", version)
fmt.Printf("%s: ", agent.Version)
info, _ := debug.ReadBuildInfo()
for _, setting := range info.Settings {
if strings.Contains(setting.Key, "vcs") {
Expand Down
2 changes: 1 addition & 1 deletion internal/agent/broker.go
Original file line number Diff line number Diff line change
Expand Up @@ -285,7 +285,7 @@ func sendVersion(msg *nats.Msg, agentConn *nats.Conn) {
} else {
slog.Debug("not connected to server")
}
response.Agent = version + ": "
response.Agent = Version + ": "
info, _ := debug.ReadBuildInfo()
for _, setting := range info.Settings {
if strings.Contains(setting.Key, "vcs") {
Expand Down
2 changes: 1 addition & 1 deletion internal/agent/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ const (
connectivityTimeout = time.Minute * 3
endpointServerTimeout = time.Second * 30
networkNotMapped = "network not mapped to server"
version = "v0.4.0"
Version = "v0.4.1"
networkTable = "networks"
deviceTable = "devices"
)
Expand Down
3 changes: 2 additions & 1 deletion internal/agent/handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,8 @@ func processLeave(request *plexus.LeaveRequest) plexus.MessageResponse {
}
serverConn := serverConn.Load()
if serverConn != nil {
if err := Request(serverConn, self.WGPublicKey+plexus.LeaveNetwork, request, &response, NatsTimeout); err != nil {
if err := Request(serverConn, self.WGPublicKey+plexus.LeaveNetwork,
request, &response, NatsTimeout); err != nil {
slog.Debug(err.Error())
return plexus.MessageResponse{Message: "error: " + err.Error()}
}
Expand Down
6 changes: 3 additions & 3 deletions internal/agent/register.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,8 @@ func handleRegistration(request *plexus.RegisterRequest) plexus.MessageResponse
func newDevice() (Device, error) {
device, err := boltdb.Get[Device]("self", deviceTable)
if err == nil {
if device.Version != version {
device.Version = version
if device.Version != Version {
device.Version = Version
if err := boltdb.Save(device, "self", deviceTable); err != nil {
slog.Error("update self version", "error", err)
}
Expand Down Expand Up @@ -135,7 +135,7 @@ func createPeer() (*plexus.Peer, *wgtypes.Key, string, error) {
WGPublicKey: pubKey.String(),
PubNkey: nkey,
Name: name,
Version: version,
Version: Version,
Endpoint: stunAddr.IP,
OS: runtime.GOOS,
Updated: time.Now(),
Expand Down
2 changes: 1 addition & 1 deletion internal/server/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ var (
ErrSecureBlankFQDN = errors.New("secure server requires FQDN")
ErrSecureWithIP = errors.New("cannot use IP address with secure")
ErrInValidEmail = errors.New("valid email address required")
version = "v0.4.0"
version = "v0.4.1"
)

const (
Expand Down
2 changes: 1 addition & 1 deletion internal/server/html/networks.html
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ <h1>Add Network</h1>
{{end}}

{{define "networkDetails"}}
<div hx-get="/networks/{{.Name}}" hx-trigger="every 1m" hx-target="#content" hx-target-error="#error"></div>
<div hx-get="/networks/details/{{.Name}}" hx-trigger="every 1m" hx-target="#content" hx-target-error="#error"></div>
<div class="w3-container w3-theme-dark w3-padding">
<!-- Network Details Nav Bar-->
<div class="w3-bar w3-theme-d5 w3-center">
Expand Down
16 changes: 4 additions & 12 deletions internal/server/keys.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,10 @@ import (
)

func displayCreateKey(w http.ResponseWriter, r *http.Request) {
session := GetSession(w, r)
if session == nil {
displayLogin(w, r)
return
}
page := getPage(session.UserName)
session := GetSessionData(r)
page := getPage(session.Username)
page.Page = "addKey"
if err := templates.ExecuteTemplate(w, "addKey", page); err != nil {
slog.Error("execute template", "template", "addKey", "page", page, "error", err)
}
render(w, "addKey", page)
}

func addKey(w http.ResponseWriter, r *http.Request) {
Expand Down Expand Up @@ -87,9 +81,7 @@ func displayKeys(w http.ResponseWriter, _ *http.Request) {
processError(w, http.StatusInternalServerError, err.Error())
return
}
if err := templates.ExecuteTemplate(w, keyTable, keys); err != nil {
slog.Error("execute template", "template", keyTable, "keys", keys, "error", err)
}
render(w, keyTable, keys)
}

func deleteKey(w http.ResponseWriter, r *http.Request) {
Expand Down
53 changes: 9 additions & 44 deletions internal/server/networks.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,20 +16,11 @@ import (
)

func displayAddNetwork(w http.ResponseWriter, r *http.Request) {
session := GetSession(w, r)
if session == nil {
displayLogin(w, r)
return
}
page := getPage(session.UserName)
session := GetSessionData(r)
page := getPage(session.Username)
page.Page = "addNetwork"

if err := session.Session.Save(r, w); err != nil {
slog.Error("session save", "error", err)
}
if err := templates.ExecuteTemplate(w, "addNetwork", page); err != nil {
slog.Error("template", "name", "addnetwork", "error", err)
}
render(w, "addNetwork", page)
}

func addNetwork(w http.ResponseWriter, r *http.Request) {
Expand Down Expand Up @@ -80,24 +71,17 @@ func addNetwork(w http.ResponseWriter, r *http.Request) {
}

func displayNetworks(w http.ResponseWriter, r *http.Request) {
session := GetSession(w, r)
if session == nil {
displayLogin(w, r)
return
}
page := getPage(session.UserName)
session := GetSessionData(r)
page := getPage(session.Username)
networks, err := boltdb.GetAll[plexus.Network](networkTable)
if err != nil {
processError(w, http.StatusInternalServerError, err.Error())
return
}
page.Data = networks

session.Save(w, r)
w.Header().Add("Hx-Trigger", "networkChange")
if err := templates.ExecuteTemplate(w, "networks", page); err != nil {
slog.Error("template", "name", "networks", "page", page, "error", err)
}
render(w, "networks", page)
}

func networksSideBar(w http.ResponseWriter, _ *http.Request) {
Expand All @@ -106,9 +90,7 @@ func networksSideBar(w http.ResponseWriter, _ *http.Request) {
processError(w, http.StatusInternalServerError, err.Error())
return
}
if err := templates.ExecuteTemplate(w, "sidebarNetworks", networks); err != nil {
slog.Error("sidebar", "networks", networks, "error", err)
}
render(w, "sidebarNetworks", networks)
}

func getAvailablePeers(network plexus.Network) []plexus.Peer {
Expand Down Expand Up @@ -148,11 +130,6 @@ func networkAddPeer(w http.ResponseWriter, r *http.Request) {
}

func networkDetails(w http.ResponseWriter, r *http.Request) {
session := GetSession(w, r)
if session == nil {
displayLogin(w, r)
return
}
details := struct {
Name string
Peers []plexus.NetworkPeer
Expand Down Expand Up @@ -187,12 +164,7 @@ func networkDetails(w http.ResponseWriter, r *http.Request) {
}
details.Name = networkName
details.AvailablePeers = getAvailablePeers(network)
if err := session.Session.Save(r, w); err != nil {
slog.Error("session save", "error", err)
}
if err := templates.ExecuteTemplate(w, "networkDetails", details); err != nil {
slog.Error("template", "template", "networkDetails", "details", details, "error", err)
}
render(w, "networkDetails", details)
}

func deleteNetwork(w http.ResponseWriter, r *http.Request) {
Expand Down Expand Up @@ -298,14 +270,7 @@ func networkPeerDetails(w http.ResponseWriter, r *http.Request) {
for _, peer := range network.Peers {
if peer.WGPublicKey == peerID {
peer.Connectivity *= 100
if err := templates.ExecuteTemplate(w, "displayNetworkPeer", peer); err != nil {
slog.Error(
"template execute",
"template", "displayNetworkPeer",
"peer", peer,
"error", err,
)
}
render(w, "displayNetworkPeer", peer)
return
}
}
Expand Down
48 changes: 28 additions & 20 deletions internal/server/page.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
package server

import (
"fmt"
"io"
"log/slog"
"net/http"
"path/filepath"
"runtime"
"time"

"github.com/devilcove/boltdb"
Expand Down Expand Up @@ -34,20 +38,16 @@ func init() {
func displayMain(w http.ResponseWriter, r *http.Request) {
page := initialize()
page.NeedsLogin = true
session := GetSession(w, r)
if session != nil {
networks, err := boltdb.GetAll[plexus.Network](networkTable)
if err != nil {
slog.Error("get networks for main display", "error", err)
}
page.Data = networks
page.NeedsLogin = !session.LoggedIn
session := GetSession(r)
networks, err := boltdb.GetAll[plexus.Network](networkTable)
if err != nil {
slog.Error("get networks for main display", "error", err)
}
page.Data = networks
page.NeedsLogin = session.IsNew
slog.Info("display main page", "session", session, "page", page)

if err := templates.ExecuteTemplate(w, "layout", page); err != nil {
slog.Error("display main", "template", "layout", "page", page, "error", err)
}
render(w, "layout", page)
}

func login(w http.ResponseWriter, r *http.Request) {
Expand All @@ -59,15 +59,15 @@ func login(w http.ResponseWriter, r *http.Request) {
processError(w, http.StatusBadRequest, "invalid user")
return
}
NewSession(w, r, user, true, "networks")
user.Password = "" // clear password.
saveSession(w, r, user)

slog.Debug("login", "user", user.Username)
page := getPage(user.Username)
page.NeedsLogin = false
page.Page = "networks"
if err := templates.ExecuteTemplate(w, "layout", page); err != nil {
slog.Error("execute template", "template", "layout", "page", page, "error", err)
}
saveSession(w, r, user)
render(w, "layout", page)
}

func validateUser(visitor *plexus.User) bool {
Expand All @@ -94,8 +94,6 @@ func checkPassword(plain, hash *plexus.User) bool {
func logout(w http.ResponseWriter, r *http.Request) {
ClearSession(w, r)
slog.Debug("logout")
// page := initialize()
// page.NeedsLogin = true
http.Redirect(w, r, "/", http.StatusFound)
}

Expand Down Expand Up @@ -140,8 +138,18 @@ func getPage(user any) Page {
return pages[user.(string)]
}

func displayLogin(w http.ResponseWriter, _ *http.Request) {
if err := templates.ExecuteTemplate(w, "layout", Page{NeedsLogin: true}); err != nil {
slog.Error("display login", "error", err)
func render(w io.Writer, template string, data any) {
if err := templates.ExecuteTemplate(w, template, data); err != nil {
slog.Error("render template", "caller", caller(2),
"name", template, "data", data, "error", err)
}
}

func caller(depth int) string {
pc, file, no, ok := runtime.Caller(depth)
details := runtime.FuncForPC(pc)
if ok && details != nil {
return fmt.Sprintf("%s %s:%d", details.Name(), filepath.Base(file), no)
}
return "unknown caller"
}
8 changes: 2 additions & 6 deletions internal/server/peers.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,7 @@ func displayPeers(w http.ResponseWriter, _ *http.Request) {
}
displayPeers = append(displayPeers, peer)
}
if err := templates.ExecuteTemplate(w, peerTable, displayPeers); err != nil {
slog.Error("template execute", "template", peerTable, "data", displayPeers, "error", err)
}
render(w, peerTable, displayPeers)
}

func peerDetails(w http.ResponseWriter, r *http.Request) {
Expand All @@ -39,9 +37,7 @@ func peerDetails(w http.ResponseWriter, r *http.Request) {
processError(w, http.StatusInternalServerError, err.Error())
return
}
if err := templates.ExecuteTemplate(w, "peerDetails", peer); err != nil {
slog.Error("template execute", "template", "peerDetails", "data", peer, "error", err)
}
render(w, "peerDetails", peer)
}

func deletePeer(w http.ResponseWriter, r *http.Request) {
Expand Down
4 changes: 1 addition & 3 deletions internal/server/relay.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,7 @@ func displayAddRelay(w http.ResponseWriter, r *http.Request) {
}
data.AvailablePeers = append(data.AvailablePeers, peer)
}
if err := templates.ExecuteTemplate(w, "addRelayToNetwork", data); err != nil {
slog.Error("execute template", "template", "addRelayToNetwork", "data", data, "error", err)
}
render(w, "addRelayToNetwork", data)
}

func addRelay(w http.ResponseWriter, r *http.Request) {
Expand Down
Loading