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
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.NotNil(t, err)
assert.Contains(t, err.Error(), "Field validation for 'Name' failed on the 'name_unique' tag") 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() { func createHost() {

View File

@@ -3,6 +3,7 @@ package logic
import ( import (
"encoding/json" "encoding/json"
"os" "os"
"regexp"
"sort" "sort"
validator "github.com/go-playground/validator/v10" validator "github.com/go-playground/validator/v10"
@@ -203,6 +204,11 @@ func ValidateDNSCreate(entry models.DNSEntry) error {
v := validator.New() 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 { _ = v.RegisterValidation("name_unique", func(fl validator.FieldLevel) bool {
num, err := GetDNSEntryNum(entry.Name, entry.Network) num, err := GetDNSEntryNum(entry.Name, entry.Network)
return err == nil && num == 0 return err == nil && num == 0
@@ -227,6 +233,11 @@ func ValidateDNSUpdate(change models.DNSEntry, entry models.DNSEntry) error {
v := validator.New() 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 { _ = v.RegisterValidation("name_unique", func(fl validator.FieldLevel) bool {
//if name & net not changing name we are good //if name & net not changing name we are good
if change.Name == entry.Name && change.Network == entry.Network { 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 // DNSEntry - a DNS entry represented as struct
type DNSEntry struct { type DNSEntry struct {
Address string `json:"address" bson:"address" validate:"ip"` Address string `json:"address" validate:"ip"`
Address6 string `json:"address6" bson:"address6"` Address6 string `json:"address6"`
Name string `json:"name" bson:"name" validate:"required,name_unique,min=1,max=192"` Name string `json:"name" validate:"required,name_unique,min=1,max=192,whitespace"`
Network string `json:"network" bson:"network" validate:"network_exists"` Network string `json:"network" validate:"network_exists"`
} }