2021-03-26 00:17:52 +08:00
|
|
|
package controller
|
|
|
|
|
|
|
|
import (
|
2021-07-21 05:18:45 +08:00
|
|
|
"encoding/json"
|
2021-07-26 02:22:20 +08:00
|
|
|
"strings"
|
2021-08-11 01:47:36 +08:00
|
|
|
|
2021-07-21 05:18:45 +08:00
|
|
|
"github.com/gravitl/netmaker/database"
|
2021-04-25 06:03:26 +08:00
|
|
|
"github.com/gravitl/netmaker/functions"
|
2021-10-27 00:27:29 +08:00
|
|
|
"github.com/gravitl/netmaker/logic"
|
2021-04-25 06:03:26 +08:00
|
|
|
"github.com/gravitl/netmaker/models"
|
2021-05-09 22:52:42 +08:00
|
|
|
"github.com/gravitl/netmaker/servercfg"
|
2021-03-26 00:17:52 +08:00
|
|
|
)
|
|
|
|
|
2021-08-03 06:06:26 +08:00
|
|
|
/**
|
|
|
|
* If being deleted by server, create a record in the DELETED_NODES_TABLE for the client to find
|
|
|
|
* If being deleted by the client, delete completely
|
|
|
|
*/
|
|
|
|
func DeleteNode(key string, exterminate bool) error {
|
|
|
|
var err error
|
|
|
|
if !exterminate {
|
|
|
|
args := strings.Split(key, "###")
|
|
|
|
node, err := GetNode(args[0], args[1])
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
node.Action = models.NODE_DELETE
|
|
|
|
nodedata, err := json.Marshal(&node)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
err = database.Insert(key, string(nodedata), database.DELETED_NODES_TABLE_NAME)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if err := database.DeleteRecord(database.DELETED_NODES_TABLE_NAME, key); err != nil {
|
2021-08-11 01:47:36 +08:00
|
|
|
functions.PrintUserLog("", err.Error(), 2)
|
2021-08-03 06:06:26 +08:00
|
|
|
}
|
2021-07-22 06:55:19 +08:00
|
|
|
}
|
2021-08-03 06:06:26 +08:00
|
|
|
if err := database.DeleteRecord(database.NODES_TABLE_NAME, key); err != nil {
|
2021-07-22 06:55:19 +08:00
|
|
|
return err
|
2021-03-26 00:17:52 +08:00
|
|
|
}
|
2021-05-09 22:52:42 +08:00
|
|
|
if servercfg.IsDNSMode() {
|
2021-10-27 00:27:29 +08:00
|
|
|
err = logic.SetDNS()
|
2021-05-09 22:52:42 +08:00
|
|
|
}
|
2021-07-22 06:55:19 +08:00
|
|
|
return err
|
2021-03-26 00:17:52 +08:00
|
|
|
}
|
|
|
|
|
2021-05-30 01:22:18 +08:00
|
|
|
func DeleteIntClient(clientid string) (bool, error) {
|
|
|
|
|
2021-07-22 06:55:19 +08:00
|
|
|
err := database.DeleteRecord(database.INT_CLIENTS_TABLE_NAME, clientid)
|
|
|
|
if err != nil {
|
|
|
|
return false, err
|
2021-07-21 05:18:45 +08:00
|
|
|
}
|
2021-05-30 01:22:18 +08:00
|
|
|
|
2021-07-22 06:55:19 +08:00
|
|
|
return true, nil
|
2021-05-30 01:22:18 +08:00
|
|
|
}
|
|
|
|
|
2021-04-13 12:42:35 +08:00
|
|
|
func GetNode(macaddress string, network string) (models.Node, error) {
|
2021-03-26 00:17:52 +08:00
|
|
|
|
2021-04-25 06:03:26 +08:00
|
|
|
var node models.Node
|
2021-03-26 00:17:52 +08:00
|
|
|
|
2021-10-27 00:27:29 +08:00
|
|
|
key, err := logic.GetRecordKey(macaddress, network)
|
2021-07-22 06:55:19 +08:00
|
|
|
if err != nil {
|
|
|
|
return node, err
|
|
|
|
}
|
|
|
|
data, err := database.FetchRecord(database.NODES_TABLE_NAME, key)
|
|
|
|
if err != nil {
|
2021-08-03 06:06:26 +08:00
|
|
|
if data == "" {
|
|
|
|
data, err = database.FetchRecord(database.DELETED_NODES_TABLE_NAME, key)
|
|
|
|
err = json.Unmarshal([]byte(data), &node)
|
|
|
|
}
|
2021-07-22 06:55:19 +08:00
|
|
|
return node, err
|
|
|
|
}
|
|
|
|
if err = json.Unmarshal([]byte(data), &node); err != nil {
|
|
|
|
return node, err
|
|
|
|
}
|
2021-10-27 00:27:29 +08:00
|
|
|
logic.SetNodeDefaults(&node)
|
2021-03-26 00:17:52 +08:00
|
|
|
|
|
|
|
return node, err
|
|
|
|
}
|
|
|
|
|
2021-05-30 01:22:18 +08:00
|
|
|
func GetIntClient(clientid string) (models.IntClient, error) {
|
|
|
|
|
2021-07-21 05:18:45 +08:00
|
|
|
var client models.IntClient
|
2021-05-30 01:22:18 +08:00
|
|
|
|
2021-07-22 06:55:19 +08:00
|
|
|
value, err := database.FetchRecord(database.INT_CLIENTS_TABLE_NAME, clientid)
|
|
|
|
if err != nil {
|
|
|
|
return client, err
|
|
|
|
}
|
|
|
|
if err = json.Unmarshal([]byte(value), &client); err != nil {
|
|
|
|
return models.IntClient{}, err
|
|
|
|
}
|
|
|
|
return client, nil
|
2021-05-30 01:22:18 +08:00
|
|
|
}
|