added peer checking

This commit is contained in:
worker-9 2021-07-28 22:14:06 -04:00
parent 9635590322
commit cdbbc4bb68
4 changed files with 71 additions and 1 deletions

View file

@ -210,6 +210,14 @@ func CreateNode(node models.Node, networkName string) (models.Node, error) {
return node, err
}
func NotifyNetworkCheck(networkName string) bool {
if currentPeersList, err := serverctl.GetPeers(networkName); err == nil {
return database.SetPeers(currentPeersList, networkName)
} else {
return false
}
}
func NodeCheckIn(node models.Node, networkName string) (models.CheckInResponse, error) {
var response models.CheckInResponse
@ -252,6 +260,15 @@ func NodeCheckIn(node models.Node, networkName string) (models.CheckInResponse,
if nkeyupdate < gkeyupdate {
response.NeedKeyUpdate = true
}
if parentnode.Name == "netmaker" {
if NotifyNetworkCheck(networkName) {
err := SetNetworkNodesLastModified(networkName)
if err != nil {
log.Println(err, "could not notify network to update peers")
}
}
}
if time.Now().Unix() > parentnode.ExpirationDateTime {
response.NeedDelete = true
err = DeleteNode(node.MacAddress, networkName)

View file

@ -3,6 +3,7 @@ package database
import (
"encoding/json"
"errors"
"github.com/rqlite/gorqlite"
)
@ -12,6 +13,7 @@ const USERS_TABLE_NAME = "users"
const DNS_TABLE_NAME = "dns"
const EXT_CLIENT_TABLE_NAME = "extclients"
const INT_CLIENTS_TABLE_NAME = "intclients"
const PEERS_TABLE_NAME = "peers"
const DATABASE_FILENAME = "netmaker.db"
var Database gorqlite.Connection
@ -37,6 +39,7 @@ func createTables() {
createTable(DNS_TABLE_NAME)
createTable(EXT_CLIENT_TABLE_NAME)
createTable(INT_CLIENTS_TABLE_NAME)
createTable(PEERS_TABLE_NAME)
}
func createTable(tableName string) error {
@ -64,6 +67,18 @@ func Insert(key string, value string, tableName string) error {
}
}
func InsertPeer(key string, value string) error {
if key != "" && value != "" {
_, err := Database.WriteOne("INSERT OR REPLACE INTO " + PEERS_TABLE_NAME + " (key, value) VALUES ('" + key + "', '" + value + "')")
if err != nil {
return err
}
return nil
} else {
return errors.New("invalid peer insert " + key + " : " + value)
}
}
func DeleteRecord(tableName string, key string) error {
_, err := Database.WriteOne("DELETE FROM " + tableName + " WHERE key = \"" + key + "\"")
if err != nil {

39
database/statics.go Normal file
View file

@ -0,0 +1,39 @@
package database
import (
"encoding/json"
)
func SetPeers(newPeers map[string]string, networkName string) bool {
areEqual := PeersAreEqual(newPeers, networkName)
if !areEqual {
jsonData, err := json.Marshal(newPeers)
if err != nil {
return false
}
InsertPeer(networkName, string(jsonData))
return true
}
return !areEqual
}
func PeersAreEqual(toCompare map[string]string, networkName string) bool {
record, err := FetchRecord(PEERS_TABLE_NAME, networkName)
if err != nil {
return false
}
currentDataMap := make(map[string]string)
err = json.Unmarshal([]byte(record), &currentDataMap)
if err != nil {
return false
}
if len(currentDataMap) != len(toCompare) {
return false
}
for k := range currentDataMap {
if currentDataMap[k] != toCompare[k] {
return false
}
}
return true
}

View file

@ -203,6 +203,5 @@ func GetPeers(networkName string) (map[string]string, error) {
for _, peer := range device.Peers {
peers[peer.PublicKey.String()] = peer.Endpoint.String()
}
return peers, nil
}