From df996606a174115e5a6300bc0b5618bbfd84c2c5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 Feb 2023 18:20:59 +0000 Subject: [PATCH 01/46] Bump golang.org/x/oauth2 from 0.3.0 to 0.4.0 Bumps [golang.org/x/oauth2](https://github.com/golang/oauth2) from 0.3.0 to 0.4.0. - [Release notes](https://github.com/golang/oauth2/releases) - [Commits](https://github.com/golang/oauth2/compare/v0.3.0...v0.4.0) --- updated-dependencies: - dependency-name: golang.org/x/oauth2 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 8 ++++---- go.sum | 12 ++++++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index 00da670a..f76fcbfd 100644 --- a/go.mod +++ b/go.mod @@ -16,10 +16,10 @@ require ( github.com/stretchr/testify v1.8.1 github.com/txn2/txeh v1.3.0 golang.org/x/crypto v0.3.0 - golang.org/x/net v0.4.0 // indirect - golang.org/x/oauth2 v0.3.0 - golang.org/x/sys v0.3.0 // indirect - golang.org/x/text v0.5.0 // indirect + golang.org/x/net v0.5.0 // indirect + golang.org/x/oauth2 v0.4.0 + golang.org/x/sys v0.4.0 // indirect + golang.org/x/text v0.6.0 // indirect golang.zx2c4.com/wireguard v0.0.0-20220920152132-bb719d3a6e2c // indirect golang.zx2c4.com/wireguard/wgctrl v0.0.0-20220324164955-056925b7df31 google.golang.org/protobuf v1.28.1 // indirect diff --git a/go.sum b/go.sum index 05d16a97..1a390675 100644 --- a/go.sum +++ b/go.sum @@ -179,10 +179,12 @@ golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= -golang.org/x/net v0.4.0 h1:Q5QPcMlvfxFTAPV0+07Xz/MpK9NTXu2VDUuy0FeMfaU= golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= -golang.org/x/oauth2 v0.3.0 h1:6l90koy8/LaBLmLu8jpHeHexzMwEita0zFfYlggy2F8= +golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/oauth2 v0.3.0/go.mod h1:rQrIauxkUhJ6CuwEXwymO2/eh4xz2ZWF1nBkcxS+tGk= +golang.org/x/oauth2 v0.4.0 h1:NF0gk8LVPg1Ml7SSbGyySuoxdsXitj7TvgvuRxIMc/M= +golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -205,8 +207,9 @@ golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220207234003-57398862261d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= @@ -215,8 +218,9 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.5.0 h1:OLmvp0KP+FVG99Ct/qFiL/Fhk4zp4QQnZ7b2U+5piUM= golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= From e424a5eea3cf729b8dc9c9b7416e2a0f264d44bf Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Mon, 6 Feb 2023 07:24:55 -0500 Subject: [PATCH 02/46] remove dns from peer update --- logic/peers.go | 30 ------------------------------ models/mqtt.go | 24 ++++++++---------------- 2 files changed, 8 insertions(+), 46 deletions(-) diff --git a/logic/peers.go b/logic/peers.go index ffb9a897..0200fb4f 100644 --- a/logic/peers.go +++ b/logic/peers.go @@ -301,7 +301,6 @@ func GetPeerUpdateForHost(host *models.Host) (models.HostPeerUpdate, error) { hostPeerUpdate := models.HostPeerUpdate{ Host: *host, Server: servercfg.GetServer(), - Network: make(map[string]models.NetworkInfo), PeerIDs: make(models.HostPeerMap), ServerVersion: servercfg.GetVersion(), ServerAddrs: []models.ServerAddr{}, @@ -320,10 +319,6 @@ func GetPeerUpdateForHost(host *models.Host) (models.HostPeerUpdate, error) { if !node.Connected || node.Action == models.NODE_DELETE || node.PendingDelete { continue } - - hostPeerUpdate.Network[node.Network] = models.NetworkInfo{ - DNS: getPeerDNS(node.Network), - } currentPeers, err := GetNetworkNodes(node.Network) if err != nil { log.Println("no network nodes") @@ -511,7 +506,6 @@ func GetPeerUpdate(node *models.Node, host *models.Host) (models.PeerUpdate, err peerUpdate := models.PeerUpdate{ Network: node.Network, ServerVersion: ncutils.Version, - DNS: getPeerDNS(node.Network), PeerIDs: make(models.PeerMap), } currentPeers, err := GetNetworkNodes(node.Network) @@ -780,7 +774,6 @@ func GetPeerUpdateLegacy(node *models.Node) (models.PeerUpdate, error) { }) peerUpdate.Peers = peers peerUpdate.ServerAddrs = serverNodeAddresses - peerUpdate.DNS = getPeerDNS(node.Network) peerUpdate.PeerIDs = peerMap return peerUpdate, nil } @@ -951,28 +944,6 @@ func GetAllowedIPs(node, peer *models.Node, metrics *models.Metrics) []net.IPNet return allowedips } -func getPeerDNS(network string) string { - var dns string - if nodes, err := GetNetworkNodes(network); err == nil { - for i, node := range nodes { - host, err := GetHost(node.HostID.String()) - if err != nil { - logger.Log(0, "error retrieving host for node", node.ID.String(), err.Error()) - continue - } - dns = dns + fmt.Sprintf("%s %s.%s\n", nodes[i].Address, host.Name, nodes[i].Network) - } - } - - if customDNSEntries, err := GetCustomDNS(network); err == nil { - for _, entry := range customDNSEntries { - // TODO - filter entries based on ACLs / given peers vs nodes in network - dns = dns + fmt.Sprintf("%s %s.%s\n", entry.Address, entry.Name, entry.Network) - } - } - return dns -} - // GetPeerUpdateForRelayedNode - calculates peer update for a relayed node by getting the relay // copying the relay node's allowed ips and making appropriate substitutions func GetPeerUpdateForRelayedNode(node *models.Node, udppeers map[string]string) (models.PeerUpdate, error) { @@ -1111,7 +1082,6 @@ func GetPeerUpdateForRelayedNode(node *models.Node, udppeers map[string]string) }) peerUpdate.Peers = peers peerUpdate.ServerAddrs = serverNodeAddresses - peerUpdate.DNS = getPeerDNS(node.Network) return peerUpdate, nil } diff --git a/models/mqtt.go b/models/mqtt.go index 823872a6..45562018 100644 --- a/models/mqtt.go +++ b/models/mqtt.go @@ -12,23 +12,20 @@ type PeerUpdate struct { ServerVersion string `json:"serverversion" bson:"serverversion" yaml:"serverversion"` ServerAddrs []ServerAddr `json:"serveraddrs" bson:"serveraddrs" yaml:"serveraddrs"` Peers []wgtypes.PeerConfig `json:"peers" bson:"peers" yaml:"peers"` - DNS string `json:"dns" bson:"dns" yaml:"dns"` PeerIDs PeerMap `json:"peerids" bson:"peerids" yaml:"peerids"` ProxyUpdate ProxyManagerPayload `json:"proxy_update" bson:"proxy_update" yaml:"proxy_update"` } // HostPeerUpdate - struct for host peer updates type HostPeerUpdate struct { - Host Host `json:"host" bson:"host" yaml:"host"` - Server string `json:"server" bson:"server" yaml:"server"` - ServerVersion string `json:"serverversion" bson:"serverversion" yaml:"serverversion"` - ServerAddrs []ServerAddr `json:"serveraddrs" bson:"serveraddrs" yaml:"serveraddrs"` - Network map[string]NetworkInfo `json:"network" bson:"network" yaml:"network"` - Peers []wgtypes.PeerConfig `json:"peers" bson:"peers" yaml:"peers"` - PeerIDs HostPeerMap `json:"peerids" bson:"peerids" yaml:"peerids"` - ProxyUpdate ProxyManagerPayload `json:"proxy_update" bson:"proxy_update" yaml:"proxy_update"` - EgressInfo map[string]EgressInfo `json:"egress_info" bson:"egress_info" yaml:"egress_info"` // map key is node ID - IngressInfo IngressInfo `json:"ingress_info" bson:"ext_peers" yaml:"ext_peers"` + Host Host `json:"host" bson:"host" yaml:"host"` + Server string `json:"server" bson:"server" yaml:"server"` + ServerVersion string `json:"serverversion" bson:"serverversion" yaml:"serverversion"` + ServerAddrs []ServerAddr `json:"serveraddrs" bson:"serveraddrs" yaml:"serveraddrs"` + Peers []wgtypes.PeerConfig `json:"peers" bson:"peers" yaml:"peers"` + PeerIDs HostPeerMap `json:"peerids" bson:"peerids" yaml:"peerids"` + ProxyUpdate ProxyManagerPayload `json:"proxy_update" bson:"proxy_update" yaml:"proxy_update"` + IngressInfo IngressInfo `json:"ingress_info" bson:"ext_peers" yaml:"ext_peers"` } // IngressInfo - struct for ingress info @@ -62,11 +59,6 @@ type ExtClientInfo struct { Peers map[string]PeerRouteInfo `json:"peers" yaml:"peers"` } -// NetworkInfo - struct for network info -type NetworkInfo struct { - DNS string `json:"dns" bson:"dns" yaml:"dns"` -} - // KeyUpdate - key update struct type KeyUpdate struct { Network string `json:"network" bson:"network"` From 2c36dfb0bff38759416769df3dcae17ad42b86c9 Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Mon, 6 Feb 2023 07:26:55 -0500 Subject: [PATCH 03/46] new dns update model --- models/dnsEntry.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/models/dnsEntry.go b/models/dnsEntry.go index fb2ccb10..df08373f 100644 --- a/models/dnsEntry.go +++ b/models/dnsEntry.go @@ -1,6 +1,20 @@ // TODO: Either add a returnNetwork and returnKey, or delete this package models +type DNSUpdateAction int + +const ( + DNSDelete = iota + DNSInsert + DNSReplace +) + +type DNSUpdate struct { + Action DNSUpdateAction + Name string + Address string +} + // DNSEntry - a DNS entry represented as struct type DNSEntry struct { Address string `json:"address" bson:"address" validate:"ip"` From a441e35a0914a3ac7b45b0ea4b8b7992016c8ff5 Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Mon, 6 Feb 2023 07:32:37 -0500 Subject: [PATCH 04/46] publish dns on node creation --- controllers/node.go | 15 +++++++++ mq/publishers.go | 78 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) diff --git a/controllers/node.go b/controllers/node.go index 5c046b67..ef6adf5c 100644 --- a/controllers/node.go +++ b/controllers/node.go @@ -671,6 +671,21 @@ func createNode(w http.ResponseWriter, r *http.Request) { } }() //runForceServerUpdate(&data.Node, true) + dns := models.DNSUpdate{ + Action: models.DNSInsert, + Address: data.Node.Address.IP.String(), + Name: data.Host.Name + data.Node.Network, + } + go func() { + //publish new node dns entry to all nodes on network + if err := mq.PublishDNSUpdate(data.Node.Network, dns); err != nil { + logger.Log(1, "failed to publish dns update on node creation", err.Error()) + } + //publish add dns records for network to new node + if err := mq.PublishAllDNS(&data.Node); err != nil { + logger.Log(1, "failed to publish dns update on node creation", err.Error()) + } + }() } // == EGRESS == diff --git a/mq/publishers.go b/mq/publishers.go index 08d6c7e1..edce9200 100644 --- a/mq/publishers.go +++ b/mq/publishers.go @@ -160,6 +160,84 @@ func ServerStartNotify() error { return nil } +func PublishDNSUpdate(network string, dns models.DNSUpdate) error { + nodes, err := logic.GetNetworkNodes(network) + if err != nil { + return err + } + for _, node := range nodes { + host, err := logic.GetHost(node.HostID.String()) + if err != nil { + logger.Log(0, "error retrieving host for dns update", host.ID.String(), err.Error()) + continue + } + data, err := json.Marshal(dns) + if err != nil { + logger.Log(0, "failed to encode dns data for node", node.ID.String(), err.Error()) + } + if err := publish(host, "network/"+host.ID.String()+"/dns", data); err != nil { + logger.Log(0, "error publishing dns update to host", host.ID.String(), err.Error()) + continue + } + logger.Log(3, "published dns update to host", host.ID.String()) + } + return nil +} + +func PublishAllDNS(newnode *models.Node) error { + alldns := []models.DNSUpdate{} + dns := models.DNSUpdate{} + newnodeHost, err := logic.GetHost(newnode.HostID.String()) + if err != nil { + return fmt.Errorf("error retrieving host for dns update %w", err) + } + nodes, err := logic.GetNetworkNodes(newnode.Network) + if err != nil { + return err + } + for _, node := range nodes { + if node.ID == newnode.ID { + //skip self + continue + } + host, err := logic.GetHost(node.HostID.String()) + if err != nil { + logger.Log(0, "error retrieving host for dns update", host.ID.String(), err.Error()) + continue + } + if node.Address.IP != nil { + dns.Action = models.DNSInsert + dns.Name = host.Name + "." + node.Network + dns.Address = node.Address.IP.String() + alldns = append(alldns, dns) + } + if node.Address6.IP != nil { + dns.Action = models.DNSInsert + dns.Name = host.Name + "." + node.Network + dns.Address = node.Address6.IP.String() + alldns = append(alldns, dns) + } + } + entries, err := logic.GetCustomDNS(newnode.Network) + if err != nil { + logger.Log(0, "error retrieving custom dns entries", err.Error()) + } + for _, entry := range entries { + dns.Action = models.DNSInsert + dns.Address = entry.Address + dns.Name = entry.Name + alldns = append(alldns, dns) + } + data, err := json.Marshal(alldns) + if err != nil { + return fmt.Errorf("error encoding dnd data %w", err) + } + if err := publish(newnodeHost, "network/"+newnodeHost.ID.String()+"/fulldns", data); err != nil { + return fmt.Errorf("error publish full dns update to %s, %w", newnodeHost.ID.String(), err) + } + return nil +} + // function to collect and store metrics for server nodes //func collectServerMetrics(networks []models.Network) { // if !servercfg.Is_EE { From 6d4f5e5ddc2de7b15dce47764160d4ceb72a74d4 Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Mon, 6 Feb 2023 07:43:25 -0500 Subject: [PATCH 05/46] publish ipv4 and ipv6 dns update on join --- controllers/node.go | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/controllers/node.go b/controllers/node.go index ef6adf5c..0908675b 100644 --- a/controllers/node.go +++ b/controllers/node.go @@ -671,15 +671,24 @@ func createNode(w http.ResponseWriter, r *http.Request) { } }() //runForceServerUpdate(&data.Node, true) - dns := models.DNSUpdate{ - Action: models.DNSInsert, - Address: data.Node.Address.IP.String(), - Name: data.Host.Name + data.Node.Network, - } go func() { - //publish new node dns entry to all nodes on network - if err := mq.PublishDNSUpdate(data.Node.Network, dns); err != nil { - logger.Log(1, "failed to publish dns update on node creation", err.Error()) + dns := models.DNSUpdate{ + Action: models.DNSInsert, + Name: data.Host.Name + data.Node.Network, + } + if data.Node.Address.IP != nil { + dns.Address = data.Node.Address.IP.String() + //publish new node dns entry to all nodes on network + if err := mq.PublishDNSUpdate(data.Node.Network, dns); err != nil { + logger.Log(1, "failed to publish dns update on node creation", err.Error()) + } + } + if data.Node.Address6.IP != nil { + dns.Address = data.Node.Address6.IP.String() + //publish new node dns entry to all nodes on network + if err := mq.PublishDNSUpdate(data.Node.Network, dns); err != nil { + logger.Log(1, "failed to publish dns update on node creation", err.Error()) + } } //publish add dns records for network to new node if err := mq.PublishAllDNS(&data.Node); err != nil { From af6635606197cc5cdd239629336a280c1c9058a4 Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Mon, 6 Feb 2023 08:37:42 -0500 Subject: [PATCH 06/46] publish dns on node deletion --- controllers/hosts.go | 3 +++ controllers/node.go | 9 ++++++++- mq/publishers.go | 20 ++++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/controllers/hosts.go b/controllers/hosts.go index bcd5c5de..05073599 100644 --- a/controllers/hosts.go +++ b/controllers/hosts.go @@ -279,6 +279,9 @@ func deleteHostFromNetwork(w http.ResponseWriter, r *http.Request) { if err := mq.PublishPeerUpdate(); err != nil { logger.Log(1, "error publishing peer update ", err.Error()) } + if err := mq.PublishDNSDelete(node, currHost); err != nil { + logger.Log(1, "error publishing dns update", err.Error()) + } }() logger.Log(2, r.Header.Get("user"), fmt.Sprintf("removed host %s from network %s", currHost.Name, network)) w.WriteHeader(http.StatusOK) diff --git a/controllers/node.go b/controllers/node.go index 0908675b..eb697ca5 100644 --- a/controllers/node.go +++ b/controllers/node.go @@ -674,7 +674,7 @@ func createNode(w http.ResponseWriter, r *http.Request) { go func() { dns := models.DNSUpdate{ Action: models.DNSInsert, - Name: data.Host.Name + data.Node.Network, + Name: data.Host.Name + "." + data.Node.Network, } if data.Node.Address.IP != nil { dns.Address = data.Node.Address.IP.String() @@ -1014,6 +1014,13 @@ func deleteNode(w http.ResponseWriter, r *http.Request) { if err := mq.PublishPeerUpdate(); err != nil { logger.Log(1, "error publishing peer update ", err.Error()) } + host, err := logic.GetHost(node.HostID.String()) + if err != nil { + logger.Log(1, "failed to retrieve host for node", node.ID.String(), err.Error()) + } + if err := mq.PublishDNSDelete(&node, host); err != nil { + logger.Log(1, "error publishing dns update", err.Error()) + } }() } diff --git a/mq/publishers.go b/mq/publishers.go index edce9200..9cd47a5f 100644 --- a/mq/publishers.go +++ b/mq/publishers.go @@ -238,6 +238,26 @@ func PublishAllDNS(newnode *models.Node) error { return nil } +func PublishDNSDelete(node *models.Node, host *models.Host) error { + dns := models.DNSUpdate{ + Action: models.DNSDelete, + Name: host.Name + "." + node.Network, + } + if node.Address.IP != nil { + dns.Address = node.Address.IP.String() + if err := PublishDNSUpdate(node.Network, dns); err != nil { + return fmt.Errorf("dns update node deletion %w", err) + } + } + if node.Address6.IP != nil { + dns.Address = node.Address6.IP.String() + if err := PublishDNSUpdate(node.Network, dns); err != nil { + return fmt.Errorf("dns update node deletion %w", err) + } + } + return nil +} + // function to collect and store metrics for server nodes //func collectServerMetrics(networks []models.Network) { // if !servercfg.Is_EE { From a24263281c34e5f8443e95d4da4de2c0796e8ca7 Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Mon, 6 Feb 2023 09:01:45 -0500 Subject: [PATCH 07/46] publish dns update on node ip change --- controllers/node.go | 3 +++ mq/publishers.go | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/controllers/node.go b/controllers/node.go index eb697ca5..17abc00e 100644 --- a/controllers/node.go +++ b/controllers/node.go @@ -967,6 +967,9 @@ func updateNode(w http.ResponseWriter, r *http.Request) { json.NewEncoder(w).Encode(apiNode) runUpdates(newNode, ifaceDelta) + if err := mq.PublishReplaceDNS(¤tNode, newNode, host); err != nil { + logger.Log(1, "failed to publish dns update", err.Error()) + } } // swagger:route DELETE /api/nodes/{network}/{nodeid} nodes deleteNode diff --git a/mq/publishers.go b/mq/publishers.go index 9cd47a5f..9d2cdf9f 100644 --- a/mq/publishers.go +++ b/mq/publishers.go @@ -258,6 +258,26 @@ func PublishDNSDelete(node *models.Node, host *models.Host) error { return nil } +func PublishReplaceDNS(oldNode, newNode *models.Node, host *models.Host) error { + dns := models.DNSUpdate{ + Action: models.DNSReplace, + Name: host.Name + "." + oldNode.Network, + } + if !oldNode.Address.IP.Equal(newNode.Address.IP) { + dns.Address = newNode.Address.IP.String() + if err := PublishDNSUpdate(oldNode.Network, dns); err != nil { + return err + } + } + if !oldNode.Address6.IP.Equal(newNode.Address6.IP) { + dns.Address = newNode.Address6.IP.String() + if err := PublishDNSUpdate(oldNode.Network, dns); err != nil { + return err + } + } + return nil +} + // function to collect and store metrics for server nodes //func collectServerMetrics(networks []models.Network) { // if !servercfg.Is_EE { From 89136f483214222db1fba47128c521c43f5aaa79 Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Mon, 6 Feb 2023 10:48:33 -0500 Subject: [PATCH 08/46] publish dns update on ext client deletion --- controllers/ext_client.go | 6 ++++++ models/dnsEntry.go | 1 + mq/publishers.go | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+) diff --git a/controllers/ext_client.go b/controllers/ext_client.go index ab55a905..a9c54b61 100644 --- a/controllers/ext_client.go +++ b/controllers/ext_client.go @@ -392,6 +392,9 @@ func createExtClient(w http.ResponseWriter, r *http.Request) { if err != nil { logger.Log(1, "error setting ext peers on "+nodeid+": "+err.Error()) } + if err := mq.PublishExtCLientDNS(&extclient); err != nil { + logger.Log(1, "error publishing extclient dns", err.Error()) + } } // swagger:route PUT /api/extclients/{network}/{clientid} ext_client updateExtClient @@ -558,6 +561,9 @@ func deleteExtClient(w http.ResponseWriter, r *http.Request) { if err != nil { logger.Log(1, "error setting ext peers on "+ingressnode.ID.String()+": "+err.Error()) } + if err := mq.PublishDeleteExtClientDNS(&extclient); err != nil { + logger.Log(1, "error publishing dns update for extclient deletion", err.Error()) + } logger.Log(0, r.Header.Get("user"), "Deleted extclient client", params["clientid"], "from network", params["network"]) diff --git a/models/dnsEntry.go b/models/dnsEntry.go index df08373f..e89ab3f7 100644 --- a/models/dnsEntry.go +++ b/models/dnsEntry.go @@ -5,6 +5,7 @@ type DNSUpdateAction int const ( DNSDelete = iota + DNSDeleteByName DNSInsert DNSReplace ) diff --git a/mq/publishers.go b/mq/publishers.go index 9d2cdf9f..6f61711b 100644 --- a/mq/publishers.go +++ b/mq/publishers.go @@ -278,6 +278,44 @@ func PublishReplaceDNS(oldNode, newNode *models.Node, host *models.Host) error { return nil } +func PublishExtCLientDNS(client *models.ExtClient) error { + var err4, err6 error + dns := models.DNSUpdate{ + Action: models.DNSInsert, + Name: client.ClientID + "." + client.Network, + Address: client.Address, + } + if client.Address != "" { + dns.Address = client.Address + err4 = PublishDNSUpdate(client.Network, dns) + } + if client.Address6 != "" { + dns.Address = client.Address6 + err6 = PublishDNSUpdate(client.Network, dns) + } + if err4 != nil && err6 != nil { + return fmt.Errorf("error publishing extclient dns update %w %w", err4, err6) + } + if err4 != nil { + return fmt.Errorf("error publishing extclient dns update %w", err4) + } + if err6 != nil { + return fmt.Errorf("error publishing extclient dns update %w", err6) + } + return nil +} + +func PublishDeleteExtClientDNS(client *models.ExtClient) error { + dns := models.DNSUpdate{ + Action: models.DNSDeleteByName, + Name: client.ClientID, + } + if err := PublishDNSUpdate(client.Network, dns); err != nil { + return err + } + return nil +} + // function to collect and store metrics for server nodes //func collectServerMetrics(networks []models.Network) { // if !servercfg.Is_EE { From d857ca114813899ee4a2dd2a690e5ee7b49571aa Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Mon, 6 Feb 2023 11:11:29 -0500 Subject: [PATCH 09/46] publish dns update on ext client update --- controllers/ext_client.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/controllers/ext_client.go b/controllers/ext_client.go index a9c54b61..b0ca0baa 100644 --- a/controllers/ext_client.go +++ b/controllers/ext_client.go @@ -493,6 +493,14 @@ func updateExtClient(w http.ResponseWriter, r *http.Request) { } w.WriteHeader(http.StatusOK) json.NewEncoder(w).Encode(newclient) + if changedID { + if err := mq.PublishDeleteExtClientDNS(&oldExtClient); err != nil { + logger.Log(1, "error pubishing dns update for extcient update", err.Error()) + } + if err := mq.PublishExtCLientDNS(&newExtClient); err != nil { + logger.Log(1, "error pubishing dns update for extcient update", err.Error()) + } + } } // swagger:route DELETE /api/extclients/{network}/{clientid} ext_client deleteExtClient From 4f7c038702edbbcf9d56c3039996b5d3cdd05bcb Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Mon, 6 Feb 2023 11:19:19 -0500 Subject: [PATCH 10/46] publish dns update on custom dns creation --- controllers/dns.go | 3 +++ mq/publishers.go | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/controllers/dns.go b/controllers/dns.go index eefbddb9..14f007d9 100644 --- a/controllers/dns.go +++ b/controllers/dns.go @@ -179,6 +179,9 @@ func createDNS(w http.ResponseWriter, r *http.Request) { if err = mq.PublishPeerUpdate(); err != nil { logger.Log(0, "failed to publish peer update after ACL update on", entry.Network) } + if err := mq.PublishCustomDNS(&entry); err != nil { + logger.Log(0, "error publishing custom dns", err.Error()) + } } logger.Log(2, r.Header.Get("user"), fmt.Sprintf("DNS entry is set: %+v", entry)) diff --git a/mq/publishers.go b/mq/publishers.go index 6f61711b..a1bae082 100644 --- a/mq/publishers.go +++ b/mq/publishers.go @@ -316,6 +316,18 @@ func PublishDeleteExtClientDNS(client *models.ExtClient) error { return nil } +func PublishCustomDNS(entry *models.DNSEntry) error { + dns := models.DNSUpdate{ + Action: models.DNSInsert, + Name: entry.Name, + //entry.Address6 is never used + Address: entry.Address, + } + if err := PublishDNSUpdate(entry.Network, dns); err != nil { + return err + } +} + // function to collect and store metrics for server nodes //func collectServerMetrics(networks []models.Network) { // if !servercfg.Is_EE { From dbad8ac463ef2e176bb08594c2a2dddfd5d79966 Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Mon, 6 Feb 2023 11:27:50 -0500 Subject: [PATCH 11/46] publish dns update on custom dns deletion --- controllers/dns.go | 8 ++++++++ mq/publishers.go | 1 + 2 files changed, 9 insertions(+) diff --git a/controllers/dns.go b/controllers/dns.go index 14f007d9..62a96139 100644 --- a/controllers/dns.go +++ b/controllers/dns.go @@ -224,6 +224,14 @@ func deleteDNS(w http.ResponseWriter, r *http.Request) { return } json.NewEncoder(w).Encode(entrytext + " deleted.") + dns := models.DNSUpdate{ + Action: models.DNSDeleteByName, + Name: entrytext, + } + if err := mq.PublishDNSUpdate(params["network"], dns); err != nil { + logger.Log(0, "failed to publish dns update", err.Error()) + } + } // GetDNSEntry - gets a DNS entry diff --git a/mq/publishers.go b/mq/publishers.go index a1bae082..ca335c33 100644 --- a/mq/publishers.go +++ b/mq/publishers.go @@ -326,6 +326,7 @@ func PublishCustomDNS(entry *models.DNSEntry) error { if err := PublishDNSUpdate(entry.Network, dns); err != nil { return err } + return nil } // function to collect and store metrics for server nodes From 5cac655f04cdbe95e55f3ec9ae3d4f461bb7a3d7 Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Mon, 6 Feb 2023 14:50:29 -0500 Subject: [PATCH 12/46] publish dns update on host name change --- controllers/hosts.go | 13 +++++++++++++ models/dnsEntry.go | 6 ++++-- mq/publishers.go | 29 +++++++++++++++++++++++++++-- 3 files changed, 44 insertions(+), 4 deletions(-) diff --git a/controllers/hosts.go b/controllers/hosts.go index 05073599..d8d350e5 100644 --- a/controllers/hosts.go +++ b/controllers/hosts.go @@ -109,6 +109,19 @@ func updateHost(w http.ResponseWriter, r *http.Request) { if err := mq.PublishPeerUpdate(); err != nil { logger.Log(0, "fail to publish peer update: ", err.Error()) } + if newHost.Name != currHost.Name { + networks := logic.GetHostNetworks(currHost.ID.String()) + if err := mq.PublishHostDNSUpdate(currHost, newHost, networks); err != nil { + var dnsError *mq.DNSError + if errors.Is(err, dnsError) { + for _, message := range err.(mq.DNSError).ErrorStrings { + logger.Log(0, message) + } + } else { + logger.Log(0, err.Error()) + } + } + } }() apiHostData := newHost.ConvertNMHostToAPI() diff --git a/models/dnsEntry.go b/models/dnsEntry.go index e89ab3f7..d125db0c 100644 --- a/models/dnsEntry.go +++ b/models/dnsEntry.go @@ -4,15 +4,17 @@ package models type DNSUpdateAction int const ( - DNSDelete = iota + DNSDeleteByIP = iota DNSDeleteByName + DNSReplaceName + DNSReplaceByIP DNSInsert - DNSReplace ) type DNSUpdate struct { Action DNSUpdateAction Name string + NewName string Address string } diff --git a/mq/publishers.go b/mq/publishers.go index ca335c33..bf441894 100644 --- a/mq/publishers.go +++ b/mq/publishers.go @@ -240,7 +240,7 @@ func PublishAllDNS(newnode *models.Node) error { func PublishDNSDelete(node *models.Node, host *models.Host) error { dns := models.DNSUpdate{ - Action: models.DNSDelete, + Action: models.DNSDeleteByIP, Name: host.Name + "." + node.Network, } if node.Address.IP != nil { @@ -260,7 +260,7 @@ func PublishDNSDelete(node *models.Node, host *models.Host) error { func PublishReplaceDNS(oldNode, newNode *models.Node, host *models.Host) error { dns := models.DNSUpdate{ - Action: models.DNSReplace, + Action: models.DNSReplaceByIP, Name: host.Name + "." + oldNode.Network, } if !oldNode.Address.IP.Equal(newNode.Address.IP) { @@ -329,6 +329,31 @@ func PublishCustomDNS(entry *models.DNSEntry) error { return nil } +type DNSError struct { + ErrorStrings []string +} + +func (e DNSError) Error() string { + return "error publishing dns update" +} +func PublishHostDNSUpdate(old, new *models.Host, networks []string) error { + errors := DNSError{} + for _, network := range networks { + dns := models.DNSUpdate{ + Action: models.DNSReplaceName, + Name: old.Name + "." + network, + NewName: new.Name + "." + network, + } + if err := PublishDNSUpdate(network, dns); err != nil { + errors.ErrorStrings = append(errors.ErrorStrings, err.Error()) + } + } + if len(errors.ErrorStrings) > 0 { + return errors + } + return nil +} + // function to collect and store metrics for server nodes //func collectServerMetrics(networks []models.Network) { // if !servercfg.Is_EE { From b9accde5b2bf0bd8af0c079e226acc11f36fe57a Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Mon, 6 Feb 2023 15:06:23 -0500 Subject: [PATCH 13/46] ensure publish dns in go routine --- controllers/dns.go | 30 +++++++++++++++++------------- controllers/ext_client.go | 16 +++++++++------- 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/controllers/dns.go b/controllers/dns.go index 62a96139..4a38aa0c 100644 --- a/controllers/dns.go +++ b/controllers/dns.go @@ -176,12 +176,14 @@ func createDNS(w http.ResponseWriter, r *http.Request) { } logger.Log(1, "new DNS record added:", entry.Name) if servercfg.IsMessageQueueBackend() { - if err = mq.PublishPeerUpdate(); err != nil { - logger.Log(0, "failed to publish peer update after ACL update on", entry.Network) - } - if err := mq.PublishCustomDNS(&entry); err != nil { - logger.Log(0, "error publishing custom dns", err.Error()) - } + go func() { + if err = mq.PublishPeerUpdate(); err != nil { + logger.Log(0, "failed to publish peer update after ACL update on", entry.Network) + } + if err := mq.PublishCustomDNS(&entry); err != nil { + logger.Log(0, "error publishing custom dns", err.Error()) + } + }() } logger.Log(2, r.Header.Get("user"), fmt.Sprintf("DNS entry is set: %+v", entry)) @@ -224,13 +226,15 @@ func deleteDNS(w http.ResponseWriter, r *http.Request) { return } json.NewEncoder(w).Encode(entrytext + " deleted.") - dns := models.DNSUpdate{ - Action: models.DNSDeleteByName, - Name: entrytext, - } - if err := mq.PublishDNSUpdate(params["network"], dns); err != nil { - logger.Log(0, "failed to publish dns update", err.Error()) - } + go func() { + dns := models.DNSUpdate{ + Action: models.DNSDeleteByName, + Name: entrytext, + } + if err := mq.PublishDNSUpdate(params["network"], dns); err != nil { + logger.Log(0, "failed to publish dns update", err.Error()) + } + }() } diff --git a/controllers/ext_client.go b/controllers/ext_client.go index b0ca0baa..59a9dc5a 100644 --- a/controllers/ext_client.go +++ b/controllers/ext_client.go @@ -388,13 +388,15 @@ func createExtClient(w http.ResponseWriter, r *http.Request) { logger.Log(0, r.Header.Get("user"), "created new ext client on network", networkName) w.WriteHeader(http.StatusOK) - err = mq.PublishExtPeerUpdate(&node) - if err != nil { - logger.Log(1, "error setting ext peers on "+nodeid+": "+err.Error()) - } - if err := mq.PublishExtCLientDNS(&extclient); err != nil { - logger.Log(1, "error publishing extclient dns", err.Error()) - } + go func() { + err = mq.PublishExtPeerUpdate(&node) + if err != nil { + logger.Log(1, "error setting ext peers on "+nodeid+": "+err.Error()) + } + if err := mq.PublishExtCLientDNS(&extclient); err != nil { + logger.Log(1, "error publishing extclient dns", err.Error()) + } + }() } // swagger:route PUT /api/extclients/{network}/{clientid} ext_client updateExtClient From 488ada670ca816311ff0e4df3b7d36cfb6b0cc24 Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Mon, 6 Feb 2023 15:38:42 -0500 Subject: [PATCH 14/46] cleanup: function comments, etc --- controllers/ext_client.go | 30 +++++++++++++++++------------- controllers/node.go | 8 +++++--- models/dnsEntry.go | 9 ++++++++- mq/publishers.go | 13 ++++++++++++- 4 files changed, 42 insertions(+), 18 deletions(-) diff --git a/controllers/ext_client.go b/controllers/ext_client.go index 59a9dc5a..83eb79db 100644 --- a/controllers/ext_client.go +++ b/controllers/ext_client.go @@ -496,12 +496,14 @@ func updateExtClient(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) json.NewEncoder(w).Encode(newclient) if changedID { - if err := mq.PublishDeleteExtClientDNS(&oldExtClient); err != nil { - logger.Log(1, "error pubishing dns update for extcient update", err.Error()) - } - if err := mq.PublishExtCLientDNS(&newExtClient); err != nil { - logger.Log(1, "error pubishing dns update for extcient update", err.Error()) - } + go func() { + if err := mq.PublishDeleteExtClientDNS(&oldExtClient); err != nil { + logger.Log(1, "error pubishing dns update for extcient update", err.Error()) + } + if err := mq.PublishExtCLientDNS(&newExtClient); err != nil { + logger.Log(1, "error pubishing dns update for extcient update", err.Error()) + } + }() } } @@ -567,13 +569,15 @@ func deleteExtClient(w http.ResponseWriter, r *http.Request) { return } - err = mq.PublishExtPeerUpdate(&ingressnode) - if err != nil { - logger.Log(1, "error setting ext peers on "+ingressnode.ID.String()+": "+err.Error()) - } - if err := mq.PublishDeleteExtClientDNS(&extclient); err != nil { - logger.Log(1, "error publishing dns update for extclient deletion", err.Error()) - } + go func() { + err = mq.PublishExtPeerUpdate(&ingressnode) + if err != nil { + logger.Log(1, "error setting ext peers on "+ingressnode.ID.String()+": "+err.Error()) + } + if err := mq.PublishDeleteExtClientDNS(&extclient); err != nil { + logger.Log(1, "error publishing dns update for extclient deletion", err.Error()) + } + }() logger.Log(0, r.Header.Get("user"), "Deleted extclient client", params["clientid"], "from network", params["network"]) diff --git a/controllers/node.go b/controllers/node.go index 17abc00e..f0c5b75d 100644 --- a/controllers/node.go +++ b/controllers/node.go @@ -967,9 +967,11 @@ func updateNode(w http.ResponseWriter, r *http.Request) { json.NewEncoder(w).Encode(apiNode) runUpdates(newNode, ifaceDelta) - if err := mq.PublishReplaceDNS(¤tNode, newNode, host); err != nil { - logger.Log(1, "failed to publish dns update", err.Error()) - } + go func() { + if err := mq.PublishReplaceDNS(¤tNode, newNode, host); err != nil { + logger.Log(1, "failed to publish dns update", err.Error()) + } + }() } // swagger:route DELETE /api/nodes/{network}/{nodeid} nodes deleteNode diff --git a/models/dnsEntry.go b/models/dnsEntry.go index d125db0c..eb87059e 100644 --- a/models/dnsEntry.go +++ b/models/dnsEntry.go @@ -1,16 +1,23 @@ // TODO: Either add a returnNetwork and returnKey, or delete this package models +// DNSUpdateAction identifies the action to be performed with the dns update data type DNSUpdateAction int const ( + // DNSDeleteByIP delete the dns entry DNSDeleteByIP = iota + // DNSDeleteByName delete the dns entry DNSDeleteByName + // DNSReplaceName replace the dns entry DNSReplaceName - DNSReplaceByIP + // DNSReplaceIP resplace the dns entry + DNSReplaceIP + // DNSInsert insert a new dns entry DNSInsert ) +// DNSUpdate data for updating entries in /etc/hosts type DNSUpdate struct { Action DNSUpdateAction Name string diff --git a/mq/publishers.go b/mq/publishers.go index bf441894..1557ba4f 100644 --- a/mq/publishers.go +++ b/mq/publishers.go @@ -160,6 +160,7 @@ func ServerStartNotify() error { return nil } +// PublishDNSUpdate publishes a dns update to all nodes on a network func PublishDNSUpdate(network string, dns models.DNSUpdate) error { nodes, err := logic.GetNetworkNodes(network) if err != nil { @@ -184,6 +185,7 @@ func PublishDNSUpdate(network string, dns models.DNSUpdate) error { return nil } +// PublishAllDNS publishes an array of dns updates (ip / host.network) for each peer to a node joining a network func PublishAllDNS(newnode *models.Node) error { alldns := []models.DNSUpdate{} dns := models.DNSUpdate{} @@ -238,6 +240,7 @@ func PublishAllDNS(newnode *models.Node) error { return nil } +// PublishDNSDelete publish a dns update deleting a node to all hosts on a network func PublishDNSDelete(node *models.Node, host *models.Host) error { dns := models.DNSUpdate{ Action: models.DNSDeleteByIP, @@ -258,9 +261,10 @@ func PublishDNSDelete(node *models.Node, host *models.Host) error { return nil } +// PublishReplaceNDS publish a dns update to replace a dns entry on all hosts in network func PublishReplaceDNS(oldNode, newNode *models.Node, host *models.Host) error { dns := models.DNSUpdate{ - Action: models.DNSReplaceByIP, + Action: models.DNSReplaceIP, Name: host.Name + "." + oldNode.Network, } if !oldNode.Address.IP.Equal(newNode.Address.IP) { @@ -278,6 +282,7 @@ func PublishReplaceDNS(oldNode, newNode *models.Node, host *models.Host) error { return nil } +// PublishExtClientDNS publish dns update for new extclient func PublishExtCLientDNS(client *models.ExtClient) error { var err4, err6 error dns := models.DNSUpdate{ @@ -305,6 +310,7 @@ func PublishExtCLientDNS(client *models.ExtClient) error { return nil } +// PublishDeleteExtClient publish dns update to delete extclient entry func PublishDeleteExtClientDNS(client *models.ExtClient) error { dns := models.DNSUpdate{ Action: models.DNSDeleteByName, @@ -316,6 +322,7 @@ func PublishDeleteExtClientDNS(client *models.ExtClient) error { return nil } +// PublishCustomDNS publish dns update for new custom dns entry func PublishCustomDNS(entry *models.DNSEntry) error { dns := models.DNSUpdate{ Action: models.DNSInsert, @@ -329,13 +336,17 @@ func PublishCustomDNS(entry *models.DNSEntry) error { return nil } +// DNSError error struct capable of holding multiple error messages type DNSError struct { ErrorStrings []string } +// DNSError.Error implementation of error interface func (e DNSError) Error() string { return "error publishing dns update" } + +// PublishHostDNSUpdate publishes dns update on host name change func PublishHostDNSUpdate(old, new *models.Host, networks []string) error { errors := DNSError{} for _, network := range networks { From 0c470daf3cfb4ddaffb64b1283fd2b49958e55ba Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Tue, 7 Feb 2023 14:24:57 -0500 Subject: [PATCH 15/46] add newAddress to DNSUpdate struct --- models/dnsEntry.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/models/dnsEntry.go b/models/dnsEntry.go index eb87059e..cd1ea271 100644 --- a/models/dnsEntry.go +++ b/models/dnsEntry.go @@ -19,10 +19,11 @@ const ( // DNSUpdate data for updating entries in /etc/hosts type DNSUpdate struct { - Action DNSUpdateAction - Name string - NewName string - Address string + Action DNSUpdateAction + Name string + NewName string + Address string + NewAddress string } // DNSEntry - a DNS entry represented as struct From e1f644a4537825e90c0fee0d75a245ccb90aa0d7 Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Tue, 7 Feb 2023 14:31:22 -0500 Subject: [PATCH 16/46] add server name to dns publish topics --- mq/publishers.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mq/publishers.go b/mq/publishers.go index 1557ba4f..da39d080 100644 --- a/mq/publishers.go +++ b/mq/publishers.go @@ -176,7 +176,7 @@ func PublishDNSUpdate(network string, dns models.DNSUpdate) error { if err != nil { logger.Log(0, "failed to encode dns data for node", node.ID.String(), err.Error()) } - if err := publish(host, "network/"+host.ID.String()+"/dns", data); err != nil { + if err := publish(host, "dns/"+host.ID.String()+"/"+servercfg.GetServer(), data); err != nil { logger.Log(0, "error publishing dns update to host", host.ID.String(), err.Error()) continue } @@ -234,7 +234,7 @@ func PublishAllDNS(newnode *models.Node) error { if err != nil { return fmt.Errorf("error encoding dnd data %w", err) } - if err := publish(newnodeHost, "network/"+newnodeHost.ID.String()+"/fulldns", data); err != nil { + if err := publish(newnodeHost, "alldns/"+newnodeHost.ID.String()+"/"+servercfg.GetServer(), data); err != nil { return fmt.Errorf("error publish full dns update to %s, %w", newnodeHost.ID.String(), err) } return nil From 562df0ad0f20755b897bf44beb5df51b18b7b73c Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Tue, 7 Feb 2023 15:31:45 -0500 Subject: [PATCH 17/46] fix rebase --- models/mqtt.go | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/models/mqtt.go b/models/mqtt.go index 45562018..6b3caafa 100644 --- a/models/mqtt.go +++ b/models/mqtt.go @@ -18,14 +18,15 @@ type PeerUpdate struct { // HostPeerUpdate - struct for host peer updates type HostPeerUpdate struct { - Host Host `json:"host" bson:"host" yaml:"host"` - Server string `json:"server" bson:"server" yaml:"server"` - ServerVersion string `json:"serverversion" bson:"serverversion" yaml:"serverversion"` - ServerAddrs []ServerAddr `json:"serveraddrs" bson:"serveraddrs" yaml:"serveraddrs"` - Peers []wgtypes.PeerConfig `json:"peers" bson:"peers" yaml:"peers"` - PeerIDs HostPeerMap `json:"peerids" bson:"peerids" yaml:"peerids"` - ProxyUpdate ProxyManagerPayload `json:"proxy_update" bson:"proxy_update" yaml:"proxy_update"` - IngressInfo IngressInfo `json:"ingress_info" bson:"ext_peers" yaml:"ext_peers"` + Host Host `json:"host" bson:"host" yaml:"host"` + Server string `json:"server" bson:"server" yaml:"server"` + ServerVersion string `json:"serverversion" bson:"serverversion" yaml:"serverversion"` + ServerAddrs []ServerAddr `json:"serveraddrs" bson:"serveraddrs" yaml:"serveraddrs"` + Peers []wgtypes.PeerConfig `json:"peers" bson:"peers" yaml:"peers"` + PeerIDs HostPeerMap `json:"peerids" bson:"peerids" yaml:"peerids"` + ProxyUpdate ProxyManagerPayload `json:"proxy_update" bson:"proxy_update" yaml:"proxy_update"` + EgressInfo map[string]EgressInfo `json:"egress_info" bson:"egress_info" yaml:"egress_info"` // map key is node ID + IngressInfo IngressInfo `json:"ingress_info" bson:"ext_peers" yaml:"ext_peers"` } // IngressInfo - struct for ingress info From 71f41fefb843a39fa75b4a7943041b31c2fa34cb Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Tue, 7 Feb 2023 16:03:22 -0500 Subject: [PATCH 18/46] string func for DNSUpdateAction --- models/dnsEntry.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/models/dnsEntry.go b/models/dnsEntry.go index cd1ea271..8993c00f 100644 --- a/models/dnsEntry.go +++ b/models/dnsEntry.go @@ -17,6 +17,10 @@ const ( DNSInsert ) +func (action DNSUpdateAction) String() string { + return [...]string{"DNSDeleteByIP", "DNSDeletByName", "DNSReplaceName", "DNSReplaceIP", "DNSInsert"}[action] +} + // DNSUpdate data for updating entries in /etc/hosts type DNSUpdate struct { Action DNSUpdateAction From 322bdb0af8ff5e26f97e7b2e80f60d5c2b4ab146 Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Wed, 8 Feb 2023 08:35:36 -0500 Subject: [PATCH 19/46] update dns mq topics to have four fields --- mq/publishers.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mq/publishers.go b/mq/publishers.go index da39d080..ccbca468 100644 --- a/mq/publishers.go +++ b/mq/publishers.go @@ -176,7 +176,7 @@ func PublishDNSUpdate(network string, dns models.DNSUpdate) error { if err != nil { logger.Log(0, "failed to encode dns data for node", node.ID.String(), err.Error()) } - if err := publish(host, "dns/"+host.ID.String()+"/"+servercfg.GetServer(), data); err != nil { + if err := publish(host, "dns/update/"+host.ID.String()+"/"+servercfg.GetServer(), data); err != nil { logger.Log(0, "error publishing dns update to host", host.ID.String(), err.Error()) continue } @@ -234,7 +234,7 @@ func PublishAllDNS(newnode *models.Node) error { if err != nil { return fmt.Errorf("error encoding dnd data %w", err) } - if err := publish(newnodeHost, "alldns/"+newnodeHost.ID.String()+"/"+servercfg.GetServer(), data); err != nil { + if err := publish(newnodeHost, "dns/all/"+newnodeHost.ID.String()+"/"+servercfg.GetServer(), data); err != nil { return fmt.Errorf("error publish full dns update to %s, %w", newnodeHost.ID.String(), err) } return nil From 8d6728bc4132a2d80f04b7987f1fd2b0a3f779db Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Wed, 8 Feb 2023 10:11:36 -0500 Subject: [PATCH 20/46] add network when publishing custom dns creation --- mq/publishers.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mq/publishers.go b/mq/publishers.go index ccbca468..8207608e 100644 --- a/mq/publishers.go +++ b/mq/publishers.go @@ -326,7 +326,7 @@ func PublishDeleteExtClientDNS(client *models.ExtClient) error { func PublishCustomDNS(entry *models.DNSEntry) error { dns := models.DNSUpdate{ Action: models.DNSInsert, - Name: entry.Name, + Name: entry.Name + "." + entry.Network, //entry.Address6 is never used Address: entry.Address, } From 88358f517c155301a72428cb816d54e411b6c352 Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Wed, 8 Feb 2023 10:33:27 -0500 Subject: [PATCH 21/46] include old/new ip in dnsupdate for node ip change --- mq/publishers.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mq/publishers.go b/mq/publishers.go index 8207608e..45785ab4 100644 --- a/mq/publishers.go +++ b/mq/publishers.go @@ -268,13 +268,15 @@ func PublishReplaceDNS(oldNode, newNode *models.Node, host *models.Host) error { Name: host.Name + "." + oldNode.Network, } if !oldNode.Address.IP.Equal(newNode.Address.IP) { - dns.Address = newNode.Address.IP.String() + dns.Address = oldNode.Address.IP.String() + dns.NewAddress = newNode.Address.IP.String() if err := PublishDNSUpdate(oldNode.Network, dns); err != nil { return err } } if !oldNode.Address6.IP.Equal(newNode.Address6.IP) { - dns.Address = newNode.Address6.IP.String() + dns.Address = oldNode.Address6.IP.String() + dns.NewAddress = newNode.Address6.IP.String() if err := PublishDNSUpdate(oldNode.Network, dns); err != nil { return err } From d4cd24e778a751537c365b41a81755544ecdf2af Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Wed, 8 Feb 2023 11:32:28 -0500 Subject: [PATCH 22/46] extclient update --- controllers/ext_client.go | 5 +---- mq/publishers.go | 13 +++++++++++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/controllers/ext_client.go b/controllers/ext_client.go index 83eb79db..b3c17790 100644 --- a/controllers/ext_client.go +++ b/controllers/ext_client.go @@ -497,10 +497,7 @@ func updateExtClient(w http.ResponseWriter, r *http.Request) { json.NewEncoder(w).Encode(newclient) if changedID { go func() { - if err := mq.PublishDeleteExtClientDNS(&oldExtClient); err != nil { - logger.Log(1, "error pubishing dns update for extcient update", err.Error()) - } - if err := mq.PublishExtCLientDNS(&newExtClient); err != nil { + if err := mq.PublishExtClientDNSUpdate(oldExtClient, newExtClient, networkName); err != nil { logger.Log(1, "error pubishing dns update for extcient update", err.Error()) } }() diff --git a/mq/publishers.go b/mq/publishers.go index 45785ab4..096f3ee0 100644 --- a/mq/publishers.go +++ b/mq/publishers.go @@ -312,6 +312,19 @@ func PublishExtCLientDNS(client *models.ExtClient) error { return nil } +// PublishExtClientUpdate publishes dns update for extclient name change +func PublishExtClientDNSUpdate(old, new models.ExtClient, network string) error { + dns := models.DNSUpdate{ + Action: models.DNSReplaceName, + Name: old.ClientID, + NewName: new.ClientID, + } + if err := PublishDNSUpdate(network, dns); err != nil { + return err + } + return nil +} + // PublishDeleteExtClient publish dns update to delete extclient entry func PublishDeleteExtClientDNS(client *models.ExtClient) error { dns := models.DNSUpdate{ From 543c2e9c9162795e6c19b97c33005bc47118a944 Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Wed, 8 Feb 2023 13:32:11 -0500 Subject: [PATCH 23/46] send correct existing name on extclient update --- controllers/ext_client.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/controllers/ext_client.go b/controllers/ext_client.go index b3c17790..aede9e6f 100644 --- a/controllers/ext_client.go +++ b/controllers/ext_client.go @@ -464,7 +464,6 @@ func updateExtClient(w http.ResponseWriter, r *http.Request) { return } } - if changedID && oldExtClient.OwnerID != "" { if err := pro.DissociateNetworkUserClient(oldExtClient.OwnerID, networkName, oldExtClient.ClientID); err != nil { logger.Log(0, "failed to dissociate client", oldExtClient.ClientID, "from user", oldExtClient.OwnerID) @@ -476,7 +475,8 @@ func updateExtClient(w http.ResponseWriter, r *http.Request) { // == END PRO == var changedEnabled = newExtClient.Enabled != oldExtClient.Enabled // indicates there was a change in enablement - + // extra var need as logic.Update changes oldExtClient + currentClient := oldExtClient newclient, err := logic.UpdateExtClient(newExtClient.ClientID, params["network"], newExtClient.Enabled, &oldExtClient) if err != nil { logger.Log(0, r.Header.Get("user"), @@ -497,7 +497,7 @@ func updateExtClient(w http.ResponseWriter, r *http.Request) { json.NewEncoder(w).Encode(newclient) if changedID { go func() { - if err := mq.PublishExtClientDNSUpdate(oldExtClient, newExtClient, networkName); err != nil { + if err := mq.PublishExtClientDNSUpdate(currentClient, newExtClient, networkName); err != nil { logger.Log(1, "error pubishing dns update for extcient update", err.Error()) } }() From 574583b3b17261ac18123e8b883f37381aa5218e Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Wed, 8 Feb 2023 13:50:34 -0500 Subject: [PATCH 24/46] include network on extcient dns update --- mq/publishers.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mq/publishers.go b/mq/publishers.go index 096f3ee0..d934791d 100644 --- a/mq/publishers.go +++ b/mq/publishers.go @@ -316,8 +316,8 @@ func PublishExtCLientDNS(client *models.ExtClient) error { func PublishExtClientDNSUpdate(old, new models.ExtClient, network string) error { dns := models.DNSUpdate{ Action: models.DNSReplaceName, - Name: old.ClientID, - NewName: new.ClientID, + Name: old.ClientID + "." + old.Network, + NewName: new.ClientID + "." + new.Network, } if err := PublishDNSUpdate(network, dns); err != nil { return err From e0478b9b54a5ac0278d9a4a8d6c060131efdd972 Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Wed, 8 Feb 2023 14:02:01 -0500 Subject: [PATCH 25/46] ensure network add to new extclient for dns update --- mq/publishers.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mq/publishers.go b/mq/publishers.go index d934791d..8cbf776d 100644 --- a/mq/publishers.go +++ b/mq/publishers.go @@ -316,8 +316,8 @@ func PublishExtCLientDNS(client *models.ExtClient) error { func PublishExtClientDNSUpdate(old, new models.ExtClient, network string) error { dns := models.DNSUpdate{ Action: models.DNSReplaceName, - Name: old.ClientID + "." + old.Network, - NewName: new.ClientID + "." + new.Network, + Name: old.ClientID + "." + network, + NewName: new.ClientID + "." + network, } if err := PublishDNSUpdate(network, dns); err != nil { return err @@ -329,7 +329,7 @@ func PublishExtClientDNSUpdate(old, new models.ExtClient, network string) error func PublishDeleteExtClientDNS(client *models.ExtClient) error { dns := models.DNSUpdate{ Action: models.DNSDeleteByName, - Name: client.ClientID, + Name: client.ClientID + "." + client.Network, } if err := PublishDNSUpdate(client.Network, dns); err != nil { return err From 0b0db1c0e8b865a97944ae2357bc765c970bb351 Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Thu, 9 Feb 2023 10:49:56 -0500 Subject: [PATCH 26/46] add network name to dns --- mq/publishers.go | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/mq/publishers.go b/mq/publishers.go index 8cbf776d..98f2cb8f 100644 --- a/mq/publishers.go +++ b/mq/publishers.go @@ -198,10 +198,6 @@ func PublishAllDNS(newnode *models.Node) error { return err } for _, node := range nodes { - if node.ID == newnode.ID { - //skip self - continue - } host, err := logic.GetHost(node.HostID.String()) if err != nil { logger.Log(0, "error retrieving host for dns update", host.ID.String(), err.Error()) @@ -220,6 +216,16 @@ func PublishAllDNS(newnode *models.Node) error { alldns = append(alldns, dns) } } + clients, err := logic.GetNetworkExtClients(newnode.Network) + if err != nil { + logger.Log(0, "error retrieving extclients", err.Error()) + } + for _, client := range clients { + dns.Action = models.DNSInsert + dns.Name = client.ClientID + "." + client.Network + dns.Address = client.Address + alldns = append(alldns, dns) + } entries, err := logic.GetCustomDNS(newnode.Network) if err != nil { logger.Log(0, "error retrieving custom dns entries", err.Error()) @@ -227,7 +233,7 @@ func PublishAllDNS(newnode *models.Node) error { for _, entry := range entries { dns.Action = models.DNSInsert dns.Address = entry.Address - dns.Name = entry.Name + dns.Name = entry.Name + "." + entry.Network alldns = append(alldns, dns) } data, err := json.Marshal(alldns) @@ -235,7 +241,7 @@ func PublishAllDNS(newnode *models.Node) error { return fmt.Errorf("error encoding dnd data %w", err) } if err := publish(newnodeHost, "dns/all/"+newnodeHost.ID.String()+"/"+servercfg.GetServer(), data); err != nil { - return fmt.Errorf("error publish full dns update to %s, %w", newnodeHost.ID.String(), err) + return fmt.Errorf("error publishing full dns update to %s, %w", newnodeHost.ID.String(), err) } return nil } From 98e66b729238455e0f23efc4fd7b70344b8cb363 Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Thu, 9 Feb 2023 11:20:50 -0500 Subject: [PATCH 27/46] include ipv6 for extclients --- mq/publishers.go | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/mq/publishers.go b/mq/publishers.go index 98f2cb8f..3179a9d7 100644 --- a/mq/publishers.go +++ b/mq/publishers.go @@ -203,15 +203,13 @@ func PublishAllDNS(newnode *models.Node) error { logger.Log(0, "error retrieving host for dns update", host.ID.String(), err.Error()) continue } + dns.Action = models.DNSInsert + dns.Name = host.Name + "." + node.Network if node.Address.IP != nil { - dns.Action = models.DNSInsert - dns.Name = host.Name + "." + node.Network dns.Address = node.Address.IP.String() alldns = append(alldns, dns) } if node.Address6.IP != nil { - dns.Action = models.DNSInsert - dns.Name = host.Name + "." + node.Network dns.Address = node.Address6.IP.String() alldns = append(alldns, dns) } @@ -223,17 +221,23 @@ func PublishAllDNS(newnode *models.Node) error { for _, client := range clients { dns.Action = models.DNSInsert dns.Name = client.ClientID + "." + client.Network - dns.Address = client.Address - alldns = append(alldns, dns) + if client.Address != "" { + dns.Address = client.Address + alldns = append(alldns, dns) + } + if client.Address6 != "" { + dns.Address = client.Address + alldns = append(alldns, dns) + } } - entries, err := logic.GetCustomDNS(newnode.Network) + customdns, err := logic.GetCustomDNS(newnode.Network) if err != nil { logger.Log(0, "error retrieving custom dns entries", err.Error()) } - for _, entry := range entries { + for _, custom := range customdns { dns.Action = models.DNSInsert - dns.Address = entry.Address - dns.Name = entry.Name + "." + entry.Network + dns.Address = custom.Address + dns.Name = custom.Name + "." + custom.Network alldns = append(alldns, dns) } data, err := json.Marshal(alldns) From c7338888e41e9faae58d864606c6813f92356a66 Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Fri, 10 Feb 2023 06:58:00 -0500 Subject: [PATCH 28/46] error handling --- controllers/hosts.go | 4 ++-- models/dnsEntry.go | 10 ++++++++++ mq/publishers.go | 39 ++++++++++++++------------------------- 3 files changed, 26 insertions(+), 27 deletions(-) diff --git a/controllers/hosts.go b/controllers/hosts.go index d8d350e5..57123071 100644 --- a/controllers/hosts.go +++ b/controllers/hosts.go @@ -112,9 +112,9 @@ func updateHost(w http.ResponseWriter, r *http.Request) { if newHost.Name != currHost.Name { networks := logic.GetHostNetworks(currHost.ID.String()) if err := mq.PublishHostDNSUpdate(currHost, newHost, networks); err != nil { - var dnsError *mq.DNSError + var dnsError *models.DNSError if errors.Is(err, dnsError) { - for _, message := range err.(mq.DNSError).ErrorStrings { + for _, message := range err.(models.DNSError).ErrorStrings { logger.Log(0, message) } } else { diff --git a/models/dnsEntry.go b/models/dnsEntry.go index 8993c00f..73373f1a 100644 --- a/models/dnsEntry.go +++ b/models/dnsEntry.go @@ -21,6 +21,16 @@ func (action DNSUpdateAction) String() string { return [...]string{"DNSDeleteByIP", "DNSDeletByName", "DNSReplaceName", "DNSReplaceIP", "DNSInsert"}[action] } +// DNSError.Error implementation of error interface +func (e DNSError) Error() string { + return "error publishing dns update" +} + +// DNSError error struct capable of holding multiple error messages +type DNSError struct { + ErrorStrings []string +} + // DNSUpdate data for updating entries in /etc/hosts type DNSUpdate struct { Action DNSUpdateAction diff --git a/mq/publishers.go b/mq/publishers.go index 3179a9d7..79a6ec50 100644 --- a/mq/publishers.go +++ b/mq/publishers.go @@ -296,7 +296,7 @@ func PublishReplaceDNS(oldNode, newNode *models.Node, host *models.Host) error { // PublishExtClientDNS publish dns update for new extclient func PublishExtCLientDNS(client *models.ExtClient) error { - var err4, err6 error + errMsgs := models.DNSError{} dns := models.DNSUpdate{ Action: models.DNSInsert, Name: client.ClientID + "." + client.Network, @@ -304,20 +304,19 @@ func PublishExtCLientDNS(client *models.ExtClient) error { } if client.Address != "" { dns.Address = client.Address - err4 = PublishDNSUpdate(client.Network, dns) + if err := PublishDNSUpdate(client.Network, dns); err != nil { + errMsgs.ErrorStrings = append(errMsgs.ErrorStrings, err.Error()) + } + } if client.Address6 != "" { dns.Address = client.Address6 - err6 = PublishDNSUpdate(client.Network, dns) + if err := PublishDNSUpdate(client.Network, dns); err != nil { + errMsgs.ErrorStrings = append(errMsgs.ErrorStrings, err.Error()) + } } - if err4 != nil && err6 != nil { - return fmt.Errorf("error publishing extclient dns update %w %w", err4, err6) - } - if err4 != nil { - return fmt.Errorf("error publishing extclient dns update %w", err4) - } - if err6 != nil { - return fmt.Errorf("error publishing extclient dns update %w", err6) + if len(errMsgs.ErrorStrings) > 0 { + return errMsgs } return nil } @@ -361,19 +360,9 @@ func PublishCustomDNS(entry *models.DNSEntry) error { return nil } -// DNSError error struct capable of holding multiple error messages -type DNSError struct { - ErrorStrings []string -} - -// DNSError.Error implementation of error interface -func (e DNSError) Error() string { - return "error publishing dns update" -} - // PublishHostDNSUpdate publishes dns update on host name change func PublishHostDNSUpdate(old, new *models.Host, networks []string) error { - errors := DNSError{} + errMsgs := models.DNSError{} for _, network := range networks { dns := models.DNSUpdate{ Action: models.DNSReplaceName, @@ -381,11 +370,11 @@ func PublishHostDNSUpdate(old, new *models.Host, networks []string) error { NewName: new.Name + "." + network, } if err := PublishDNSUpdate(network, dns); err != nil { - errors.ErrorStrings = append(errors.ErrorStrings, err.Error()) + errMsgs.ErrorStrings = append(errMsgs.ErrorStrings, err.Error()) } } - if len(errors.ErrorStrings) > 0 { - return errors + if len(errMsgs.ErrorStrings) > 0 { + return errMsgs } return nil } From 7c1784e74f32ed23a1bc37c75105ea59ec399a38 Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Fri, 10 Feb 2023 10:58:06 -0500 Subject: [PATCH 29/46] log message on succesful alldns publish --- mq/publishers.go | 1 + 1 file changed, 1 insertion(+) diff --git a/mq/publishers.go b/mq/publishers.go index 79a6ec50..15730dfd 100644 --- a/mq/publishers.go +++ b/mq/publishers.go @@ -247,6 +247,7 @@ func PublishAllDNS(newnode *models.Node) error { if err := publish(newnodeHost, "dns/all/"+newnodeHost.ID.String()+"/"+servercfg.GetServer(), data); err != nil { return fmt.Errorf("error publishing full dns update to %s, %w", newnodeHost.ID.String(), err) } + logger.Log(3, "published full dns update to %s", newnodeHost.ID.String()) return nil } From 6e061c49d05d7c57a9fd3e7f0c89e464d834c039 Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Fri, 10 Feb 2023 11:03:08 -0500 Subject: [PATCH 30/46] fix typo --- mq/publishers.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mq/publishers.go b/mq/publishers.go index 15730dfd..ffa2313e 100644 --- a/mq/publishers.go +++ b/mq/publishers.go @@ -242,7 +242,7 @@ func PublishAllDNS(newnode *models.Node) error { } data, err := json.Marshal(alldns) if err != nil { - return fmt.Errorf("error encoding dnd data %w", err) + return fmt.Errorf("error encoding dns data %w", err) } if err := publish(newnodeHost, "dns/all/"+newnodeHost.ID.String()+"/"+servercfg.GetServer(), data); err != nil { return fmt.Errorf("error publishing full dns update to %s, %w", newnodeHost.ID.String(), err) From 1d463148274a16cc3dc9d7e4647eae49bccfed46 Mon Sep 17 00:00:00 2001 From: disappointingsupernova <24361971+disappointingsupernova@users.noreply.github.com> Date: Sat, 11 Feb 2023 11:46:32 +0000 Subject: [PATCH 31/46] Update nm-quick-interactive.sh ifconfig.me is 403 on the hetzner network When trying to get IP i recevied a 403 from ifconfig.me when using hetzner cloud --- scripts/nm-quick-interactive.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/nm-quick-interactive.sh b/scripts/nm-quick-interactive.sh index 180e6a09..0b6ec8a2 100644 --- a/scripts/nm-quick-interactive.sh +++ b/scripts/nm-quick-interactive.sh @@ -184,9 +184,9 @@ wait_seconds 3 set -e -NETMAKER_BASE_DOMAIN=nm.$(curl -s ifconfig.me | tr . -).nip.io +NETMAKER_BASE_DOMAIN=nm.$(dig myip.opendns.com @resolver1.opendns.com +short | tr . -).nip.io COREDNS_IP=$(ip route get 1 | sed -n 's/^.*src \([0-9.]*\) .*$/\1/p') -SERVER_PUBLIC_IP=$(curl -s ifconfig.me) +SERVER_PUBLIC_IP=$(dig myip.opendns.com @resolver1.opendns.com +short) MASTER_KEY=$(tr -dc A-Za-z0-9 Date: Mon, 13 Feb 2023 19:54:38 +0400 Subject: [PATCH 32/46] add routes for all ext clients in the network --- logic/peers.go | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/logic/peers.go b/logic/peers.go index 6ee93534..482d5e20 100644 --- a/logic/peers.go +++ b/logic/peers.go @@ -395,7 +395,21 @@ func GetPeerUpdateForHost(host *models.Host) (models.HostPeerUpdate, error) { } peerConfig.AllowedIPs = allowedips if node.IsIngressGateway || node.IsEgressGateway { - + if peer.IsIngressGateway { + _, extPeerIDAndAddrs, err := getExtPeers(&peer) + if err == nil { + for _, extPeerIdAndAddr := range extPeerIDAndAddrs { + nodePeerMap[extPeerIdAndAddr.ID] = models.PeerRouteInfo{ + PeerAddr: net.IPNet{ + IP: net.ParseIP(extPeerIdAndAddr.Address), + Mask: getCIDRMaskFromAddr(extPeerIdAndAddr.Address), + }, + PeerKey: extPeerIdAndAddr.ID, + Allow: true, + } + } + } + } nodePeerMap[peerHost.PublicKey.String()] = models.PeerRouteInfo{ PeerAddr: net.IPNet{ IP: net.ParseIP(peer.PrimaryAddress()), From 4c373af9ec8ca7dfa93c3f88527bbd75d0c58443 Mon Sep 17 00:00:00 2001 From: Abhishek Kondur Date: Mon, 13 Feb 2023 20:09:21 +0400 Subject: [PATCH 33/46] add egress ranges to ingress info --- logic/peers.go | 22 +++++++++++++--------- models/mqtt.go | 3 ++- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/logic/peers.go b/logic/peers.go index 482d5e20..05628d88 100644 --- a/logic/peers.go +++ b/logic/peers.go @@ -201,7 +201,7 @@ func GetProxyUpdateForHost(host *models.Host) (models.ProxyManagerPayload, error if host.IsRelayed { relayHost, err := GetHost(host.RelayedBy) if err == nil { - relayEndpoint, err := net.ResolveUDPAddr("udp", fmt.Sprintf("%s:%d", relayHost.EndpointIP, getPeerListenPort(relayHost))) + relayEndpoint, err := net.ResolveUDPAddr("udp", fmt.Sprintf("%s:%d", relayHost.EndpointIP, GetPeerListenPort(relayHost))) if err != nil { logger.Log(1, "failed to resolve relay node endpoint: ", err.Error()) } @@ -219,7 +219,7 @@ func GetProxyUpdateForHost(host *models.Host) (models.ProxyManagerPayload, error relayedHost := relayedHost payload, err := GetPeerUpdateForHost(&relayedHost) if err == nil { - relayedEndpoint, udpErr := net.ResolveUDPAddr("udp", fmt.Sprintf("%s:%d", relayedHost.EndpointIP, getPeerListenPort(&relayedHost))) + relayedEndpoint, udpErr := net.ResolveUDPAddr("udp", fmt.Sprintf("%s:%d", relayedHost.EndpointIP, GetPeerListenPort(&relayedHost))) if udpErr == nil { relayPeersMap[relayedHost.PublicKey.String()] = models.RelayedConf{ RelayedPeerEndpoint: relayedEndpoint, @@ -259,14 +259,14 @@ func GetProxyUpdateForHost(host *models.Host) (models.ProxyManagerPayload, error if currPeerConf, found = peerConfMap[peerHost.PublicKey.String()]; !found { currPeerConf = models.PeerConf{ Proxy: peerHost.ProxyEnabled, - PublicListenPort: int32(getPeerListenPort(peerHost)), + PublicListenPort: int32(GetPeerListenPort(peerHost)), } } if peerHost.IsRelayed && peerHost.RelayedBy != host.ID.String() { relayHost, err := GetHost(peerHost.RelayedBy) if err == nil { - relayTo, err := net.ResolveUDPAddr("udp", fmt.Sprintf("%s:%d", relayHost.EndpointIP, getPeerListenPort(relayHost))) + relayTo, err := net.ResolveUDPAddr("udp", fmt.Sprintf("%s:%d", relayHost.EndpointIP, GetPeerListenPort(relayHost))) if err == nil { currPeerConf.IsRelayed = true currPeerConf.RelayedTo = relayTo @@ -375,7 +375,7 @@ func GetPeerUpdateForHost(host *models.Host) (models.HostPeerUpdate, error) { } peerConfig.Endpoint = &net.UDPAddr{ IP: peerHost.EndpointIP, - Port: getPeerListenPort(peerHost), + Port: GetPeerListenPort(peerHost), } if uselocal { @@ -410,6 +410,10 @@ func GetPeerUpdateForHost(host *models.Host) (models.HostPeerUpdate, error) { } } } + if node.IsIngressGateway && peer.IsEgressGateway { + hostPeerUpdate.IngressInfo.EgressRanges = append(hostPeerUpdate.IngressInfo.EgressRanges, + peer.EgressGatewayRanges...) + } nodePeerMap[peerHost.PublicKey.String()] = models.PeerRouteInfo{ PeerAddr: net.IPNet{ IP: net.ParseIP(peer.PrimaryAddress()), @@ -504,7 +508,7 @@ func GetPeerUpdateForHost(host *models.Host) (models.HostPeerUpdate, error) { return hostPeerUpdate, nil } -func getPeerListenPort(host *models.Host) int { +func GetPeerListenPort(host *models.Host) int { peerPort := host.ListenPort if host.ProxyEnabled { if host.PublicListenPort != 0 { @@ -574,7 +578,7 @@ func GetPeerUpdate(node *models.Node, host *models.Host) (models.PeerUpdate, err Port: peerHost.ListenPort, } if peerHost.ProxyEnabled { - peerConfig.Endpoint.Port = getPeerListenPort(peerHost) + peerConfig.Endpoint.Port = GetPeerListenPort(peerHost) } if uselocal { peerConfig.Endpoint.IP = peer.LocalAddress.IP @@ -707,7 +711,7 @@ func GetPeerUpdateLegacy(node *models.Node) (models.PeerUpdate, error) { if node.LocalAddress.String() != peer.LocalAddress.String() && peer.LocalAddress.IP != nil { peerHost.EndpointIP = peer.LocalAddress.IP if peerHost.ListenPort != 0 { - peerHost.ListenPort = getPeerListenPort(peerHost) + peerHost.ListenPort = GetPeerListenPort(peerHost) } } else { continue @@ -740,7 +744,7 @@ func GetPeerUpdateLegacy(node *models.Node) (models.PeerUpdate, error) { // or, if port is for some reason zero use the LocalListenPort // but only do this if LocalListenPort is not zero if ((!setUDPPort) || peerHost.ListenPort == 0) && peerHost.ListenPort != 0 { - peerHost.ListenPort = getPeerListenPort(peerHost) + peerHost.ListenPort = GetPeerListenPort(peerHost) } endpoint := peerHost.EndpointIP.String() + ":" + strconv.FormatInt(int64(peerHost.ListenPort), 10) diff --git a/models/mqtt.go b/models/mqtt.go index 823872a6..036c6d3e 100644 --- a/models/mqtt.go +++ b/models/mqtt.go @@ -33,7 +33,8 @@ type HostPeerUpdate struct { // IngressInfo - struct for ingress info type IngressInfo struct { - ExtPeers map[string]ExtClientInfo `json:"ext_peers" yaml:"ext_peers"` + ExtPeers map[string]ExtClientInfo `json:"ext_peers" yaml:"ext_peers"` + EgressRanges []string `json:"egress_ranges" yaml:"egress_ranges"` } // EgressInfo - struct for egress info From c3e253fb7933e4475241f8f8d6889ecb0f5cf8c9 Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Mon, 13 Feb 2023 14:52:39 -0500 Subject: [PATCH 34/46] updates to zombie processing --- logic/hosts.go | 1 + logic/nodes.go | 4 +-- logic/zombie.go | 75 +++++++++++++++++++++++++++++++++---------------- 3 files changed, 54 insertions(+), 26 deletions(-) diff --git a/logic/hosts.go b/logic/hosts.go index 4fb349ed..68970b28 100644 --- a/logic/hosts.go +++ b/logic/hosts.go @@ -96,6 +96,7 @@ func CreateHost(h *models.Host) error { return err } h.HostPass = string(hash) + checkForZombieHosts(h) return UpsertHost(h) } diff --git a/logic/nodes.go b/logic/nodes.go index 0e30cea9..db9f1e8f 100644 --- a/logic/nodes.go +++ b/logic/nodes.go @@ -91,7 +91,7 @@ func DeleteNode(node *models.Node, purge bool) error { if err := UpdateNode(node, &newnode); err != nil { return err } - newZombie <- node.ID + zombies = append(zombies, node.ID) return nil } host, err := GetHost(node.HostID.String()) @@ -534,7 +534,7 @@ func createNode(node *models.Node) error { if err != nil { return err } - CheckZombies(node, host.MacAddress) + CheckZombies(node) nodebytes, err := json.Marshal(&node) if err != nil { diff --git a/logic/zombie.go b/logic/zombie.go index 3b0abfb9..cd1dd307 100644 --- a/logic/zombie.go +++ b/logic/zombie.go @@ -2,7 +2,6 @@ package logic import ( "context" - "net" "time" "github.com/google/uuid" @@ -18,15 +17,14 @@ const ( ) var ( - zombies []uuid.UUID - removeZombie chan uuid.UUID = make(chan (uuid.UUID), 10) - newZombie chan uuid.UUID = make(chan (uuid.UUID), 10) + zombies []uuid.UUID + hostZombies []uuid.UUID ) -// CheckZombies - checks if new node has same macaddress as existing node +// CheckZombies - checks if new node has same hostid as existing node // if so, existing node is added to zombie node quarantine list // also cleans up nodes past their expiration date -func CheckZombies(newnode *models.Node, mac net.HardwareAddr) { +func CheckZombies(newnode *models.Node) { nodes, err := GetNetworkNodes(newnode.Network) if err != nil { logger.Log(1, "Failed to retrieve network nodes", newnode.Network, err.Error()) @@ -39,7 +37,36 @@ func CheckZombies(newnode *models.Node, mac net.HardwareAddr) { } if node.HostID == newnode.HostID || time.Now().After(node.ExpirationDateTime) { logger.Log(0, "adding ", node.ID.String(), " to zombie list") - newZombie <- node.ID + zombies = append(zombies, node.ID) + } + } +} + +// checkForZombieHosts - checks if new host has the same macAddress as an existing host +// if true, existing host is added to host zombie collection +func checkForZombieHosts(h *models.Host) { + hosts, err := GetAllHosts() + if err != nil { + logger.Log(3, "errror retrieving all hosts", err.Error()) + } + for _, existing := range hosts { + if existing.ID == h.ID { + //probably an unnecessary check as new host should not be in database yet, but just in case + //skip self + continue + } + if existing.MacAddress.String() == h.MacAddress.String() { + //add to hostZombies + hostZombies = append(hostZombies, existing.ID) + //add all nodes belonging to host to zombile list + for _, node := range existing.Nodes { + id, err := uuid.Parse(node) + if err != nil { + logger.Log(3, "error parsing uuid from host.Nodes", err.Error()) + continue + } + zombies = append(zombies, id) + } } } } @@ -52,23 +79,6 @@ func ManageZombies(ctx context.Context, peerUpdate chan *models.Node) { select { case <-ctx.Done(): return - case id := <-newZombie: - logger.Log(1, "adding", id.String(), "to zombie quaratine list") - zombies = append(zombies, id) - case id := <-removeZombie: - found := false - if len(zombies) > 0 { - for i := len(zombies) - 1; i >= 0; i-- { - if zombies[i] == id { - logger.Log(1, "removing zombie from quaratine list", zombies[i].String()) - zombies = append(zombies[:i], zombies[i+1:]...) - found = true - } - } - } - if !found { - logger.Log(3, "no zombies found") - } case <-time.After(time.Second * ZOMBIE_TIMEOUT): logger.Log(3, "checking for zombie nodes") if len(zombies) > 0 { @@ -92,6 +102,23 @@ func ManageZombies(ctx context.Context, peerUpdate chan *models.Node) { } } } + if len(hostZombies) > 0 { + logger.Log(3, "checking host zombies") + for i := len(hostZombies) - 1; i >= 0; i-- { + host, err := GetHost(hostZombies[i].String()) + if err != nil { + logger.Log(1, "error retrieving zombie host", err.Error()) + logger.Log(1, "deleting ", host.ID.String(), " from zombie list") + zombies = append(zombies[:i], zombies[i+1:]...) + continue + } + if len(host.Nodes) == 0 { + if err := RemoveHost(host); err != nil { + logger.Log(0, "error deleting zombie host", host.ID.String(), err.Error()) + } + } + } + } } } } From 559ee27fbcf1299c5899a545b88ca67ebbd9c4c0 Mon Sep 17 00:00:00 2001 From: afeiszli Date: Mon, 13 Feb 2023 16:30:03 -0500 Subject: [PATCH 35/46] modifying script for production --- scripts/nm-quick-interactive.sh | 74 +++++++++++++++++++++++---------- 1 file changed, 51 insertions(+), 23 deletions(-) diff --git a/scripts/nm-quick-interactive.sh b/scripts/nm-quick-interactive.sh index baa9e875..f28eb735 100644 --- a/scripts/nm-quick-interactive.sh +++ b/scripts/nm-quick-interactive.sh @@ -1,5 +1,44 @@ #!/bin/bash +# setup_netclient - installs netclient locally +setup_netclient() { + if [ -f /etc/debian_version ]; then + curl -sL 'https://apt.netmaker.org/gpg.key' | sudo tee /etc/apt/trusted.gpg.d/netclient.asc + curl -sL 'https://apt.netmaker.org/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/netclient.list + sudo apt update + sudo apt install netclient + elif [ -f /etc/centos-release ]; then + curl -sL 'https://rpm.netmaker.org/gpg.key' | sudo tee /tmp/gpg.key + curl -sL 'https://rpm.netmaker.org/netclient-repo' | sudo tee /etc/yum.repos.d/netclient.repo + sudo rpm --import /tmp/gpg.key + sudo dnf check-update + sudo dnf install netclient + elif [ -f /etc/fedora-release ]; then + curl -sL 'https://rpm.netmaker.org/gpg.key' | sudo tee /tmp/gpg.key + curl -sL 'https://rpm.netmaker.org/netclient-repo' | sudo tee /etc/yum.repos.d/netclient.repo + sudo rpm --import /tmp/gpg.key + sudo dnf check-update + sudo dnf install netclient + elif [ -f /etc/redhat-release ]; then + curl -sL 'https://rpm.netmaker.org/gpg.key' | sudo tee /tmp/gpg.key + curl -sL 'https://rpm.netmaker.org/netclient-repo' | sudo tee /etc/yum.repos.d/netclient.repo + sudo rpm --import /tmp/gpg.key + sudo dnf check-update( + sudo dnf install netclient + elif [ -f /etc/arch-release ]; then + yay -S netclient + else + echo "OS not supported for automatic install" + exit 1 + fi + + if [ -z "${install_cmd}" ]; then + echo "OS unsupported for automatic dependency install" + exit 1 + fi +} + + cat << "EOF" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -409,33 +448,22 @@ ACCESS_TOKEN=$(jq -r '.accessstring' <<< ${curlresponse}) wait_seconds 3 -echo "Configuring netmaker server as ingress gateway" +echo "Installing Netclient" +setup_netclient -for i in 1 2 3 4 5 6 -do - echo " waiting for server node to become available" - wait_seconds 10 - curlresponse=$(curl -s -H "Authorization: Bearer $MASTER_KEY" -H 'Content-Type: application/json' https://api.${NETMAKER_BASE_DOMAIN}/api/nodes/netmaker) - SERVER_ID=$(jq -r '.[0].id' <<< ${curlresponse}) - echo " Server ID: $SERVER_ID" - if [ $SERVER_ID == "null" ]; then - SERVER_ID="" - fi - if [[ "$i" -ge "6" && -z "$SERVER_ID" ]]; then - echo " Netmaker is having issues configuring itself, please investigate (docker logs netmaker)" - echo " Exiting..." - exit 1 - elif [ -z "$SERVER_ID" ]; then - echo " server node not yet configured, retrying..." - elif [[ ! -z "$SERVER_ID" ]]; then - echo " server node is now availble, continuing" - break - fi -done +echo "Adding Netclient to Network" +netclient join -t $ACCESS_TOKEN +# TODO - Get Host ID +echo "Setting Netclient as Default Host" +HOST_ID=$(grep 'id:' /etc/netclient/netclient.yml | awk '{print $2}') +echo $HOST_ID +# TODO - API call to make host default + +echo "Setting Netclient as Ingress Gateway" if [[ ! -z "$SERVER_ID" ]]; then - curl -o /dev/null -s -X POST -H "Authorization: Bearer $MASTER_KEY" -H 'Content-Type: application/json' https://api.${NETMAKER_BASE_DOMAIN}/api/nodes/netmaker/$SERVER_ID/createingress + curl -o /dev/null -s -X POST -H "Authorization: Bearer $MASTER_KEY" -H 'Content-Type: application/json' https://api.${NETMAKER_BASE_DOMAIN}/api/nodes/netmaker/$HOST_ID/createingress fi )} From e328f034138cf3ab9e059582d34319e6b091a914 Mon Sep 17 00:00:00 2001 From: afeiszli Date: Mon, 13 Feb 2023 16:33:31 -0500 Subject: [PATCH 36/46] commenting out netclient installation --- scripts/nm-quick-interactive.sh | 102 ++++++++++++++++++-------------- 1 file changed, 56 insertions(+), 46 deletions(-) diff --git a/scripts/nm-quick-interactive.sh b/scripts/nm-quick-interactive.sh index f28eb735..3848835c 100644 --- a/scripts/nm-quick-interactive.sh +++ b/scripts/nm-quick-interactive.sh @@ -2,40 +2,47 @@ # setup_netclient - installs netclient locally setup_netclient() { - if [ -f /etc/debian_version ]; then - curl -sL 'https://apt.netmaker.org/gpg.key' | sudo tee /etc/apt/trusted.gpg.d/netclient.asc - curl -sL 'https://apt.netmaker.org/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/netclient.list - sudo apt update - sudo apt install netclient - elif [ -f /etc/centos-release ]; then - curl -sL 'https://rpm.netmaker.org/gpg.key' | sudo tee /tmp/gpg.key - curl -sL 'https://rpm.netmaker.org/netclient-repo' | sudo tee /etc/yum.repos.d/netclient.repo - sudo rpm --import /tmp/gpg.key - sudo dnf check-update - sudo dnf install netclient - elif [ -f /etc/fedora-release ]; then - curl -sL 'https://rpm.netmaker.org/gpg.key' | sudo tee /tmp/gpg.key - curl -sL 'https://rpm.netmaker.org/netclient-repo' | sudo tee /etc/yum.repos.d/netclient.repo - sudo rpm --import /tmp/gpg.key - sudo dnf check-update - sudo dnf install netclient - elif [ -f /etc/redhat-release ]; then - curl -sL 'https://rpm.netmaker.org/gpg.key' | sudo tee /tmp/gpg.key - curl -sL 'https://rpm.netmaker.org/netclient-repo' | sudo tee /etc/yum.repos.d/netclient.repo - sudo rpm --import /tmp/gpg.key - sudo dnf check-update( - sudo dnf install netclient - elif [ -f /etc/arch-release ]; then - yay -S netclient - else - echo "OS not supported for automatic install" - exit 1 - fi - if [ -z "${install_cmd}" ]; then - echo "OS unsupported for automatic dependency install" - exit 1 - fi + # DEV_TEMP - Temporary instructions for testing + # wget https://fileserver.netmaker.org/testing/netclient + # chmod +x netclient + # ./netclient install + + # RELEASE_REPLACE - Use this once release is ready + # if [ -f /etc/debian_version ]; then + # curl -sL 'https://apt.netmaker.org/gpg.key' | sudo tee /etc/apt/trusted.gpg.d/netclient.asc + # curl -sL 'https://apt.netmaker.org/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/netclient.list + # sudo apt update + # sudo apt install netclient + # elif [ -f /etc/centos-release ]; then + # curl -sL 'https://rpm.netmaker.org/gpg.key' | sudo tee /tmp/gpg.key + # curl -sL 'https://rpm.netmaker.org/netclient-repo' | sudo tee /etc/yum.repos.d/netclient.repo + # sudo rpm --import /tmp/gpg.key + # sudo dnf check-update + # sudo dnf install netclient + # elif [ -f /etc/fedora-release ]; then + # curl -sL 'https://rpm.netmaker.org/gpg.key' | sudo tee /tmp/gpg.key + # curl -sL 'https://rpm.netmaker.org/netclient-repo' | sudo tee /etc/yum.repos.d/netclient.repo + # sudo rpm --import /tmp/gpg.key + # sudo dnf check-update + # sudo dnf install netclient + # elif [ -f /etc/redhat-release ]; then + # curl -sL 'https://rpm.netmaker.org/gpg.key' | sudo tee /tmp/gpg.key + # curl -sL 'https://rpm.netmaker.org/netclient-repo' | sudo tee /etc/yum.repos.d/netclient.repo + # sudo rpm --import /tmp/gpg.key + # sudo dnf check-update( + # sudo dnf install netclient + # elif [ -f /etc/arch-release ]; then + # yay -S netclient + # else + # echo "OS not supported for automatic install" + # exit 1 + # fi + + # if [ -z "${install_cmd}" ]; then + # echo "OS unsupported for automatic dependency install" + # exit 1 + # fi } @@ -448,25 +455,28 @@ ACCESS_TOKEN=$(jq -r '.accessstring' <<< ${curlresponse}) wait_seconds 3 -echo "Installing Netclient" -setup_netclient +# echo "Installing Netclient" +# setup_netclient -echo "Adding Netclient to Network" -netclient join -t $ACCESS_TOKEN +# echo "Adding Netclient to Network" +# netclient join -t $ACCESS_TOKEN -# TODO - Get Host ID +# # TODO - Get Host ID -echo "Setting Netclient as Default Host" -HOST_ID=$(grep 'id:' /etc/netclient/netclient.yml | awk '{print $2}') -echo $HOST_ID -# TODO - API call to make host default -echo "Setting Netclient as Ingress Gateway" -if [[ ! -z "$SERVER_ID" ]]; then - curl -o /dev/null -s -X POST -H "Authorization: Bearer $MASTER_KEY" -H 'Content-Type: application/json' https://api.${NETMAKER_BASE_DOMAIN}/api/nodes/netmaker/$HOST_ID/createingress -fi +# echo "Setting Netclient as Default Host" +# HOST_ID=$(grep 'id:' /etc/netclient/netclient.yml | awk '{print $2}') +# echo $HOST_ID +# # TODO - API call to make host default + +# echo "Setting Netclient as Ingress Gateway" +# if [[ ! -z "$SERVER_ID" ]]; then +# curl -o /dev/null -s -X POST -H "Authorization: Bearer $MASTER_KEY" -H 'Content-Type: application/json' https://api.${NETMAKER_BASE_DOMAIN}/api/nodes/netmaker/$HOST_ID/createingress +# fi )} + + set +e test_connection From f9bf2b69d81eb386fc08a55f0cee9bd022079cca Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Feb 2023 21:54:48 +0000 Subject: [PATCH 37/46] Bump github.com/go-playground/validator/v10 from 10.11.1 to 10.11.2 Bumps [github.com/go-playground/validator/v10](https://github.com/go-playground/validator) from 10.11.1 to 10.11.2. - [Release notes](https://github.com/go-playground/validator/releases) - [Commits](https://github.com/go-playground/validator/compare/v10.11.1...v10.11.2) --- updated-dependencies: - dependency-name: github.com/go-playground/validator/v10 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- go.mod | 9 ++++----- go.sum | 38 ++++++++++---------------------------- 2 files changed, 14 insertions(+), 33 deletions(-) diff --git a/go.mod b/go.mod index f76fcbfd..ba5b46a3 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.19 require ( github.com/eclipse/paho.mqtt.golang v1.4.2 - github.com/go-playground/validator/v10 v10.11.1 + github.com/go-playground/validator/v10 v10.11.2 github.com/golang-jwt/jwt/v4 v4.4.3 github.com/google/uuid v1.3.0 github.com/gorilla/handlers v1.5.1 @@ -15,7 +15,7 @@ require ( github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e github.com/stretchr/testify v1.8.1 github.com/txn2/txeh v1.3.0 - golang.org/x/crypto v0.3.0 + golang.org/x/crypto v0.5.0 golang.org/x/net v0.5.0 // indirect golang.org/x/oauth2 v0.4.0 golang.org/x/sys v0.4.0 // indirect @@ -29,7 +29,6 @@ require ( require ( filippo.io/edwards25519 v1.0.0 github.com/c-robinson/iplib v1.0.6 - github.com/go-ping/ping v1.1.0 github.com/posthog/posthog-go v0.0.0-20211028072449-93c17c49e2b0 ) @@ -60,8 +59,8 @@ require ( cloud.google.com/go/compute v1.12.1 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/felixge/httpsnoop v1.0.3 // indirect - github.com/go-playground/locales v0.14.0 // indirect - github.com/go-playground/universal-translator v0.18.0 // indirect + github.com/go-playground/locales v0.14.1 // indirect + github.com/go-playground/universal-translator v0.18.1 // indirect github.com/golang/protobuf v1.5.2 // indirect github.com/google/go-cmp v0.5.9 // indirect github.com/hashicorp/go-version v1.6.0 diff --git a/go.sum b/go.sum index 1a390675..24c83d75 100644 --- a/go.sum +++ b/go.sum @@ -17,7 +17,6 @@ github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3Ee github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -29,16 +28,13 @@ github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSw github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/go-jose/go-jose/v3 v3.0.0 h1:s6rrhirfEP/CGIoc6p+PZAeogN2SxKav6Wp7+dyMWVo= github.com/go-jose/go-jose/v3 v3.0.0/go.mod h1:RNkWWRld676jZEYoV3+XK8L2ZnNSvIsxFMht0mSX+u8= -github.com/go-ping/ping v1.1.0 h1:3MCGhVX4fyEUuhsfwPrsEdQw6xspHkv5zHsiSoDFZYw= -github.com/go-ping/ping v1.1.0/go.mod h1:xIFjORFzTxqIV/tDVGO4eDy/bLuSyawEeojSm3GfRGk= -github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= -github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= -github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= -github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= -github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= -github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= -github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= +github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= +github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= +github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= +github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= +github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= +github.com/go-playground/validator/v10 v10.11.2 h1:q3SHpufmypg+erIExEKUmsgmhDTyhcJ38oeKGACXohU= +github.com/go-playground/validator/v10 v10.11.2/go.mod h1:NieE624vt4SCTJtD87arVLvdmjPAeV8BQlHtMnw9D7s= github.com/golang-jwt/jwt/v4 v4.4.3 h1:Hxl6lhQFj4AnOX6MLrsCb/+7tCj7DxP7VA+2rDIq5AU= github.com/golang-jwt/jwt/v4 v4.4.3/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -52,7 +48,6 @@ github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8 github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= @@ -73,13 +68,10 @@ github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLf github.com/josharian/native v1.0.0 h1:Ts/E8zCSEsG17dUqv7joXJFybuMLjQfWE04tsBODTxk= github.com/josharian/native v1.0.0/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= @@ -106,7 +98,6 @@ github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -116,9 +107,7 @@ github.com/posthog/posthog-go v0.0.0-20211028072449-93c17c49e2b0/go.mod h1:oa2sA github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= -github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= github.com/rqlite/gorqlite v0.0.0-20210514125552-08ff1e76b22f h1:BSnJgAfHzEp7o8PYJ7YfwAVHhqu7BYUTggcn/LGlUWY= github.com/rqlite/gorqlite v0.0.0-20210514125552-08ff1e76b22f/go.mod h1:UW/gxgQwSePTvL1KA8QEHsXeYHP4xkoXgbDdN781p34= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= @@ -160,10 +149,9 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220208050332-20e1d8d225ab/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.3.0 h1:a06MkbcxBrEFc0w0QIZWXrH/9cCX6KJyWbBOIwAn+7A= -golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= +golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE= +golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= @@ -172,7 +160,6 @@ golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200425230154-ff2c4b7c35a0/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210928044308-7d9f5e0b762b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211111083644-e5c967477495/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -195,10 +182,8 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211110154304-99a53858aa08/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -244,11 +229,8 @@ google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqw gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gortc.io/stun v1.23.0 h1:CpRQFjakCZMwVKTwInKbcCzlBklj62LGzD3NPdFyGrE= From 24c0ca04e4120f74cc7835bc80fd2d79580c66d3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Feb 2023 22:06:45 +0000 Subject: [PATCH 38/46] Bump golang.org/x/crypto from 0.3.0 to 0.6.0 Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.3.0 to 0.6.0. - [Release notes](https://github.com/golang/crypto/releases) - [Commits](https://github.com/golang/crypto/compare/v0.3.0...v0.6.0) --- updated-dependencies: - dependency-name: golang.org/x/crypto dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 8 ++++---- go.sum | 16 ++++++++-------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/go.mod b/go.mod index ba5b46a3..f62b1664 100644 --- a/go.mod +++ b/go.mod @@ -15,11 +15,11 @@ require ( github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e github.com/stretchr/testify v1.8.1 github.com/txn2/txeh v1.3.0 - golang.org/x/crypto v0.5.0 - golang.org/x/net v0.5.0 // indirect + golang.org/x/crypto v0.6.0 + golang.org/x/net v0.6.0 // indirect golang.org/x/oauth2 v0.4.0 - golang.org/x/sys v0.4.0 // indirect - golang.org/x/text v0.6.0 // indirect + golang.org/x/sys v0.5.0 // indirect + golang.org/x/text v0.7.0 // indirect golang.zx2c4.com/wireguard v0.0.0-20220920152132-bb719d3a6e2c // indirect golang.zx2c4.com/wireguard/wgctrl v0.0.0-20220324164955-056925b7df31 google.golang.org/protobuf v1.28.1 // indirect diff --git a/go.sum b/go.sum index 24c83d75..ea6eba8f 100644 --- a/go.sum +++ b/go.sum @@ -150,8 +150,8 @@ golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220208050332-20e1d8d225ab/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE= -golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= +golang.org/x/crypto v0.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc= +golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= @@ -167,8 +167,8 @@ golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= -golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw= -golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= +golang.org/x/net v0.6.0 h1:L4ZwwTvKW9gr0ZMS1yrHD9GZhIuVjOBBnaKH+SPQK0Q= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/oauth2 v0.3.0/go.mod h1:rQrIauxkUhJ6CuwEXwymO2/eh4xz2ZWF1nBkcxS+tGk= golang.org/x/oauth2 v0.4.0 h1:NF0gk8LVPg1Ml7SSbGyySuoxdsXitj7TvgvuRxIMc/M= golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= @@ -193,8 +193,8 @@ golang.org/x/sys v0.0.0-20220207234003-57398862261d/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= -golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= @@ -204,8 +204,8 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k= -golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= From 52db911681d6d1cc602c70e3a4075aa8cff7e2f8 Mon Sep 17 00:00:00 2001 From: Anish Mukherjee Date: Tue, 14 Feb 2023 16:41:00 +0530 Subject: [PATCH 39/46] remove dev log --- stun-server/stun-server.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/stun-server/stun-server.go b/stun-server/stun-server.go index aa80246e..7e4b768e 100644 --- a/stun-server/stun-server.go +++ b/stun-server/stun-server.go @@ -3,7 +3,6 @@ package stunserver import ( "context" "fmt" - "log" "net" "os" "os/signal" @@ -71,7 +70,6 @@ func (s *Server) serveConn(c net.PacketConn, res, req *stun.Message) error { logger.Log(1, "ReadFrom: %v", err.Error()) return nil } - log.Printf("read %d bytes from %s\n", n, addr) if _, err = req.Write(buf[:n]); err != nil { logger.Log(1, "Write: %v", err.Error()) return err From 6a03947384dca18c3ad06c8a5bad6f59c61271c0 Mon Sep 17 00:00:00 2001 From: Anish Mukherjee Date: Tue, 14 Feb 2023 17:25:22 +0530 Subject: [PATCH 40/46] update host network modification endpoints --- cli/cmd/host/add_network.go | 20 ++++++++++++++++++++ cli/cmd/host/delete_network.go | 20 ++++++++++++++++++++ cli/cmd/host/update_networks.go | 22 ---------------------- cli/functions/host.go | 13 ++++++++----- 4 files changed, 48 insertions(+), 27 deletions(-) create mode 100644 cli/cmd/host/add_network.go create mode 100644 cli/cmd/host/delete_network.go delete mode 100644 cli/cmd/host/update_networks.go diff --git a/cli/cmd/host/add_network.go b/cli/cmd/host/add_network.go new file mode 100644 index 00000000..44bbb5e3 --- /dev/null +++ b/cli/cmd/host/add_network.go @@ -0,0 +1,20 @@ +package host + +import ( + "github.com/gravitl/netmaker/cli/functions" + "github.com/spf13/cobra" +) + +var addHostNetworkCmd = &cobra.Command{ + Use: "add_network HostID Network", + Args: cobra.ExactArgs(2), + Short: "Add a network to a host", + Long: `Add a network to a host`, + Run: func(cmd *cobra.Command, args []string) { + functions.PrettyPrint(functions.AddHostToNetwork(args[0], args[1])) + }, +} + +func init() { + rootCmd.AddCommand(addHostNetworkCmd) +} diff --git a/cli/cmd/host/delete_network.go b/cli/cmd/host/delete_network.go new file mode 100644 index 00000000..1d5bee16 --- /dev/null +++ b/cli/cmd/host/delete_network.go @@ -0,0 +1,20 @@ +package host + +import ( + "github.com/gravitl/netmaker/cli/functions" + "github.com/spf13/cobra" +) + +var deleteHostNetworkCmd = &cobra.Command{ + Use: "delete_network HostID Network", + Args: cobra.ExactArgs(2), + Short: "Delete a network from a host", + Long: `Delete a network from a host`, + Run: func(cmd *cobra.Command, args []string) { + functions.PrettyPrint(functions.DeleteHostFromNetwork(args[0], args[1])) + }, +} + +func init() { + rootCmd.AddCommand(deleteHostNetworkCmd) +} diff --git a/cli/cmd/host/update_networks.go b/cli/cmd/host/update_networks.go deleted file mode 100644 index afe3f747..00000000 --- a/cli/cmd/host/update_networks.go +++ /dev/null @@ -1,22 +0,0 @@ -package host - -import ( - "strings" - - "github.com/gravitl/netmaker/cli/functions" - "github.com/spf13/cobra" -) - -var hostUpdateNetworksCmd = &cobra.Command{ - Use: "update_network HostID Networks(comma separated list)", - Args: cobra.ExactArgs(2), - Short: "Update a host's networks", - Long: `Update a host's networks`, - Run: func(cmd *cobra.Command, args []string) { - functions.PrettyPrint(functions.UpdateHostNetworks(args[0], strings.Split(args[1], ","))) - }, -} - -func init() { - rootCmd.AddCommand(hostUpdateNetworksCmd) -} diff --git a/cli/functions/host.go b/cli/functions/host.go index bfeabd55..553aca0c 100644 --- a/cli/functions/host.go +++ b/cli/functions/host.go @@ -26,11 +26,14 @@ func UpdateHost(hostID string, body *models.ApiHost) *models.ApiHost { return request[models.ApiHost](http.MethodPut, "/api/hosts/"+hostID, body) } -// UpdateHostNetworks - update a host's networks -func UpdateHostNetworks(hostID string, networks []string) *hostNetworksUpdatePayload { - return request[hostNetworksUpdatePayload](http.MethodPut, "/api/hosts/"+hostID+"/networks", &hostNetworksUpdatePayload{ - Networks: networks, - }) +// AddHostToNetwork - add a network to host +func AddHostToNetwork(hostID, network string) *hostNetworksUpdatePayload { + return request[hostNetworksUpdatePayload](http.MethodPost, "/api/hosts/"+hostID+"/networks/"+network, nil) +} + +// DeleteHostFromNetwork - deletes a network from host +func DeleteHostFromNetwork(hostID, network string) *hostNetworksUpdatePayload { + return request[hostNetworksUpdatePayload](http.MethodDelete, "/api/hosts/"+hostID+"/networks/"+network, nil) } // CreateRelay - turn a host into a relay From 82cac8fa3096330c9f9d3c485a0d6956f55c4331 Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Tue, 14 Feb 2023 07:01:38 -0500 Subject: [PATCH 41/46] use channels for sync --- controllers/dns_test.go | 23 +++++++++++------------ controllers/network_test.go | 2 ++ controllers/node_test.go | 6 +++--- controllers/user_test.go | 21 ++++++++++----------- functions/helpers_test.go | 4 ++-- logic/host_test.go | 3 +-- logic/nodes.go | 2 +- logic/pro/networkuser_test.go | 3 +-- logic/pro/usergroups_test.go | 3 +-- logic/zombie.go | 20 +++++++++++++------- models/network_test.go | 2 +- 11 files changed, 46 insertions(+), 43 deletions(-) diff --git a/controllers/dns_test.go b/controllers/dns_test.go index a55571f4..245c126a 100644 --- a/controllers/dns_test.go +++ b/controllers/dns_test.go @@ -6,7 +6,6 @@ import ( "testing" "github.com/google/uuid" - "github.com/gravitl/netmaker/database" "github.com/gravitl/netmaker/logic" "github.com/gravitl/netmaker/models" "github.com/stretchr/testify/assert" @@ -16,7 +15,7 @@ import ( var dnsHost models.Host func TestGetAllDNS(t *testing.T) { - database.InitializeDatabase() + initialize() deleteAllDNS(t) deleteAllNetworks() createNet() @@ -47,7 +46,7 @@ func TestGetAllDNS(t *testing.T) { } func TestGetNodeDNS(t *testing.T) { - database.InitializeDatabase() + initialize() deleteAllDNS(t) deleteAllNetworks() createNet() @@ -94,7 +93,7 @@ func TestGetNodeDNS(t *testing.T) { }) } func TestGetCustomDNS(t *testing.T) { - database.InitializeDatabase() + initialize() deleteAllDNS(t) deleteAllNetworks() t.Run("NoNetworks", func(t *testing.T) { @@ -133,7 +132,7 @@ func TestGetCustomDNS(t *testing.T) { } func TestGetDNSEntryNum(t *testing.T) { - database.InitializeDatabase() + initialize() deleteAllDNS(t) deleteAllNetworks() createNet() @@ -152,7 +151,7 @@ func TestGetDNSEntryNum(t *testing.T) { }) } func TestGetDNS(t *testing.T) { - database.InitializeDatabase() + initialize() deleteAllDNS(t) deleteAllNetworks() createNet() @@ -196,7 +195,7 @@ func TestGetDNS(t *testing.T) { } func TestCreateDNS(t *testing.T) { - database.InitializeDatabase() + initialize() deleteAllDNS(t) deleteAllNetworks() createNet() @@ -207,7 +206,7 @@ func TestCreateDNS(t *testing.T) { } func TestSetDNS(t *testing.T) { - database.InitializeDatabase() + initialize() deleteAllDNS(t) deleteAllNetworks() t.Run("NoNetworks", func(t *testing.T) { @@ -255,7 +254,7 @@ func TestSetDNS(t *testing.T) { } func TestGetDNSEntry(t *testing.T) { - database.InitializeDatabase() + initialize() deleteAllDNS(t) deleteAllNetworks() createNet() @@ -285,7 +284,7 @@ func TestGetDNSEntry(t *testing.T) { } func TestDeleteDNS(t *testing.T) { - database.InitializeDatabase() + initialize() deleteAllDNS(t) deleteAllNetworks() createNet() @@ -307,7 +306,7 @@ func TestDeleteDNS(t *testing.T) { } func TestValidateDNSUpdate(t *testing.T) { - database.InitializeDatabase() + initialize() deleteAllDNS(t) deleteAllNetworks() createNet() @@ -369,7 +368,7 @@ func TestValidateDNSUpdate(t *testing.T) { } func TestValidateDNSCreate(t *testing.T) { - database.InitializeDatabase() + initialize() _ = logic.DeleteDNS("mynode", "skynet") t.Run("NoNetwork", func(t *testing.T) { entry := models.DNSEntry{"10.0.0.2", "", "myhost", "badnet"} diff --git a/controllers/network_test.go b/controllers/network_test.go index 995349be..3a61c631 100644 --- a/controllers/network_test.go +++ b/controllers/network_test.go @@ -1,6 +1,7 @@ package controller import ( + "context" "os" "testing" @@ -321,6 +322,7 @@ func deleteAllNetworks() { func initialize() { database.InitializeDatabase() createAdminUser() + go logic.ManageZombies(context.Background()) } func createAdminUser() { diff --git a/controllers/node_test.go b/controllers/node_test.go index b16c3c9e..fcaf572e 100644 --- a/controllers/node_test.go +++ b/controllers/node_test.go @@ -21,7 +21,7 @@ func TestCreateEgressGateway(t *testing.T) { var gateway models.EgressGatewayRequest gateway.Ranges = []string{"10.100.100.0/24"} gateway.NetID = "skynet" - database.InitializeDatabase() + initialize() deleteAllNetworks() createNet() t.Run("NoNodes", func(t *testing.T) { @@ -78,7 +78,7 @@ func TestCreateEgressGateway(t *testing.T) { } func TestDeleteEgressGateway(t *testing.T) { var gateway models.EgressGatewayRequest - database.InitializeDatabase() + initialize() deleteAllNetworks() createNet() testnode := createTestNode() @@ -110,7 +110,7 @@ func TestDeleteEgressGateway(t *testing.T) { } func TestGetNetworkNodes(t *testing.T) { - database.InitializeDatabase() + initialize() deleteAllNetworks() createNet() t.Run("BadNet", func(t *testing.T) { diff --git a/controllers/user_test.go b/controllers/user_test.go index 629964e4..642a3b3f 100644 --- a/controllers/user_test.go +++ b/controllers/user_test.go @@ -3,7 +3,6 @@ package controller import ( "testing" - "github.com/gravitl/netmaker/database" "github.com/gravitl/netmaker/logic" "github.com/gravitl/netmaker/models" "github.com/stretchr/testify/assert" @@ -18,7 +17,7 @@ func deleteAllUsers() { func TestHasAdmin(t *testing.T) { //delete all current users - database.InitializeDatabase() + initialize() users, _ := logic.GetUsers() for _, user := range users { success, err := logic.DeleteUser(user.UserName) @@ -48,7 +47,7 @@ func TestHasAdmin(t *testing.T) { }) t.Run("multiple admins", func(t *testing.T) { var user = models.User{"admin1", "password", nil, true, nil} - err := logic.CreateUser(&user) + err := logic.CreateUser(&user) assert.Nil(t, err) found, err := logic.HasAdmin() assert.Nil(t, err) @@ -57,7 +56,7 @@ func TestHasAdmin(t *testing.T) { } func TestCreateUser(t *testing.T) { - database.InitializeDatabase() + initialize() deleteAllUsers() user := models.User{"admin", "password", nil, true, nil} t.Run("NoUser", func(t *testing.T) { @@ -72,7 +71,7 @@ func TestCreateUser(t *testing.T) { } func TestCreateAdmin(t *testing.T) { - database.InitializeDatabase() + initialize() deleteAllUsers() var user models.User t.Run("NoAdmin", func(t *testing.T) { @@ -90,7 +89,7 @@ func TestCreateAdmin(t *testing.T) { } func TestDeleteUser(t *testing.T) { - database.InitializeDatabase() + initialize() deleteAllUsers() t.Run("NonExistent User", func(t *testing.T) { deleted, err := logic.DeleteUser("admin") @@ -107,7 +106,7 @@ func TestDeleteUser(t *testing.T) { } func TestValidateUser(t *testing.T) { - database.InitializeDatabase() + initialize() var user models.User t.Run("Valid Create", func(t *testing.T) { user.UserName = "admin" @@ -155,7 +154,7 @@ func TestValidateUser(t *testing.T) { } func TestGetUser(t *testing.T) { - database.InitializeDatabase() + initialize() deleteAllUsers() t.Run("NonExistantUser", func(t *testing.T) { admin, err := logic.GetUser("admin") @@ -172,7 +171,7 @@ func TestGetUser(t *testing.T) { } func TestGetUsers(t *testing.T) { - database.InitializeDatabase() + initialize() deleteAllUsers() t.Run("NonExistantUser", func(t *testing.T) { admin, err := logic.GetUsers() @@ -203,7 +202,7 @@ func TestGetUsers(t *testing.T) { } func TestUpdateUser(t *testing.T) { - database.InitializeDatabase() + initialize() deleteAllUsers() user := models.User{"admin", "password", nil, true, nil} newuser := models.User{"hello", "world", []string{"wirecat, netmaker"}, true, []string{}} @@ -246,7 +245,7 @@ func TestUpdateUser(t *testing.T) { // } func TestVerifyAuthRequest(t *testing.T) { - database.InitializeDatabase() + initialize() deleteAllUsers() var authRequest models.UserAuthParams t.Run("EmptyUserName", func(t *testing.T) { diff --git a/functions/helpers_test.go b/functions/helpers_test.go index e2737f48..a5afc6c9 100644 --- a/functions/helpers_test.go +++ b/functions/helpers_test.go @@ -20,7 +20,7 @@ var ( ) func TestNetworkExists(t *testing.T) { - err := database.InitializeDatabase() + err := initialize() if err != nil { t.Fatalf("error initilizing database: %s", err) } @@ -53,7 +53,7 @@ func TestNetworkExists(t *testing.T) { } func TestGetAllExtClients(t *testing.T) { - err := database.InitializeDatabase() + err := initialize() if err != nil { t.Fatalf("error initilizing database: %s", err) } diff --git a/logic/host_test.go b/logic/host_test.go index 75ff7a16..e142f634 100644 --- a/logic/host_test.go +++ b/logic/host_test.go @@ -5,13 +5,12 @@ import ( "testing" "github.com/google/uuid" - "github.com/gravitl/netmaker/database" "github.com/gravitl/netmaker/models" "github.com/matryer/is" ) func TestCheckPorts(t *testing.T) { - database.InitializeDatabase() + initialize() h := models.Host{ ID: uuid.New(), EndpointIP: net.ParseIP("192.168.1.1"), diff --git a/logic/nodes.go b/logic/nodes.go index db9f1e8f..1ef27229 100644 --- a/logic/nodes.go +++ b/logic/nodes.go @@ -91,7 +91,7 @@ func DeleteNode(node *models.Node, purge bool) error { if err := UpdateNode(node, &newnode); err != nil { return err } - zombies = append(zombies, node.ID) + newZombie <- node.ID return nil } host, err := GetHost(node.HostID.String()) diff --git a/logic/pro/networkuser_test.go b/logic/pro/networkuser_test.go index ac9994dd..ff34c107 100644 --- a/logic/pro/networkuser_test.go +++ b/logic/pro/networkuser_test.go @@ -4,14 +4,13 @@ import ( "testing" "github.com/google/uuid" - "github.com/gravitl/netmaker/database" "github.com/gravitl/netmaker/models" "github.com/gravitl/netmaker/models/promodels" "github.com/stretchr/testify/assert" ) func TestNetworkUserLogic(t *testing.T) { - database.InitializeDatabase() + initialize() networkUser := promodels.NetworkUser{ ID: "helloworld", } diff --git a/logic/pro/usergroups_test.go b/logic/pro/usergroups_test.go index cd472e25..c7094964 100644 --- a/logic/pro/usergroups_test.go +++ b/logic/pro/usergroups_test.go @@ -3,13 +3,12 @@ package pro import ( "testing" - "github.com/gravitl/netmaker/database" "github.com/gravitl/netmaker/models/promodels" "github.com/stretchr/testify/assert" ) func TestUserGroupLogic(t *testing.T) { - database.InitializeDatabase() + initialize() t.Run("User Groups initialized successfully", func(t *testing.T) { err := InitializeGroups() diff --git a/logic/zombie.go b/logic/zombie.go index cd1dd307..4b147776 100644 --- a/logic/zombie.go +++ b/logic/zombie.go @@ -17,8 +17,10 @@ const ( ) var ( - zombies []uuid.UUID - hostZombies []uuid.UUID + zombies []uuid.UUID + hostZombies []uuid.UUID + newZombie chan uuid.UUID = make(chan (uuid.UUID), 10) + newHostZombie chan uuid.UUID = make(chan (uuid.UUID), 10) ) // CheckZombies - checks if new node has same hostid as existing node @@ -37,7 +39,7 @@ func CheckZombies(newnode *models.Node) { } if node.HostID == newnode.HostID || time.Now().After(node.ExpirationDateTime) { logger.Log(0, "adding ", node.ID.String(), " to zombie list") - zombies = append(zombies, node.ID) + newZombie <- node.ID } } } @@ -57,7 +59,7 @@ func checkForZombieHosts(h *models.Host) { } if existing.MacAddress.String() == h.MacAddress.String() { //add to hostZombies - hostZombies = append(hostZombies, existing.ID) + newHostZombie <- existing.ID //add all nodes belonging to host to zombile list for _, node := range existing.Nodes { id, err := uuid.Parse(node) @@ -65,7 +67,7 @@ func checkForZombieHosts(h *models.Host) { logger.Log(3, "error parsing uuid from host.Nodes", err.Error()) continue } - zombies = append(zombies, id) + newHostZombie <- id } } } @@ -79,6 +81,10 @@ func ManageZombies(ctx context.Context, peerUpdate chan *models.Node) { select { case <-ctx.Done(): return + case id := <-newZombie: + zombies = append(zombies, id) + case id := <-newHostZombie: + hostZombies = append(hostZombies, id) case <-time.After(time.Second * ZOMBIE_TIMEOUT): logger.Log(3, "checking for zombie nodes") if len(zombies) > 0 { @@ -142,10 +148,10 @@ func InitializeZombies() { } if node.HostID == othernode.HostID { if node.LastCheckIn.After(othernode.LastCheckIn) { - zombies = append(zombies, othernode.ID) + newZombie <- othernode.ID logger.Log(1, "adding", othernode.ID.String(), "to zombie list") } else { - zombies = append(zombies, node.ID) + newZombie <- node.ID logger.Log(1, "adding", node.ID.String(), "to zombie list") } } diff --git a/models/network_test.go b/models/network_test.go index bd79398d..3db60cc3 100644 --- a/models/network_test.go +++ b/models/network_test.go @@ -2,7 +2,7 @@ package models // moved from controllers need work //func TestUpdateNetwork(t *testing.T) { -// database.InitializeDatabase() +// initialize() // createNet() // network := getNet() // t.Run("NetID", func(t *testing.T) { From 65b31c1c044f4aeef6e41dea8020c0dc8ae278d3 Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Tue, 14 Feb 2023 07:58:54 -0500 Subject: [PATCH 42/46] fix tests --- controllers/dns_test.go | 11 --------- controllers/network_test.go | 46 ++++++++++++++++------------------- controllers/node_test.go | 3 --- controllers/user_test.go | 9 ------- functions/helpers_test.go | 30 +++++++++++++++++------ logic/host_test.go | 24 +++++++++++++++++- logic/pro/networkuser_test.go | 7 +++++- logic/pro/usergroups_test.go | 1 - logic/zombie.go | 1 + 9 files changed, 73 insertions(+), 59 deletions(-) diff --git a/controllers/dns_test.go b/controllers/dns_test.go index 245c126a..401aeb74 100644 --- a/controllers/dns_test.go +++ b/controllers/dns_test.go @@ -15,7 +15,6 @@ import ( var dnsHost models.Host func TestGetAllDNS(t *testing.T) { - initialize() deleteAllDNS(t) deleteAllNetworks() createNet() @@ -46,7 +45,6 @@ func TestGetAllDNS(t *testing.T) { } func TestGetNodeDNS(t *testing.T) { - initialize() deleteAllDNS(t) deleteAllNetworks() createNet() @@ -93,7 +91,6 @@ func TestGetNodeDNS(t *testing.T) { }) } func TestGetCustomDNS(t *testing.T) { - initialize() deleteAllDNS(t) deleteAllNetworks() t.Run("NoNetworks", func(t *testing.T) { @@ -132,7 +129,6 @@ func TestGetCustomDNS(t *testing.T) { } func TestGetDNSEntryNum(t *testing.T) { - initialize() deleteAllDNS(t) deleteAllNetworks() createNet() @@ -151,7 +147,6 @@ func TestGetDNSEntryNum(t *testing.T) { }) } func TestGetDNS(t *testing.T) { - initialize() deleteAllDNS(t) deleteAllNetworks() createNet() @@ -195,7 +190,6 @@ func TestGetDNS(t *testing.T) { } func TestCreateDNS(t *testing.T) { - initialize() deleteAllDNS(t) deleteAllNetworks() createNet() @@ -206,7 +200,6 @@ func TestCreateDNS(t *testing.T) { } func TestSetDNS(t *testing.T) { - initialize() deleteAllDNS(t) deleteAllNetworks() t.Run("NoNetworks", func(t *testing.T) { @@ -254,7 +247,6 @@ func TestSetDNS(t *testing.T) { } func TestGetDNSEntry(t *testing.T) { - initialize() deleteAllDNS(t) deleteAllNetworks() createNet() @@ -284,7 +276,6 @@ func TestGetDNSEntry(t *testing.T) { } func TestDeleteDNS(t *testing.T) { - initialize() deleteAllDNS(t) deleteAllNetworks() createNet() @@ -306,7 +297,6 @@ func TestDeleteDNS(t *testing.T) { } func TestValidateDNSUpdate(t *testing.T) { - initialize() deleteAllDNS(t) deleteAllNetworks() createNet() @@ -368,7 +358,6 @@ func TestValidateDNSUpdate(t *testing.T) { } func TestValidateDNSCreate(t *testing.T) { - initialize() _ = logic.DeleteDNS("mynode", "skynet") t.Run("NoNetwork", func(t *testing.T) { entry := models.DNSEntry{"10.0.0.2", "", "myhost", "badnet"} diff --git a/controllers/network_test.go b/controllers/network_test.go index 3a61c631..0d19c7df 100644 --- a/controllers/network_test.go +++ b/controllers/network_test.go @@ -7,6 +7,7 @@ import ( "github.com/google/uuid" "github.com/gravitl/netmaker/database" + "github.com/gravitl/netmaker/logger" "github.com/gravitl/netmaker/logic" "github.com/gravitl/netmaker/models" "github.com/stretchr/testify/assert" @@ -21,8 +22,27 @@ type NetworkValidationTestCase struct { var netHost models.Host +func TestMain(m *testing.M) { + database.InitializeDatabase() + defer database.CloseDB() + logic.CreateAdmin(&models.User{ + UserName: "admin", + Password: "password", + IsAdmin: true, + Networks: []string{}, + Groups: []string{}, + }) + peerUpdate := make(chan *models.Node) + go logic.ManageZombies(context.Background(), peerUpdate) + go func() { + for update := range peerUpdate { + //do nothing + logger.Log(3, "received node update", update.Action) + } + }() +} + func TestCreateNetwork(t *testing.T) { - initialize() deleteAllNetworks() var network models.Network @@ -35,7 +55,6 @@ func TestCreateNetwork(t *testing.T) { assert.Nil(t, err) } func TestGetNetwork(t *testing.T) { - initialize() createNet() t.Run("GetExistingNetwork", func(t *testing.T) { @@ -51,7 +70,6 @@ func TestGetNetwork(t *testing.T) { } func TestDeleteNetwork(t *testing.T) { - initialize() createNet() //create nodes t.Run("NetworkwithNodes", func(t *testing.T) { @@ -67,7 +85,6 @@ func TestDeleteNetwork(t *testing.T) { } func TestCreateKey(t *testing.T) { - initialize() createNet() keys, _ := logic.GetKeys("skynet") for _, key := range keys { @@ -139,7 +156,6 @@ func TestCreateKey(t *testing.T) { } func TestGetKeys(t *testing.T) { - initialize() deleteAllNetworks() createNet() network, err := logic.GetNetwork("skynet") @@ -162,7 +178,6 @@ func TestGetKeys(t *testing.T) { }) } func TestDeleteKey(t *testing.T) { - initialize() createNet() network, err := logic.GetNetwork("skynet") assert.Nil(t, err) @@ -184,7 +199,6 @@ func TestDeleteKey(t *testing.T) { func TestSecurityCheck(t *testing.T) { //these seem to work but not sure it the tests are really testing the functionality - initialize() os.Setenv("MASTER_KEY", "secretkey") t.Run("NoNetwork", func(t *testing.T) { networks, username, err := logic.UserPermissions(false, "", "Bearer secretkey") @@ -215,7 +229,6 @@ func TestValidateNetwork(t *testing.T) { //t.Skip() //This functions is not called by anyone //it panics as validation function 'display_name_valid' is not defined - initialize() //yes := true //no := false //deleteNet(t) @@ -292,7 +305,6 @@ func TestValidateNetwork(t *testing.T) { func TestIpv6Network(t *testing.T) { //these seem to work but not sure it the tests are really testing the functionality - initialize() os.Setenv("MASTER_KEY", "secretkey") deleteAllNetworks() createNet() @@ -319,22 +331,6 @@ func deleteAllNetworks() { } } -func initialize() { - database.InitializeDatabase() - createAdminUser() - go logic.ManageZombies(context.Background()) -} - -func createAdminUser() { - logic.CreateAdmin(&models.User{ - UserName: "admin", - Password: "password", - IsAdmin: true, - Networks: []string{}, - Groups: []string{}, - }) -} - func createNet() { var network models.Network network.NetID = "skynet" diff --git a/controllers/node_test.go b/controllers/node_test.go index fcaf572e..bb1e5f00 100644 --- a/controllers/node_test.go +++ b/controllers/node_test.go @@ -21,7 +21,6 @@ func TestCreateEgressGateway(t *testing.T) { var gateway models.EgressGatewayRequest gateway.Ranges = []string{"10.100.100.0/24"} gateway.NetID = "skynet" - initialize() deleteAllNetworks() createNet() t.Run("NoNodes", func(t *testing.T) { @@ -78,7 +77,6 @@ func TestCreateEgressGateway(t *testing.T) { } func TestDeleteEgressGateway(t *testing.T) { var gateway models.EgressGatewayRequest - initialize() deleteAllNetworks() createNet() testnode := createTestNode() @@ -110,7 +108,6 @@ func TestDeleteEgressGateway(t *testing.T) { } func TestGetNetworkNodes(t *testing.T) { - initialize() deleteAllNetworks() createNet() t.Run("BadNet", func(t *testing.T) { diff --git a/controllers/user_test.go b/controllers/user_test.go index 642a3b3f..4c7eb59b 100644 --- a/controllers/user_test.go +++ b/controllers/user_test.go @@ -17,7 +17,6 @@ func deleteAllUsers() { func TestHasAdmin(t *testing.T) { //delete all current users - initialize() users, _ := logic.GetUsers() for _, user := range users { success, err := logic.DeleteUser(user.UserName) @@ -56,7 +55,6 @@ func TestHasAdmin(t *testing.T) { } func TestCreateUser(t *testing.T) { - initialize() deleteAllUsers() user := models.User{"admin", "password", nil, true, nil} t.Run("NoUser", func(t *testing.T) { @@ -71,7 +69,6 @@ func TestCreateUser(t *testing.T) { } func TestCreateAdmin(t *testing.T) { - initialize() deleteAllUsers() var user models.User t.Run("NoAdmin", func(t *testing.T) { @@ -89,7 +86,6 @@ func TestCreateAdmin(t *testing.T) { } func TestDeleteUser(t *testing.T) { - initialize() deleteAllUsers() t.Run("NonExistent User", func(t *testing.T) { deleted, err := logic.DeleteUser("admin") @@ -106,7 +102,6 @@ func TestDeleteUser(t *testing.T) { } func TestValidateUser(t *testing.T) { - initialize() var user models.User t.Run("Valid Create", func(t *testing.T) { user.UserName = "admin" @@ -154,7 +149,6 @@ func TestValidateUser(t *testing.T) { } func TestGetUser(t *testing.T) { - initialize() deleteAllUsers() t.Run("NonExistantUser", func(t *testing.T) { admin, err := logic.GetUser("admin") @@ -171,7 +165,6 @@ func TestGetUser(t *testing.T) { } func TestGetUsers(t *testing.T) { - initialize() deleteAllUsers() t.Run("NonExistantUser", func(t *testing.T) { admin, err := logic.GetUsers() @@ -202,7 +195,6 @@ func TestGetUsers(t *testing.T) { } func TestUpdateUser(t *testing.T) { - initialize() deleteAllUsers() user := models.User{"admin", "password", nil, true, nil} newuser := models.User{"hello", "world", []string{"wirecat, netmaker"}, true, []string{}} @@ -245,7 +237,6 @@ func TestUpdateUser(t *testing.T) { // } func TestVerifyAuthRequest(t *testing.T) { - initialize() deleteAllUsers() var authRequest models.UserAuthParams t.Run("EmptyUserName", func(t *testing.T) { diff --git a/functions/helpers_test.go b/functions/helpers_test.go index a5afc6c9..220ecaad 100644 --- a/functions/helpers_test.go +++ b/functions/helpers_test.go @@ -1,10 +1,12 @@ package functions import ( + "context" "encoding/json" "testing" "github.com/gravitl/netmaker/database" + "github.com/gravitl/netmaker/logger" "github.com/gravitl/netmaker/logic" "github.com/gravitl/netmaker/models" ) @@ -19,11 +21,27 @@ var ( } ) +func TestMain(m *testing.M) { + database.InitializeDatabase() + defer database.CloseDB() + logic.CreateAdmin(&models.User{ + UserName: "admin", + Password: "password", + IsAdmin: true, + Networks: []string{}, + Groups: []string{}, + }) + peerUpdate := make(chan *models.Node) + go logic.ManageZombies(context.Background(), peerUpdate) + go func() { + for update := range peerUpdate { + //do nothing + logger.Log(3, "received node update", update.Action) + } + }() +} + func TestNetworkExists(t *testing.T) { - err := initialize() - if err != nil { - t.Fatalf("error initilizing database: %s", err) - } database.DeleteRecord(database.NETWORKS_TABLE_NAME, testNetwork.NetID) defer database.CloseDB() exists, err := logic.NetworkExists(testNetwork.NetID) @@ -53,10 +71,6 @@ func TestNetworkExists(t *testing.T) { } func TestGetAllExtClients(t *testing.T) { - err := initialize() - if err != nil { - t.Fatalf("error initilizing database: %s", err) - } defer database.CloseDB() database.DeleteRecord(database.EXT_CLIENT_TABLE_NAME, testExternalClient.ClientID) diff --git a/logic/host_test.go b/logic/host_test.go index e142f634..fdde345e 100644 --- a/logic/host_test.go +++ b/logic/host_test.go @@ -1,16 +1,38 @@ package logic import ( + "context" "net" "testing" "github.com/google/uuid" + "github.com/gravitl/netmaker/database" + "github.com/gravitl/netmaker/logger" "github.com/gravitl/netmaker/models" "github.com/matryer/is" ) +func TestMain(m *testing.M) { + database.InitializeDatabase() + defer database.CloseDB() + CreateAdmin(&models.User{ + UserName: "admin", + Password: "password", + IsAdmin: true, + Networks: []string{}, + Groups: []string{}, + }) + peerUpdate := make(chan *models.Node) + go ManageZombies(context.Background(), peerUpdate) + go func() { + for update := range peerUpdate { + //do nothing + logger.Log(3, "received node update", update.Action) + } + }() +} + func TestCheckPorts(t *testing.T) { - initialize() h := models.Host{ ID: uuid.New(), EndpointIP: net.ParseIP("192.168.1.1"), diff --git a/logic/pro/networkuser_test.go b/logic/pro/networkuser_test.go index ff34c107..2568ae07 100644 --- a/logic/pro/networkuser_test.go +++ b/logic/pro/networkuser_test.go @@ -4,13 +4,18 @@ import ( "testing" "github.com/google/uuid" + "github.com/gravitl/netmaker/database" "github.com/gravitl/netmaker/models" "github.com/gravitl/netmaker/models/promodels" "github.com/stretchr/testify/assert" ) +func TestMain(m *testing.M) { + database.InitializeDatabase() + defer database.CloseDB() +} + func TestNetworkUserLogic(t *testing.T) { - initialize() networkUser := promodels.NetworkUser{ ID: "helloworld", } diff --git a/logic/pro/usergroups_test.go b/logic/pro/usergroups_test.go index c7094964..3ca32cef 100644 --- a/logic/pro/usergroups_test.go +++ b/logic/pro/usergroups_test.go @@ -8,7 +8,6 @@ import ( ) func TestUserGroupLogic(t *testing.T) { - initialize() t.Run("User Groups initialized successfully", func(t *testing.T) { err := InitializeGroups() diff --git a/logic/zombie.go b/logic/zombie.go index 4b147776..488bfaa5 100644 --- a/logic/zombie.go +++ b/logic/zombie.go @@ -80,6 +80,7 @@ func ManageZombies(ctx context.Context, peerUpdate chan *models.Node) { for { select { case <-ctx.Done(): + close(peerUpdate) return case id := <-newZombie: zombies = append(zombies, id) From 93473a4e709d845b94c58414b76f58545d7e31b2 Mon Sep 17 00:00:00 2001 From: 0xdcarns Date: Tue, 14 Feb 2023 13:00:08 -0500 Subject: [PATCH 43/46] updated node topic for publishing --- controllers/hosts.go | 3 +++ mq/publishers.go | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/controllers/hosts.go b/controllers/hosts.go index d9c49c85..640f4c59 100644 --- a/controllers/hosts.go +++ b/controllers/hosts.go @@ -268,12 +268,15 @@ func deleteHostFromNetwork(w http.ResponseWriter, r *http.Request) { logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal")) return } + node.Action = models.NODE_DELETE + node.PendingDelete = true logger.Log(1, "deleting node", node.ID.String(), "from host", currHost.Name) if err := logic.DeleteNode(node, false); err != nil { logic.ReturnErrorResponse(w, r, logic.FormatError(fmt.Errorf("failed to delete node"), "internal")) return } // notify node change + runUpdates(node, false) go func() { // notify of peer change if err := mq.PublishPeerUpdate(); err != nil { diff --git a/mq/publishers.go b/mq/publishers.go index 08d6c7e1..d63b585a 100644 --- a/mq/publishers.go +++ b/mq/publishers.go @@ -83,7 +83,7 @@ func NodeUpdate(node *models.Node) error { logger.Log(2, "error marshalling node update ", err.Error()) return err } - if err = publish(host, fmt.Sprintf("update/%s/%s", node.Network, node.ID), data); err != nil { + if err = publish(host, fmt.Sprintf("node/update/%s/%s", node.Network, node.ID), data); err != nil { logger.Log(2, "error publishing node update to peer ", node.ID.String(), err.Error()) return err } From c7c864b229220f4b4d0cd143382066af45da9ebe Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Tue, 14 Feb 2023 13:29:20 -0500 Subject: [PATCH 44/46] break into smaller funcs --- mq/publishers.go | 235 +++++++++++++++++++++-------------------------- 1 file changed, 106 insertions(+), 129 deletions(-) diff --git a/mq/publishers.go b/mq/publishers.go index ffa2313e..8556d705 100644 --- a/mq/publishers.go +++ b/mq/publishers.go @@ -56,7 +56,7 @@ func PublishSingleHostUpdate(host *models.Host) error { return publish(host, fmt.Sprintf("peers/host/%s/%s", host.ID.String(), servercfg.GetServer()), data) } -// PublishPeerUpdate --- publishes a peer update to all the peers of a node +// PublishExtPeerUpdate --- publishes a peer update to all the peers of a node func PublishExtPeerUpdate(node *models.Node) error { go PublishPeerUpdate() @@ -111,40 +111,6 @@ func HostUpdate(hostUpdate *models.HostUpdate) error { return nil } -// sendPeers - retrieve networks, send peer ports to all peers -func sendPeers() { - - hosts, err := logic.GetAllHosts() - if err != nil { - logger.Log(1, "error retrieving networks for keepalive", err.Error()) - } - - var force bool - peer_force_send++ - if peer_force_send == 5 { - servercfg.SetHost() - force = true - peer_force_send = 0 - err := logic.TimerCheckpoint() // run telemetry & log dumps if 24 hours has passed.. - if err != nil { - logger.Log(3, "error occurred on timer,", err.Error()) - } - - //collectServerMetrics(networks[:]) - } - - for _, host := range hosts { - if force { - host := host - logger.Log(2, "sending scheduled peer update (5 min)") - err = PublishSingleHostUpdate(&host) - if err != nil { - logger.Log(1, "error publishing peer updates for host: ", host.ID.String(), " Err: ", err.Error()) - } - } - } -} - // ServerStartNotify - notifies all non server nodes to pull changes after a restart func ServerStartNotify() error { nodes, err := logic.GetAllNodes() @@ -188,58 +154,13 @@ func PublishDNSUpdate(network string, dns models.DNSUpdate) error { // PublishAllDNS publishes an array of dns updates (ip / host.network) for each peer to a node joining a network func PublishAllDNS(newnode *models.Node) error { alldns := []models.DNSUpdate{} - dns := models.DNSUpdate{} newnodeHost, err := logic.GetHost(newnode.HostID.String()) if err != nil { return fmt.Errorf("error retrieving host for dns update %w", err) } - nodes, err := logic.GetNetworkNodes(newnode.Network) - if err != nil { - return err - } - for _, node := range nodes { - host, err := logic.GetHost(node.HostID.String()) - if err != nil { - logger.Log(0, "error retrieving host for dns update", host.ID.String(), err.Error()) - continue - } - dns.Action = models.DNSInsert - dns.Name = host.Name + "." + node.Network - if node.Address.IP != nil { - dns.Address = node.Address.IP.String() - alldns = append(alldns, dns) - } - if node.Address6.IP != nil { - dns.Address = node.Address6.IP.String() - alldns = append(alldns, dns) - } - } - clients, err := logic.GetNetworkExtClients(newnode.Network) - if err != nil { - logger.Log(0, "error retrieving extclients", err.Error()) - } - for _, client := range clients { - dns.Action = models.DNSInsert - dns.Name = client.ClientID + "." + client.Network - if client.Address != "" { - dns.Address = client.Address - alldns = append(alldns, dns) - } - if client.Address6 != "" { - dns.Address = client.Address - alldns = append(alldns, dns) - } - } - customdns, err := logic.GetCustomDNS(newnode.Network) - if err != nil { - logger.Log(0, "error retrieving custom dns entries", err.Error()) - } - for _, custom := range customdns { - dns.Action = models.DNSInsert - dns.Address = custom.Address - dns.Name = custom.Name + "." + custom.Network - alldns = append(alldns, dns) - } + alldns = append(alldns, getNodeDNS(newnode.Network)...) + alldns = append(alldns, getExtClientDNS(newnode.Network)...) + alldns = append(alldns, getCustomDNS(newnode.Network)...) data, err := json.Marshal(alldns) if err != nil { return fmt.Errorf("error encoding dns data %w", err) @@ -272,7 +193,7 @@ func PublishDNSDelete(node *models.Node, host *models.Host) error { return nil } -// PublishReplaceNDS publish a dns update to replace a dns entry on all hosts in network +// PublishReplaceDNS publish a dns update to replace a dns entry on all hosts in network func PublishReplaceDNS(oldNode, newNode *models.Node, host *models.Host) error { dns := models.DNSUpdate{ Action: models.DNSReplaceIP, @@ -322,7 +243,7 @@ func PublishExtCLientDNS(client *models.ExtClient) error { return nil } -// PublishExtClientUpdate publishes dns update for extclient name change +// PublishExtClientDNSUpdate update for extclient name change func PublishExtClientDNSUpdate(old, new models.ExtClient, network string) error { dns := models.DNSUpdate{ Action: models.DNSReplaceName, @@ -335,7 +256,7 @@ func PublishExtClientDNSUpdate(old, new models.ExtClient, network string) error return nil } -// PublishDeleteExtClient publish dns update to delete extclient entry +// PublishDeleteExtClientDNS publish dns update to delete extclient entry func PublishDeleteExtClientDNS(client *models.ExtClient) error { dns := models.DNSUpdate{ Action: models.DNSDeleteByName, @@ -380,49 +301,6 @@ func PublishHostDNSUpdate(old, new *models.Host, networks []string) error { return nil } -// function to collect and store metrics for server nodes -//func collectServerMetrics(networks []models.Network) { -// if !servercfg.Is_EE { -// return -// } -// if len(networks) > 0 { -// for i := range networks { -// currentNetworkNodes, err := logic.GetNetworkNodes(networks[i].NetID) -// if err != nil { -// continue -// } -// currentServerNodes := logic.GetServerNodes(networks[i].NetID) -// if len(currentServerNodes) > 0 { -// for i := range currentServerNodes { -// if logic.IsLocalServer(¤tServerNodes[i]) { -// serverMetrics := logic.CollectServerMetrics(currentServerNodes[i].ID, currentNetworkNodes) -// if serverMetrics != nil { -// serverMetrics.NodeName = currentServerNodes[i].Name -// serverMetrics.NodeID = currentServerNodes[i].ID -// serverMetrics.IsServer = "yes" -// serverMetrics.Network = currentServerNodes[i].Network -// if err = metrics.GetExchangedBytesForNode(¤tServerNodes[i], serverMetrics); err != nil { -// logger.Log(1, fmt.Sprintf("failed to update exchanged bytes info for server: %s, err: %v", -// currentServerNodes[i].Name, err)) -// } -// updateNodeMetrics(¤tServerNodes[i], serverMetrics) -// if err = logic.UpdateMetrics(currentServerNodes[i].ID, serverMetrics); err != nil { -// logger.Log(1, "failed to update metrics for server node", currentServerNodes[i].ID) -// } -// if servercfg.IsMetricsExporter() { -// logger.Log(2, "-------------> SERVER METRICS: ", fmt.Sprintf("%+v", serverMetrics)) -// if err := pushMetricsToExporter(*serverMetrics); err != nil { -// logger.Log(2, "failed to push server metrics to exporter: ", err.Error()) -// } -// } -// } -// } -// } -// } -// } -// } -//} - func pushMetricsToExporter(metrics models.Metrics) error { logger.Log(2, "----> Pushing metrics to exporter") data, err := json.Marshal(metrics) @@ -440,3 +318,102 @@ func pushMetricsToExporter(metrics models.Metrics) error { } return nil } + +func getNodeDNS(network string) []models.DNSUpdate { + alldns := []models.DNSUpdate{} + dns := models.DNSUpdate{} + nodes, err := logic.GetNetworkNodes(network) + if err != nil { + logger.Log(0, "error retreiving network nodes for network", network, err.Error()) + } + for _, node := range nodes { + host, err := logic.GetHost(node.HostID.String()) + if err != nil { + logger.Log(0, "error retrieving host for dns update", host.ID.String(), err.Error()) + continue + } + dns.Action = models.DNSInsert + dns.Name = host.Name + "." + node.Network + if node.Address.IP != nil { + dns.Address = node.Address.IP.String() + alldns = append(alldns, dns) + } + if node.Address6.IP != nil { + dns.Address = node.Address6.IP.String() + alldns = append(alldns, dns) + } + } + return alldns +} + +func getExtClientDNS(network string) []models.DNSUpdate { + alldns := []models.DNSUpdate{} + dns := models.DNSUpdate{} + clients, err := logic.GetNetworkExtClients(network) + if err != nil { + logger.Log(0, "error retrieving extclients", err.Error()) + } + for _, client := range clients { + dns.Action = models.DNSInsert + dns.Name = client.ClientID + "." + client.Network + if client.Address != "" { + dns.Address = client.Address + alldns = append(alldns, dns) + } + if client.Address6 != "" { + dns.Address = client.Address + alldns = append(alldns, dns) + } + } + return alldns +} + +func getCustomDNS(network string) []models.DNSUpdate { + alldns := []models.DNSUpdate{} + dns := models.DNSUpdate{} + customdns, err := logic.GetCustomDNS(network) + if err != nil { + logger.Log(0, "error retrieving custom dns entries", err.Error()) + } + for _, custom := range customdns { + dns.Action = models.DNSInsert + dns.Address = custom.Address + dns.Name = custom.Name + "." + custom.Network + alldns = append(alldns, dns) + } + return alldns +} + +// sendPeers - retrieve networks, send peer ports to all peers +func sendPeers() { + + hosts, err := logic.GetAllHosts() + if err != nil { + logger.Log(1, "error retrieving networks for keepalive", err.Error()) + } + + var force bool + peer_force_send++ + if peer_force_send == 5 { + servercfg.SetHost() + force = true + peer_force_send = 0 + err := logic.TimerCheckpoint() // run telemetry & log dumps if 24 hours has passed.. + if err != nil { + logger.Log(3, "error occurred on timer,", err.Error()) + } + + //collectServerMetrics(networks[:]) + } + + for _, host := range hosts { + if force { + host := host + logger.Log(2, "sending scheduled peer update (5 min)") + err = PublishSingleHostUpdate(&host) + if err != nil { + logger.Log(1, "error publishing peer updates for host: ", host.ID.String(), " Err: ", err.Error()) + } + } + } +} From a15650d3e062659ebc1f9ce92d942b9af9a04852 Mon Sep 17 00:00:00 2001 From: "kayos@tcp.direct" Date: Thu, 16 Feb 2023 02:09:58 -0800 Subject: [PATCH 45/46] NetClientUtils: Avoid using defer in a for loop, this causes resource leaks. --- netclient/ncutils/netclientutils.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/netclient/ncutils/netclientutils.go b/netclient/ncutils/netclientutils.go index a12df93d..e1f5ac6d 100644 --- a/netclient/ncutils/netclientutils.go +++ b/netclient/ncutils/netclientutils.go @@ -166,13 +166,16 @@ func GetPublicIP(api string) (string, error) { if err != nil { continue } - defer resp.Body.Close() if resp.StatusCode == http.StatusOK { var bodyBytes []byte bodyBytes, err = io.ReadAll(resp.Body) if err != nil { + if resp.Body != nil { + _ = resp.Body.Close() + } continue } + _ = resp.Body.Close() endpoint = string(bodyBytes) break } From 1513dc28b728a24544c9e3754019f6dd804012db Mon Sep 17 00:00:00 2001 From: "kayos@tcp.direct" Date: Thu, 16 Feb 2023 02:11:30 -0800 Subject: [PATCH 46/46] Tests: Handle all errors, key struct fields for go vet, enhance CI --- .github/workflows/test.yml | 1 + controllers/dns_test.go | 57 +++++++++++----------- controllers/user_test.go | 99 +++++++++++++++++++++++--------------- 3 files changed, 91 insertions(+), 66 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 002dde14..63b9a818 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -49,6 +49,7 @@ jobs: go-version: 1.19 - name: run tests run: | + go vet ./... go test -p 1 ./... -v env: DATABASE: sqlite diff --git a/controllers/dns_test.go b/controllers/dns_test.go index 401aeb74..8a9b886f 100644 --- a/controllers/dns_test.go +++ b/controllers/dns_test.go @@ -6,10 +6,11 @@ import ( "testing" "github.com/google/uuid" - "github.com/gravitl/netmaker/logic" - "github.com/gravitl/netmaker/models" "github.com/stretchr/testify/assert" "golang.zx2c4.com/wireguard/wgctrl/wgtypes" + + "github.com/gravitl/netmaker/logic" + "github.com/gravitl/netmaker/models" ) var dnsHost models.Host @@ -26,7 +27,7 @@ func TestGetAllDNS(t *testing.T) { }) t.Run("OneEntry", func(t *testing.T) { entry := models.DNSEntry{ - "10.0.0.3", "", "newhost", "skynet", + Address: "10.0.0.3", Name: "newhost", Network: "skynet", } _, err := logic.CreateDNS(entry) assert.Nil(t, err) @@ -35,7 +36,7 @@ func TestGetAllDNS(t *testing.T) { assert.Equal(t, 1, len(entries)) }) t.Run("MultipleEntry", func(t *testing.T) { - entry := models.DNSEntry{"10.0.0.7", "", "anotherhost", "skynet"} + entry := models.DNSEntry{Address: "10.0.0.7", Name: "anotherhost", Network: "skynet"} _, err := logic.CreateDNS(entry) assert.Nil(t, err) entries, err := logic.GetAllDNS() @@ -111,7 +112,7 @@ func TestGetCustomDNS(t *testing.T) { assert.Equal(t, 0, len(dns)) }) t.Run("EntryExist", func(t *testing.T) { - entry := models.DNSEntry{"10.0.0.3", "", "custom1", "skynet"} + entry := models.DNSEntry{Address: "10.0.0.3", Name: "custom1", Network: "skynet"} _, err := logic.CreateDNS(entry) assert.Nil(t, err) dns, err := logic.GetCustomDNS("skynet") @@ -119,7 +120,7 @@ func TestGetCustomDNS(t *testing.T) { assert.Equal(t, 1, len(dns)) }) t.Run("MultipleEntries", func(t *testing.T) { - entry := models.DNSEntry{"10.0.0.4", "", "host4", "skynet"} + entry := models.DNSEntry{Address: "10.0.0.4", Name: "host4", Network: "skynet"} _, err := logic.CreateDNS(entry) assert.Nil(t, err) dns, err := logic.GetCustomDNS("skynet") @@ -138,7 +139,7 @@ func TestGetDNSEntryNum(t *testing.T) { assert.Equal(t, 0, num) }) t.Run("NodeExists", func(t *testing.T) { - entry := models.DNSEntry{"10.0.0.2", "", "newhost", "skynet"} + entry := models.DNSEntry{Address: "10.0.0.2", Name: "newhost", Network: "skynet"} _, err := logic.CreateDNS(entry) assert.Nil(t, err) num, err := logic.GetDNSEntryNum("newhost", "skynet") @@ -156,7 +157,7 @@ func TestGetDNS(t *testing.T) { assert.Nil(t, dns) }) t.Run("CustomDNSExists", func(t *testing.T) { - entry := models.DNSEntry{"10.0.0.2", "", "newhost", "skynet"} + entry := models.DNSEntry{Address: "10.0.0.2", Name: "newhost", Network: "skynet"} _, err := logic.CreateDNS(entry) assert.Nil(t, err) dns, err := logic.GetDNS("skynet") @@ -176,7 +177,7 @@ func TestGetDNS(t *testing.T) { assert.Equal(t, 1, len(dns)) }) t.Run("NodeAndCustomDNS", func(t *testing.T) { - entry := models.DNSEntry{"10.0.0.2", "", "newhost", "skynet"} + entry := models.DNSEntry{Address: "10.0.0.2", Name: "newhost", Network: "skynet"} _, err := logic.CreateDNS(entry) assert.Nil(t, err) dns, err := logic.GetDNS("skynet") @@ -193,7 +194,7 @@ func TestCreateDNS(t *testing.T) { deleteAllDNS(t) deleteAllNetworks() createNet() - entry := models.DNSEntry{"10.0.0.2", "", "newhost", "skynet"} + entry := models.DNSEntry{Address: "10.0.0.2", Name: "newhost", Network: "skynet"} dns, err := logic.CreateDNS(entry) assert.Nil(t, err) assert.Equal(t, "newhost", dns.Name) @@ -231,7 +232,7 @@ func TestSetDNS(t *testing.T) { assert.Contains(t, string(content), "linuxhost.skynet") }) t.Run("EntryExists", func(t *testing.T) { - entry := models.DNSEntry{"10.0.0.3", "", "newhost", "skynet"} + entry := models.DNSEntry{Address: "10.0.0.3", Name: "newhost", Network: "skynet"} _, err := logic.CreateDNS(entry) assert.Nil(t, err) err = logic.SetDNS() @@ -251,7 +252,7 @@ func TestGetDNSEntry(t *testing.T) { deleteAllNetworks() createNet() createTestNode() - entry := models.DNSEntry{"10.0.0.2", "", "newhost", "skynet"} + entry := models.DNSEntry{Address: "10.0.0.2", Name: "newhost", Network: "skynet"} _, _ = logic.CreateDNS(entry) t.Run("wrong net", func(t *testing.T) { entry, err := GetDNSEntry("newhost", "w286 Toronto Street South, Uxbridge, ONirecat") @@ -279,7 +280,7 @@ func TestDeleteDNS(t *testing.T) { deleteAllDNS(t) deleteAllNetworks() createNet() - entry := models.DNSEntry{"10.0.0.2", "", "newhost", "skynet"} + entry := models.DNSEntry{Address: "10.0.0.2", Name: "newhost", Network: "skynet"} _, _ = logic.CreateDNS(entry) t.Run("EntryExists", func(t *testing.T) { err := logic.DeleteDNS("newhost", "skynet") @@ -300,16 +301,16 @@ func TestValidateDNSUpdate(t *testing.T) { deleteAllDNS(t) deleteAllNetworks() createNet() - entry := models.DNSEntry{"10.0.0.2", "", "myhost", "skynet"} + entry := models.DNSEntry{Address: "10.0.0.2", Name: "myhost", Network: "skynet"} t.Run("BadNetwork", func(t *testing.T) { - change := models.DNSEntry{"10.0.0.2", "", "myhost", "badnet"} + change := models.DNSEntry{Address: "10.0.0.2", Name: "myhost", Network: "badnet"} err := logic.ValidateDNSUpdate(change, entry) assert.NotNil(t, err) assert.Contains(t, err.Error(), "Field validation for 'Network' failed on the 'network_exists' tag") }) t.Run("EmptyNetwork", func(t *testing.T) { - //this can't actually happen as change.Network is populated if is blank - change := models.DNSEntry{"10.0.0.2", "", "myhost", ""} + // this can't actually happen as change.Network is populated if is blank + change := models.DNSEntry{Address: "10.0.0.2", Name: "myhost"} err := logic.ValidateDNSUpdate(change, entry) assert.NotNil(t, err) assert.Contains(t, err.Error(), "Field validation for 'Network' failed on the 'network_exists' tag") @@ -322,14 +323,14 @@ func TestValidateDNSUpdate(t *testing.T) { // assert.Contains(t, err.Error(), "Field validation for 'Address' failed on the 'required' tag") // }) t.Run("BadAddress", func(t *testing.T) { - change := models.DNSEntry{"10.0.256.1", "", "myhost", "skynet"} + change := models.DNSEntry{Address: "10.0.256.1", Name: "myhost", Network: "skynet"} err := logic.ValidateDNSUpdate(change, entry) assert.NotNil(t, err) assert.Contains(t, err.Error(), "Field validation for 'Address' failed on the 'ip' tag") }) t.Run("EmptyName", func(t *testing.T) { - //this can't actually happen as change.Name is populated if is blank - change := models.DNSEntry{"10.0.0.2", "", "", "skynet"} + // this can't actually happen as change.Name is populated if is blank + change := models.DNSEntry{Address: "10.0.0.2", Network: "skynet"} err := logic.ValidateDNSUpdate(change, entry) assert.NotNil(t, err) assert.Contains(t, err.Error(), "Field validation for 'Name' failed on the 'required' tag") @@ -339,19 +340,19 @@ func TestValidateDNSUpdate(t *testing.T) { for i := 1; i < 194; i++ { name = name + "a" } - change := models.DNSEntry{"10.0.0.2", "", name, "skynet"} + change := models.DNSEntry{Address: "10.0.0.2", Name: name, Network: "skynet"} err := logic.ValidateDNSUpdate(change, entry) assert.NotNil(t, err) assert.Contains(t, err.Error(), "Field validation for 'Name' failed on the 'max' tag") }) t.Run("NameUnique", func(t *testing.T) { - change := models.DNSEntry{"10.0.0.2", "", "myhost", "wirecat"} + change := models.DNSEntry{Address: "10.0.0.2", Name: "myhost", Network: "wirecat"} _, _ = logic.CreateDNS(entry) _, _ = logic.CreateDNS(change) err := logic.ValidateDNSUpdate(change, entry) assert.NotNil(t, err) assert.Contains(t, err.Error(), "Field validation for 'Name' failed on the 'name_unique' tag") - //cleanup + // cleanup err = logic.DeleteDNS("myhost", "wirecat") assert.Nil(t, err) }) @@ -360,7 +361,7 @@ func TestValidateDNSUpdate(t *testing.T) { func TestValidateDNSCreate(t *testing.T) { _ = logic.DeleteDNS("mynode", "skynet") t.Run("NoNetwork", func(t *testing.T) { - entry := models.DNSEntry{"10.0.0.2", "", "myhost", "badnet"} + entry := models.DNSEntry{Address: "10.0.0.2", Name: "myhost", Network: "badnet"} err := logic.ValidateDNSCreate(entry) assert.NotNil(t, err) assert.Contains(t, err.Error(), "Field validation for 'Network' failed on the 'network_exists' tag") @@ -372,13 +373,13 @@ func TestValidateDNSCreate(t *testing.T) { // assert.Contains(t, err.Error(), "Field validation for 'Address' failed on the 'required' tag") // }) t.Run("BadAddress", func(t *testing.T) { - entry := models.DNSEntry{"10.0.256.1", "", "myhost", "skynet"} + entry := models.DNSEntry{Address: "10.0.256.1", Name: "myhost", Network: "skynet"} err := logic.ValidateDNSCreate(entry) assert.NotNil(t, err) assert.Contains(t, err.Error(), "Field validation for 'Address' failed on the 'ip' tag") }) t.Run("EmptyName", func(t *testing.T) { - entry := models.DNSEntry{"10.0.0.2", "", "", "skynet"} + entry := models.DNSEntry{Address: "10.0.0.2", Network: "skynet"} err := logic.ValidateDNSCreate(entry) assert.NotNil(t, err) assert.Contains(t, err.Error(), "Field validation for 'Name' failed on the 'required' tag") @@ -388,13 +389,13 @@ func TestValidateDNSCreate(t *testing.T) { for i := 1; i < 194; i++ { name = name + "a" } - entry := models.DNSEntry{"10.0.0.2", "", name, "skynet"} + entry := models.DNSEntry{Address: "10.0.0.2", Name: name, Network: "skynet"} err := logic.ValidateDNSCreate(entry) assert.NotNil(t, err) assert.Contains(t, err.Error(), "Field validation for 'Name' failed on the 'max' tag") }) t.Run("NameUnique", func(t *testing.T) { - entry := models.DNSEntry{"10.0.0.2", "", "myhost", "skynet"} + entry := models.DNSEntry{Address: "10.0.0.2", Name: "myhost", Network: "skynet"} _, _ = logic.CreateDNS(entry) err := logic.ValidateDNSCreate(entry) assert.NotNil(t, err) diff --git a/controllers/user_test.go b/controllers/user_test.go index 4c7eb59b..38c03456 100644 --- a/controllers/user_test.go +++ b/controllers/user_test.go @@ -3,20 +3,24 @@ package controller import ( "testing" + "github.com/stretchr/testify/assert" + "github.com/gravitl/netmaker/logic" "github.com/gravitl/netmaker/models" - "github.com/stretchr/testify/assert" ) -func deleteAllUsers() { +func deleteAllUsers(t *testing.T) { + t.Helper() users, _ := logic.GetUsers() for _, user := range users { - logic.DeleteUser(user.UserName) + if _, err := logic.DeleteUser(user.UserName); err != nil { + t.Fatal(err) + } } } func TestHasAdmin(t *testing.T) { - //delete all current users + // delete all current users users, _ := logic.GetUsers() for _, user := range users { success, err := logic.DeleteUser(user.UserName) @@ -29,7 +33,7 @@ func TestHasAdmin(t *testing.T) { assert.False(t, found) }) t.Run("No admin user", func(t *testing.T) { - var user = models.User{"noadmin", "password", nil, false, nil} + var user = models.User{UserName: "noadmin", Password: "password"} err := logic.CreateUser(&user) assert.Nil(t, err) found, err := logic.HasAdmin() @@ -37,7 +41,7 @@ func TestHasAdmin(t *testing.T) { assert.False(t, found) }) t.Run("admin user", func(t *testing.T) { - var user = models.User{"admin", "password", nil, true, nil} + var user = models.User{UserName: "admin", Password: "password", IsAdmin: true} err := logic.CreateUser(&user) assert.Nil(t, err) found, err := logic.HasAdmin() @@ -45,7 +49,7 @@ func TestHasAdmin(t *testing.T) { assert.True(t, found) }) t.Run("multiple admins", func(t *testing.T) { - var user = models.User{"admin1", "password", nil, true, nil} + var user = models.User{UserName: "admin1", Password: "password", IsAdmin: true} err := logic.CreateUser(&user) assert.Nil(t, err) found, err := logic.HasAdmin() @@ -55,8 +59,8 @@ func TestHasAdmin(t *testing.T) { } func TestCreateUser(t *testing.T) { - deleteAllUsers() - user := models.User{"admin", "password", nil, true, nil} + deleteAllUsers(t) + user := models.User{UserName: "admin", Password: "password", IsAdmin: true} t.Run("NoUser", func(t *testing.T) { err := logic.CreateUser(&user) assert.Nil(t, err) @@ -69,7 +73,7 @@ func TestCreateUser(t *testing.T) { } func TestCreateAdmin(t *testing.T) { - deleteAllUsers() + deleteAllUsers(t) var user models.User t.Run("NoAdmin", func(t *testing.T) { user.UserName = "admin" @@ -86,15 +90,17 @@ func TestCreateAdmin(t *testing.T) { } func TestDeleteUser(t *testing.T) { - deleteAllUsers() + deleteAllUsers(t) t.Run("NonExistent User", func(t *testing.T) { deleted, err := logic.DeleteUser("admin") assert.EqualError(t, err, "user does not exist") assert.False(t, deleted) }) t.Run("Existing User", func(t *testing.T) { - user := models.User{"admin", "password", nil, true, nil} - logic.CreateUser(&user) + user := models.User{UserName: "admin", Password: "password", IsAdmin: true} + if err := logic.CreateUser(&user); err != nil { + t.Fatal(err) + } deleted, err := logic.DeleteUser("admin") assert.Nil(t, err) assert.True(t, deleted) @@ -120,21 +126,21 @@ func TestValidateUser(t *testing.T) { user.UserName = "*invalid" err := logic.ValidateUser(&user) assert.Error(t, err) - //assert.Contains(t, err.Error(), "Field validation for 'UserName' failed") + // assert.Contains(t, err.Error(), "Field validation for 'UserName' failed") }) t.Run("Short UserName", func(t *testing.T) { t.Skip() user.UserName = "1" err := logic.ValidateUser(&user) assert.NotNil(t, err) - //assert.Contains(t, err.Error(), "Field validation for 'UserName' failed") + // assert.Contains(t, err.Error(), "Field validation for 'UserName' failed") }) t.Run("Empty UserName", func(t *testing.T) { t.Skip() user.UserName = "" err := logic.ValidateUser(&user) assert.EqualError(t, err, "some string") - //assert.Contains(t, err.Error(), "Field validation for 'UserName' failed") + // assert.Contains(t, err.Error(), "Field validation for 'UserName' failed") }) t.Run("EmptyPassword", func(t *testing.T) { user.Password = "" @@ -149,15 +155,19 @@ func TestValidateUser(t *testing.T) { } func TestGetUser(t *testing.T) { - deleteAllUsers() + deleteAllUsers(t) + + user := models.User{UserName: "admin", Password: "password", Networks: nil, IsAdmin: true, Groups: nil} + t.Run("NonExistantUser", func(t *testing.T) { admin, err := logic.GetUser("admin") assert.EqualError(t, err, "could not find any records") assert.Equal(t, "", admin.UserName) }) t.Run("UserExisits", func(t *testing.T) { - user := models.User{"admin", "password", nil, true, nil} - logic.CreateUser(&user) + if err := logic.CreateUser(&user); err != nil { + t.Error(err) + } admin, err := logic.GetUser("admin") assert.Nil(t, err) assert.Equal(t, user.UserName, admin.UserName) @@ -165,29 +175,36 @@ func TestGetUser(t *testing.T) { } func TestGetUsers(t *testing.T) { - deleteAllUsers() + deleteAllUsers(t) + + adminUser := models.User{UserName: "admin", Password: "password", IsAdmin: true} + user := models.User{UserName: "admin", Password: "password", IsAdmin: false} + t.Run("NonExistantUser", func(t *testing.T) { admin, err := logic.GetUsers() assert.EqualError(t, err, "could not find any records") assert.Equal(t, []models.ReturnUser(nil), admin) }) t.Run("UserExisits", func(t *testing.T) { - user := models.User{"admin", "password", nil, true, nil} - logic.CreateUser(&user) + if err := logic.CreateUser(&adminUser); err != nil { + t.Error(err) + } admins, err := logic.GetUsers() assert.Nil(t, err) - assert.Equal(t, user.UserName, admins[0].UserName) + assert.Equal(t, adminUser.UserName, admins[0].UserName) }) t.Run("MulipleUsers", func(t *testing.T) { - user := models.User{"user", "password", nil, true, nil} - logic.CreateUser(&user) + if err := logic.CreateUser(&user); err != nil { + t.Error(err) + } admins, err := logic.GetUsers() assert.Nil(t, err) for _, u := range admins { if u.UserName == "admin" { - assert.Equal(t, "admin", u.UserName) + assert.Equal(t, true, u.IsAdmin) } else { assert.Equal(t, user.UserName, u.UserName) + assert.Equal(t, user.IsAdmin, u.IsAdmin) } } }) @@ -195,9 +212,9 @@ func TestGetUsers(t *testing.T) { } func TestUpdateUser(t *testing.T) { - deleteAllUsers() - user := models.User{"admin", "password", nil, true, nil} - newuser := models.User{"hello", "world", []string{"wirecat, netmaker"}, true, []string{}} + deleteAllUsers(t) + user := models.User{UserName: "admin", Password: "password", IsAdmin: true} + newuser := models.User{UserName: "hello", Password: "world", Networks: []string{"wirecat, netmaker"}, IsAdmin: true, Groups: []string{}} t.Run("NonExistantUser", func(t *testing.T) { admin, err := logic.UpdateUser(&newuser, &user) assert.EqualError(t, err, "could not find any records") @@ -205,7 +222,9 @@ func TestUpdateUser(t *testing.T) { }) t.Run("UserExists", func(t *testing.T) { - logic.CreateUser(&user) + if err := logic.CreateUser(&user); err != nil { + t.Error(err) + } admin, err := logic.UpdateUser(&newuser, &user) assert.Nil(t, err) assert.Equal(t, newuser.UserName, admin.UserName) @@ -237,7 +256,8 @@ func TestUpdateUser(t *testing.T) { // } func TestVerifyAuthRequest(t *testing.T) { - deleteAllUsers() + deleteAllUsers(t) + user := models.User{UserName: "admin", Password: "password", Networks: nil, IsAdmin: true, Groups: nil} var authRequest models.UserAuthParams t.Run("EmptyUserName", func(t *testing.T) { authRequest.UserName = "" @@ -261,23 +281,26 @@ func TestVerifyAuthRequest(t *testing.T) { assert.EqualError(t, err, "error retrieving user from db: could not find any records") }) t.Run("Non-Admin", func(t *testing.T) { - user := models.User{"nonadmin", "somepass", nil, false, []string{}} - logic.CreateUser(&user) - authRequest := models.UserAuthParams{"nonadmin", "somepass"} + if err := logic.CreateUser(&user); err != nil { + t.Error(err) + } + authRequest := models.UserAuthParams{UserName: "nonadmin", Password: "somepass"} jwt, err := logic.VerifyAuthRequest(authRequest) assert.NotNil(t, jwt) assert.Nil(t, err) }) t.Run("WrongPassword", func(t *testing.T) { - user := models.User{"admin", "password", nil, false, []string{}} - logic.CreateUser(&user) - authRequest := models.UserAuthParams{"admin", "badpass"} + user := models.User{UserName: "admin", Password: "password", Groups: []string{}} + if err := logic.CreateUser(&user); err != nil { + t.Error(err) + } + authRequest := models.UserAuthParams{UserName: "admin", Password: "badpass"} jwt, err := logic.VerifyAuthRequest(authRequest) assert.Equal(t, "", jwt) assert.EqualError(t, err, "incorrect credentials") }) t.Run("Success", func(t *testing.T) { - authRequest := models.UserAuthParams{"admin", "password"} + authRequest := models.UserAuthParams{UserName: "admin", Password: "password"} jwt, err := logic.VerifyAuthRequest(authRequest) assert.Nil(t, err) assert.NotNil(t, jwt)