Browse Source

Merge pull request #814 from gravitl/hotfix_v0.11.0_user_comms

Hotfix v0.11.0 user comms
dcarns 3 years ago
parent
commit
d720916a66
4 changed files with 34 additions and 2 deletions
  1. 2 1
      controllers/network.go
  2. 24 0
      controllers/user.go
  3. 0 1
      mq/handlers.go
  4. 8 0
      netclient/functions/mqhandlers.go

+ 2 - 1
controllers/network.go

@@ -68,9 +68,10 @@ func getNetworks(w http.ResponseWriter, r *http.Request) {
 			allnetworks[i] = net
 		}
 	}
+
 	logger.Log(2, r.Header.Get("user"), "fetched networks.")
 	w.WriteHeader(http.StatusOK)
-	json.NewEncoder(w).Encode(filterCommsNetwork(allnetworks))
+	json.NewEncoder(w).Encode(allnetworks)
 }
 
 // Simple get network function

+ 24 - 0
controllers/user.go

@@ -12,6 +12,7 @@ import (
 	"github.com/gravitl/netmaker/logger"
 	"github.com/gravitl/netmaker/logic"
 	"github.com/gravitl/netmaker/models"
+	"github.com/gravitl/netmaker/servercfg"
 )
 
 func userHandlers(r *mux.Router) {
@@ -166,6 +167,11 @@ func createUser(w http.ResponseWriter, r *http.Request) {
 	// get node from body of request
 	_ = json.NewDecoder(r.Body).Decode(&user)
 
+	if !user.IsAdmin && isAddingComms(user.Networks) {
+		returnErrorResponse(w, r, formatError(fmt.Errorf("can not add comms network to non admin"), "badrequest"))
+		return
+	}
+
 	user, err := logic.CreateUser(user)
 
 	if err != nil {
@@ -194,6 +200,10 @@ func updateUserNetworks(w http.ResponseWriter, r *http.Request) {
 		returnErrorResponse(w, r, formatError(err, "internal"))
 		return
 	}
+	if !userchange.IsAdmin && isAddingComms(userchange.Networks) {
+		returnErrorResponse(w, r, formatError(fmt.Errorf("can not add comms network to non admin"), "badrequest"))
+		return
+	}
 
 	err = logic.UpdateUserNetworks(userchange.Networks, userchange.IsAdmin, &user)
 	if err != nil {
@@ -219,6 +229,10 @@ func updateUser(w http.ResponseWriter, r *http.Request) {
 		returnErrorResponse(w, r, formatError(fmt.Errorf("can not update user info for oauth user %s", username), "forbidden"))
 		return
 	}
+	if !user.IsAdmin && isAddingComms(user.Networks) {
+		returnErrorResponse(w, r, formatError(fmt.Errorf("can not add comms network to non admin"), "badrequest"))
+		return
+	}
 	var userchange models.User
 	// we decode our body request params
 	err = json.NewDecoder(r.Body).Decode(&userchange)
@@ -288,3 +302,13 @@ func deleteUser(w http.ResponseWriter, r *http.Request) {
 	logger.Log(1, username, "was deleted")
 	json.NewEncoder(w).Encode(params["username"] + " deleted.")
 }
+
+func isAddingComms(networks []string) bool {
+	commsID := servercfg.GetCommsID()
+	for i := range networks {
+		if networks[i] == commsID {
+			return true
+		}
+	}
+	return false
+}

+ 0 - 1
mq/handlers.go

@@ -18,7 +18,6 @@ func DefaultHandler(client mqtt.Client, msg mqtt.Message) {
 
 // Ping message Handler -- handles ping topic from client nodes
 func Ping(client mqtt.Client, msg mqtt.Message) {
-	logger.Log(0, "Ping Handler: ", msg.Topic())
 	go func() {
 		id, err := getID(msg.Topic())
 		if err != nil {

+ 8 - 0
netclient/functions/mqhandlers.go

@@ -55,6 +55,7 @@ func NodeUpdate(client mqtt.Client, msg mqtt.Message) {
 	// check if interface needs to delta
 	ifaceDelta := ncutils.IfaceDelta(&nodeCfg.Node, &newNode)
 	shouldDNSChange := nodeCfg.Node.DNSOn != newNode.DNSOn
+	hubChange := nodeCfg.Node.IsHub != newNode.IsHub
 
 	nodeCfg.Node = newNode
 	switch newNode.Action {
@@ -126,6 +127,13 @@ func NodeUpdate(client mqtt.Client, msg mqtt.Message) {
 		} else {
 			ncutils.Log("signalled finished interface update to server")
 		}
+	} else if hubChange {
+		doneErr := publishSignal(&commsCfg, &nodeCfg, ncutils.DONE)
+		if doneErr != nil {
+			ncutils.Log("could not notify server to update peers after hub change")
+		} else {
+			ncutils.Log("signalled finished hub update to server")
+		}
 	}
 	//deal with DNS
 	if newNode.DNSOn != "yes" && shouldDNSChange && nodeCfg.Node.Interface != "" {