Browse Source

adding returns for auth to remove superfluous writeheader calls

afeiszli 4 years ago
parent
commit
2063b3dcdc
2 changed files with 29 additions and 3 deletions
  1. 15 3
      controllers/nodeHttpController.go
  2. 14 0
      controllers/userHttpController.go

+ 15 - 3
controllers/nodeHttpController.go

@@ -53,15 +53,18 @@ func authenticate(response http.ResponseWriter, request *http.Request) {
 
 
     if decoderErr != nil {
     if decoderErr != nil {
         returnErrorResponse(response, request, errorResponse)
         returnErrorResponse(response, request, errorResponse)
-    } else {
+	return
+	} else {
         errorResponse.Code = http.StatusBadRequest
         errorResponse.Code = http.StatusBadRequest
         if authRequest.MacAddress == "" {
         if authRequest.MacAddress == "" {
             errorResponse.Message = "W1R3: MacAddress can't be empty"
             errorResponse.Message = "W1R3: MacAddress can't be empty"
             returnErrorResponse(response, request, errorResponse)
             returnErrorResponse(response, request, errorResponse)
+	    return
         } else if authRequest.Password == "" {
         } else if authRequest.Password == "" {
             errorResponse.Message = "W1R3: Password can't be empty"
             errorResponse.Message = "W1R3: Password can't be empty"
             returnErrorResponse(response, request, errorResponse)
             returnErrorResponse(response, request, errorResponse)
-        } else {
+            return
+       } else {
 
 
             //Search DB for node with Mac Address. Ignore pending nodes (they should not be able to authenticate with API untill approved).
             //Search DB for node with Mac Address. Ignore pending nodes (they should not be able to authenticate with API untill approved).
             collection := mongoconn.Client.Database("wirecat").Collection("nodes")
             collection := mongoconn.Client.Database("wirecat").Collection("nodes")
@@ -72,6 +75,7 @@ func authenticate(response http.ResponseWriter, request *http.Request) {
 
 
             if err != nil {
             if err != nil {
                 returnErrorResponse(response, request, errorResponse)
                 returnErrorResponse(response, request, errorResponse)
+		return
             }
             }
 
 
 	   //compare password from request to stored password in database
 	   //compare password from request to stored password in database
@@ -80,12 +84,14 @@ func authenticate(response http.ResponseWriter, request *http.Request) {
 	   err = bcrypt.CompareHashAndPassword([]byte(result.Password), []byte(authRequest.Password))
 	   err = bcrypt.CompareHashAndPassword([]byte(result.Password), []byte(authRequest.Password))
 	   if err != nil {
 	   if err != nil {
 		   returnErrorResponse(response, request, errorResponse)
 		   returnErrorResponse(response, request, errorResponse)
+		   return
 	   } else {
 	   } else {
 		//Create a new JWT for the node
 		//Create a new JWT for the node
                 tokenString, _ := functions.CreateJWT(authRequest.MacAddress, result.Group)
                 tokenString, _ := functions.CreateJWT(authRequest.MacAddress, result.Group)
 
 
                 if tokenString == "" {
                 if tokenString == "" {
                     returnErrorResponse(response, request, errorResponse)
                     returnErrorResponse(response, request, errorResponse)
+		    return
                 }
                 }
 
 
                 var successResponse = models.SuccessResponse{
                 var successResponse = models.SuccessResponse{
@@ -101,6 +107,7 @@ func authenticate(response http.ResponseWriter, request *http.Request) {
 
 
                 if jsonError != nil {
                 if jsonError != nil {
                     returnErrorResponse(response, request, errorResponse)
                     returnErrorResponse(response, request, errorResponse)
+		    return
                 }
                 }
                 response.Header().Set("Content-Type", "application/json")
                 response.Header().Set("Content-Type", "application/json")
                 response.Write(successJSONResponse)
                 response.Write(successJSONResponse)
@@ -134,6 +141,7 @@ func authorize(groupCheck bool, authGroup string, next http.Handler) http.Handle
                                 Code: http.StatusNotFound, Message: "W1R3: This group does not exist. ",
                                 Code: http.StatusNotFound, Message: "W1R3: This group does not exist. ",
                         }
                         }
                         returnErrorResponse(w, r, errorResponse)
                         returnErrorResponse(w, r, errorResponse)
+			return
 
 
                 } else {
                 } else {
 
 
@@ -155,7 +163,8 @@ func authorize(groupCheck bool, authGroup string, next http.Handler) http.Handle
                                 Code: http.StatusUnauthorized, Message: "W1R3: Missing Auth Token.",
                                 Code: http.StatusUnauthorized, Message: "W1R3: Missing Auth Token.",
                         }
                         }
                         returnErrorResponse(w, r, errorResponse)
                         returnErrorResponse(w, r, errorResponse)
-                }
+			return
+		}
 
 
 
 
 		//This checks if
 		//This checks if
@@ -169,6 +178,7 @@ func authorize(groupCheck bool, authGroup string, next http.Handler) http.Handle
                                 Code: http.StatusUnauthorized, Message: "W1R3: Error Verifying Auth Token.",
                                 Code: http.StatusUnauthorized, Message: "W1R3: Error Verifying Auth Token.",
                         }
                         }
                         returnErrorResponse(w, r, errorResponse)
                         returnErrorResponse(w, r, errorResponse)
+			return
 		}
 		}
 
 
 		var isAuthorized = false
 		var isAuthorized = false
@@ -192,6 +202,7 @@ func authorize(groupCheck bool, authGroup string, next http.Handler) http.Handle
 					Code: http.StatusUnauthorized, Message: "W1R3: Missing Auth Token.",
 					Code: http.StatusUnauthorized, Message: "W1R3: Missing Auth Token.",
 					}
 					}
 					returnErrorResponse(w, r, errorResponse)
 					returnErrorResponse(w, r, errorResponse)
+					return
 		                }
 		                }
                                 isAuthorized = (node.Group == params["group"])
                                 isAuthorized = (node.Group == params["group"])
 			case "node":
 			case "node":
@@ -207,6 +218,7 @@ func authorize(groupCheck bool, authGroup string, next http.Handler) http.Handle
 				Code: http.StatusUnauthorized, Message: "W1R3: You are unauthorized to access this endpoint.",
 				Code: http.StatusUnauthorized, Message: "W1R3: You are unauthorized to access this endpoint.",
 			}
 			}
 			returnErrorResponse(w, r, errorResponse)
 			returnErrorResponse(w, r, errorResponse)
+			return
 		} else {
 		} else {
 			//If authorized, this function passes along it's request and output to the appropriate route function.
 			//If authorized, this function passes along it's request and output to the appropriate route function.
 			next.ServeHTTP(w, r)
 			next.ServeHTTP(w, r)

+ 14 - 0
controllers/userHttpController.go

@@ -46,14 +46,17 @@ func authenticateUser(response http.ResponseWriter, request *http.Request) {
 
 
     if decoderErr != nil {
     if decoderErr != nil {
         returnErrorResponse(response, request, errorResponse)
         returnErrorResponse(response, request, errorResponse)
+	return
     } else {
     } else {
         errorResponse.Code = http.StatusBadRequest
         errorResponse.Code = http.StatusBadRequest
         if authRequest.UserName == "" {
         if authRequest.UserName == "" {
             errorResponse.Message = "W1R3: Username can't be empty"
             errorResponse.Message = "W1R3: Username can't be empty"
             returnErrorResponse(response, request, errorResponse)
             returnErrorResponse(response, request, errorResponse)
+	    return
         } else if authRequest.Password == "" {
         } else if authRequest.Password == "" {
             errorResponse.Message = "W1R3: Password can't be empty"
             errorResponse.Message = "W1R3: Password can't be empty"
             returnErrorResponse(response, request, errorResponse)
             returnErrorResponse(response, request, errorResponse)
+	    return
         } else {
         } else {
 
 
             //Search DB for node with Mac Address. Ignore pending nodes (they should not be able to authenticate with API untill approved).
             //Search DB for node with Mac Address. Ignore pending nodes (they should not be able to authenticate with API untill approved).
@@ -64,7 +67,9 @@ func authenticateUser(response http.ResponseWriter, request *http.Request) {
             defer cancel()
             defer cancel()
 
 
             if err != nil {
             if err != nil {
+		errorResponse.Message = "W1R3: User " + authRequest.UserName + " not found."
                 returnErrorResponse(response, request, errorResponse)
                 returnErrorResponse(response, request, errorResponse)
+		return
             }
             }
 
 
 	   //compare password from request to stored password in database
 	   //compare password from request to stored password in database
@@ -72,13 +77,18 @@ func authenticateUser(response http.ResponseWriter, request *http.Request) {
 	   //TODO: Consider a way of hashing the password client side before sending, or using certificates
 	   //TODO: Consider a way of hashing the password client side before sending, or using certificates
 	   err = bcrypt.CompareHashAndPassword([]byte(result.Password), []byte(authRequest.Password))
 	   err = bcrypt.CompareHashAndPassword([]byte(result.Password), []byte(authRequest.Password))
 	   if err != nil {
 	   if err != nil {
+                        errorResponse = models.ErrorResponse{
+                                Code: http.StatusUnauthorized, Message: "W1R3: Wrong Password.",
+                        }
 		   returnErrorResponse(response, request, errorResponse)
 		   returnErrorResponse(response, request, errorResponse)
+		   return
 	   } else {
 	   } else {
 		//Create a new JWT for the node
 		//Create a new JWT for the node
                 tokenString, _ := functions.CreateUserJWT(authRequest.UserName, result.IsAdmin)
                 tokenString, _ := functions.CreateUserJWT(authRequest.UserName, result.IsAdmin)
 
 
                 if tokenString == "" {
                 if tokenString == "" {
                     returnErrorResponse(response, request, errorResponse)
                     returnErrorResponse(response, request, errorResponse)
+		    return
                 }
                 }
 
 
                 var successResponse = models.SuccessResponse{
                 var successResponse = models.SuccessResponse{
@@ -94,6 +104,7 @@ func authenticateUser(response http.ResponseWriter, request *http.Request) {
 
 
                 if jsonError != nil {
                 if jsonError != nil {
                     returnErrorResponse(response, request, errorResponse)
                     returnErrorResponse(response, request, errorResponse)
+		    return
                 }
                 }
                 response.Header().Set("Content-Type", "application/json")
                 response.Header().Set("Content-Type", "application/json")
                 response.Write(successJSONResponse)
                 response.Write(successJSONResponse)
@@ -134,6 +145,7 @@ func authorizeUser(next http.Handler) http.HandlerFunc {
                                 Code: http.StatusUnauthorized, Message: "W1R3: Missing Auth Token.",
                                 Code: http.StatusUnauthorized, Message: "W1R3: Missing Auth Token.",
                         }
                         }
                         returnErrorResponse(w, r, errorResponse)
                         returnErrorResponse(w, r, errorResponse)
+			return
 		}
 		}
 
 
 		//This checks if
 		//This checks if
@@ -147,6 +159,7 @@ func authorizeUser(next http.Handler) http.HandlerFunc {
                                 Code: http.StatusUnauthorized, Message: "W1R3: Error Verifying Auth Token.",
                                 Code: http.StatusUnauthorized, Message: "W1R3: Error Verifying Auth Token.",
                         }
                         }
                         returnErrorResponse(w, r, errorResponse)
                         returnErrorResponse(w, r, errorResponse)
+			return
 		}
 		}
 
 
 		isAuthorized := username != ""
 		isAuthorized := username != ""
@@ -156,6 +169,7 @@ func authorizeUser(next http.Handler) http.HandlerFunc {
 				Code: http.StatusUnauthorized, Message: "W1R3: You are unauthorized to access this endpoint.",
 				Code: http.StatusUnauthorized, Message: "W1R3: You are unauthorized to access this endpoint.",
 			}
 			}
 			returnErrorResponse(w, r, errorResponse)
 			returnErrorResponse(w, r, errorResponse)
+			return
 		} else {
 		} else {
 			//If authorized, this function passes along it's request and output to the appropriate route function.
 			//If authorized, this function passes along it's request and output to the appropriate route function.
 			next.ServeHTTP(w, r)
 			next.ServeHTTP(w, r)