validate dns entry does not contain whitespace (#2512)

This commit is contained in:
Matthew R Kasun 2023-08-22 02:20:28 -04:00 committed by GitHub
parent a775d7402f
commit d366c23c63
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 28 additions and 4 deletions

View file

@ -400,6 +400,19 @@ func TestValidateDNSCreate(t *testing.T) {
assert.NotNil(t, err)
assert.Contains(t, err.Error(), "Field validation for 'Name' failed on the 'name_unique' tag")
})
t.Run("WhiteSpace", func(t *testing.T) {
entry := models.DNSEntry{Address: "10.10.10.5", Name: "white space", Network: "skynet"}
err := logic.ValidateDNSCreate(entry)
assert.NotNil(t, err)
assert.Contains(t, err.Error(), "Field validation for 'Name' failed on the 'whitespace' tag")
})
t.Run("AllSpaces", func(t *testing.T) {
entry := models.DNSEntry{Address: "10.10.10.5", Name: " ", Network: "skynet"}
err := logic.ValidateDNSCreate(entry)
assert.NotNil(t, err)
assert.Contains(t, err.Error(), "Field validation for 'Name' failed on the 'whitespace' tag")
})
}
func createHost() {

View file

@ -3,6 +3,7 @@ package logic
import (
"encoding/json"
"os"
"regexp"
"sort"
validator "github.com/go-playground/validator/v10"
@ -203,6 +204,11 @@ func ValidateDNSCreate(entry models.DNSEntry) error {
v := validator.New()
_ = v.RegisterValidation("whitespace", func(f1 validator.FieldLevel) bool {
match, _ := regexp.MatchString(`\s`, entry.Name)
return !match
})
_ = v.RegisterValidation("name_unique", func(fl validator.FieldLevel) bool {
num, err := GetDNSEntryNum(entry.Name, entry.Network)
return err == nil && num == 0
@ -227,6 +233,11 @@ func ValidateDNSUpdate(change models.DNSEntry, entry models.DNSEntry) error {
v := validator.New()
_ = v.RegisterValidation("whitespace", func(f1 validator.FieldLevel) bool {
match, _ := regexp.MatchString(`\s`, entry.Name)
return !match
})
_ = v.RegisterValidation("name_unique", func(fl validator.FieldLevel) bool {
//if name & net not changing name we are good
if change.Name == entry.Name && change.Network == entry.Network {

View file

@ -42,8 +42,8 @@ type DNSUpdate struct {
// DNSEntry - a DNS entry represented as struct
type DNSEntry struct {
Address string `json:"address" bson:"address" validate:"ip"`
Address6 string `json:"address6" bson:"address6"`
Name string `json:"name" bson:"name" validate:"required,name_unique,min=1,max=192"`
Network string `json:"network" bson:"network" validate:"network_exists"`
Address string `json:"address" validate:"ip"`
Address6 string `json:"address6"`
Name string `json:"name" validate:"required,name_unique,min=1,max=192,whitespace"`
Network string `json:"network" validate:"network_exists"`
}