diff --git a/controllers/authGrpc.go b/controllers/authGrpc.go index b7983440..f15acdb0 100644 --- a/controllers/authGrpc.go +++ b/controllers/authGrpc.go @@ -82,7 +82,19 @@ func grpcAuthorize(ctx context.Context) error { } emptynode := models.Node{} node, err := functions.GetNodeByMacAddress(network, mac) - if err != nil || node.MacAddress == emptynode.MacAddress { + if !database.IsEmptyRecord(err) { + if node, err = functions.GetDeletedNodeByMacAddress(network, mac); err != nil { + if !database.IsEmptyRecord(err) { + return status.Errorf(codes.Unauthenticated, "Node does not exist.") + } + } else { + node.SetID() + if functions.RemoveDeletedNode(node.ID) { + return nil + } + return status.Errorf(codes.Unauthenticated, "Node does not exist.") + } + } else if err != nil || node.MacAddress == emptynode.MacAddress { return status.Errorf(codes.Unauthenticated, "Node does not exist.") } diff --git a/functions/helpers.go b/functions/helpers.go index 9a9c581e..87f2c683 100644 --- a/functions/helpers.go +++ b/functions/helpers.go @@ -264,7 +264,7 @@ func NetworkNodesUpdateAction(networkName string, action string) error { node.SetID() database.Insert(node.ID, string(data), database.NODES_TABLE_NAME) } - } + } return nil } @@ -546,6 +546,31 @@ func GetNodeByMacAddress(network string, macaddress string) (models.Node, error) return node, nil } +func GetDeletedNodeByMacAddress(network string, macaddress string) (models.Node, error) { + + var node models.Node + + key, err := GetRecordKey(macaddress, network) + if err != nil { + return node, err + } + + record, err := database.FetchRecord(database.DELETED_NODES_TABLE_NAME, key) + if err != nil { + return models.Node{}, err + } + + if err = json.Unmarshal([]byte(record), &node); err != nil { + return models.Node{}, err + } + + return node, nil +} + +func RemoveDeletedNode(nodeid string) bool { + return database.DeleteRecord(database.DELETED_NODES_TABLE_NAME, nodeid) == nil +} + func DeleteAllIntClients() error { err := database.DeleteAllRecords(database.INT_CLIENTS_TABLE_NAME) if err != nil { diff --git a/go.mod b/go.mod index 783957c0..09a785d9 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/davecgh/go-spew v1.1.1 github.com/go-playground/validator/v10 v10.5.0 github.com/go-sql-driver/mysql v1.6.0 // indirect - github.com/golang-jwt/jwt/v4 v4.0.0 // indirect + github.com/golang-jwt/jwt/v4 v4.0.0 github.com/golang/protobuf v1.5.2 github.com/gorilla/handlers v1.5.1 github.com/gorilla/mux v1.8.0 diff --git a/netclient/functions/checkin.go b/netclient/functions/checkin.go index fd37918a..a549dd95 100644 --- a/netclient/functions/checkin.go +++ b/netclient/functions/checkin.go @@ -89,7 +89,7 @@ func setDNS(node *models.Node, servercfg config.ServerConfig, nodecfg *models.No } func checkNodeActions(node *models.Node, network string, servercfg config.ServerConfig, localNode *models.Node) string { - if (node.Action == models.NODE_UPDATE_KEY || localNode.Action == models.NODE_UPDATE_KEY) && + if (node.Action == models.NODE_UPDATE_KEY || localNode.Action == models.NODE_UPDATE_KEY) && node.IsStatic != "yes" { err := wireguard.SetWGKeyConfig(network, servercfg.GRPCAddress) if err != nil { diff --git a/netclient/functions/common.go b/netclient/functions/common.go index 2a708fed..bb43d6ae 100644 --- a/netclient/functions/common.go +++ b/netclient/functions/common.go @@ -278,6 +278,7 @@ func LeaveNetwork(network string) error { if err != nil { log.Printf("Failed to authenticate: %v", err) } else { + node.SetID() var header metadata.MD _, err = wcclient.DeleteNode( ctx,