Merge branch 'develop' into fix-tests

This commit is contained in:
Alex
2021-04-16 07:34:48 -04:00
committed by GitHub
25 changed files with 401 additions and 84 deletions

View File

@@ -104,7 +104,39 @@ func getNetworks(w http.ResponseWriter, r *http.Request) {
}
}
func validateNetwork(operation string, network models.Network) error {
func validateNetworkUpdate(network models.Network) error {
v := validator.New()
_ = v.RegisterValidation("addressrange_valid", func(fl validator.FieldLevel) bool {
isvalid := fl.Field().String() == "" || functions.IsIpv4CIDR(fl.Field().String())
return isvalid
})
_ = v.RegisterValidation("localrange_valid", func(fl validator.FieldLevel) bool {
isvalid := fl.Field().String() == "" || functions.IsIpv4CIDR(fl.Field().String())
return isvalid
})
_ = v.RegisterValidation("netid_valid", func(fl validator.FieldLevel) bool {
return true
})
_ = v.RegisterValidation("displayname_unique", func(fl validator.FieldLevel) bool {
return true
})
err := v.Struct(network)
if err != nil {
for _, e := range err.(validator.ValidationErrors) {
fmt.Println(e)
}
}
return err
}
func validateNetworkCreate(network models.Network) error {
v := validator.New()
@@ -113,27 +145,21 @@ func validateNetwork(operation string, network models.Network) error {
return isvalid
})
_ = v.RegisterValidation("localrange_valid", func(fl validator.FieldLevel) bool {
isvalid := !*network.IsLocal || functions.IsIpv4CIDR(fl.Field().String())
return isvalid
})
_ = v.RegisterValidation("localrange_valid", func(fl validator.FieldLevel) bool {
isvalid := fl.Field().String() == "" || functions.IsIpv4CIDR(fl.Field().String())
return isvalid
})
_ = v.RegisterValidation("netid_valid", func(fl validator.FieldLevel) bool {
isFieldUnique := false
inCharSet := false
if operation == "update" {
isFieldUnique = true
} else {
isFieldUnique, _ = functions.IsNetworkNameUnique(fl.Field().String())
inCharSet = functions.NameInNetworkCharSet(fl.Field().String())
}
_ = v.RegisterValidation("netid_valid", func(fl validator.FieldLevel) bool {
isFieldUnique, _ := functions.IsNetworkNameUnique(fl.Field().String())
inCharSet := functions.NameInNetworkCharSet(fl.Field().String())
return isFieldUnique && inCharSet
})
_ = v.RegisterValidation("displayname_unique", func(fl validator.FieldLevel) bool {
isFieldUnique, _ := functions.IsNetworkDisplayNameUnique(fl.Field().String())
return isFieldUnique || operation == "update"
})
_ = v.RegisterValidation("displayname_unique", func(fl validator.FieldLevel) bool {
isFieldUnique, _ := functions.IsNetworkDisplayNameUnique(fl.Field().String())
return isFieldUnique
})
err := v.Struct(network)
@@ -288,7 +314,13 @@ func updateNetwork(w http.ResponseWriter, r *http.Request) {
return
}
//NOTE: Network.NetID is intentionally NOT editable. It acts as a static ID for the network.
err = validateNetworkUpdate(networkChange)
if err != nil {
returnErrorResponse(w,r,formatError(err, "badrequest"))
return
}
//NOTE: Network.NetID is intentionally NOT editable. It acts as a static ID for the network.
//DisplayName can be changed instead, which is what shows on the front end
if networkChange.NetID != network.NetID {
returnErrorResponse(w, r, formatError(errors.New("NetID is not editable"), "badrequest"))
@@ -475,10 +507,21 @@ func createNetwork(w http.ResponseWriter, r *http.Request) {
//TODO: Not really doing good validation here. Same as createNode, updateNode, and updateNetwork
//Need to implement some better validation across the board
if network.IsLocal == nil {
falsevar := false
network.IsLocal = &falsevar
}
if network.IsLocal == nil {
falsevar := false
network.IsLocal = &falsevar
}
err = validateNetworkCreate(network)
if err != nil {
returnErrorResponse(w,r,formatError(err, "badrequest"))
return
}
network.SetDefaults()
network.SetNodesLastModified()
network.SetNetworkLastModified()
network.KeyUpdateTimeStamp = time.Now().Unix()
err = validateNetwork("create", network)
if err != nil {
@@ -538,14 +581,15 @@ func createAccessKey(w http.ResponseWriter, r *http.Request) {
if accesskey.Value == "" {
accesskey.Value = functions.GenKey()
}
if accesskey.Uses == 0 {
accesskey.Uses = 1
}
gconf, err := functions.GetGlobalConfig()
if err != nil {
returnErrorResponse(w, r, formatError(err, "internal"))
return
}
if accesskey.Uses == 0 {
accesskey.Uses = 1
}
_, gconf, err := functions.GetGlobalConfig()
if err != nil {
returnErrorResponse(w,r,formatError(err, "internal"))
return
}
privAddr := ""
if *network.IsLocal {