mirror of
https://github.com/gravitl/netmaker.git
synced 2025-10-05 16:57:51 +08:00
Merge branch 'develop' into fix-tests
This commit is contained in:
@@ -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 {
|
||||
|
Reference in New Issue
Block a user