Browse Source

edited auth for deleted nodes

worker-9 4 years ago
parent
commit
c799df59ce
5 changed files with 42 additions and 4 deletions
  1. 13 1
      controllers/authGrpc.go
  2. 26 1
      functions/helpers.go
  3. 1 1
      go.mod
  4. 1 1
      netclient/functions/checkin.go
  5. 1 0
      netclient/functions/common.go

+ 13 - 1
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.")
 	}
 

+ 26 - 1
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 {

+ 1 - 1
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

+ 1 - 1
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 {

+ 1 - 0
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,