mirror of
https://github.com/gravitl/netmaker.git
synced 2025-02-25 16:44:01 +08:00
added peer checking
This commit is contained in:
parent
9635590322
commit
cdbbc4bb68
4 changed files with 71 additions and 1 deletions
|
@ -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)
|
||||
|
|
|
@ -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
39
database/statics.go
Normal 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), ¤tDataMap)
|
||||
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
|
||||
}
|
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue