NET-1867: add default domain to all entries (#3252)

* add dns entry validation check

* append default domain if not append

* add dot for default domain

* fix dns tests
This commit is contained in:
Abhishek K 2024-12-16 12:18:32 +04:00 committed by GitHub
parent b0f09e3517
commit fc8675bf9c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 21 additions and 7 deletions

View file

@ -5,6 +5,7 @@ import (
"errors"
"fmt"
"net/http"
"strings"
"github.com/gorilla/mux"
"github.com/gravitl/netmaker/database"
@ -162,7 +163,10 @@ func createDNS(w http.ResponseWriter, r *http.Request) {
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
return
}
// check if default domain is appended if not append
if !strings.HasSuffix(entry.Name, servercfg.GetDefaultDomain()) {
entry.Name += "." + servercfg.GetDefaultDomain()
}
entry, err = logic.CreateDNS(entry)
if err != nil {
logger.Log(0, r.Header.Get("user"),

View file

@ -391,7 +391,7 @@ func TestValidateDNSCreate(t *testing.T) {
entry := models.DNSEntry{Address: "10.0.0.2", Network: "skynet"}
err := logic.ValidateDNSCreate(entry)
assert.NotNil(t, err)
assert.Contains(t, err.Error(), "Field validation for 'Name' failed on the 'required' tag")
assert.Contains(t, err.Error(), "invalid input")
})
t.Run("NameTooLong", func(t *testing.T) {
name := ""
@ -414,13 +414,13 @@ func TestValidateDNSCreate(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")
assert.Contains(t, err.Error(), "invalid input")
})
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")
assert.Contains(t, err.Error(), "invalid input")
})
}

View file

@ -2,6 +2,7 @@ package logic
import (
"encoding/json"
"errors"
"fmt"
"os"
"regexp"
@ -11,6 +12,7 @@ import (
"github.com/gravitl/netmaker/database"
"github.com/gravitl/netmaker/logger"
"github.com/gravitl/netmaker/models"
"github.com/gravitl/netmaker/servercfg"
"github.com/txn2/txeh"
)
@ -104,7 +106,7 @@ func GetNodeDNS(network string) ([]models.DNSEntry, error) {
if err != nil {
return dns, err
}
defaultDomain := servercfg.GetDefaultDomain()
for _, node := range nodes {
if node.Network != network {
continue
@ -114,7 +116,7 @@ func GetNodeDNS(network string) ([]models.DNSEntry, error) {
continue
}
var entry = models.DNSEntry{}
entry.Name = fmt.Sprintf("%s.%s", host.Name, network)
entry.Name = fmt.Sprintf("%s.%s.%s", host.Name, network, defaultDomain)
entry.Network = network
if node.Address.IP != nil {
entry.Address = node.Address.IP.String()
@ -224,9 +226,17 @@ func SortDNSEntrys(unsortedDNSEntrys []models.DNSEntry) {
})
}
// IsNetworkNameValid - checks if a netid of a network uses valid characters
func IsDNSEntryValid(d string) bool {
re := regexp.MustCompile(`^[A-Za-z0-9-.]+$`)
return re.MatchString(d)
}
// ValidateDNSCreate - checks if an entry is valid
func ValidateDNSCreate(entry models.DNSEntry) error {
if !IsDNSEntryValid(entry.Name) {
return errors.New("invalid input. Only uppercase letters (A-Z), lowercase letters (a-z), numbers (0-9), minus sign (-) and dots (.) are allowed")
}
v := validator.New()
_ = v.RegisterValidation("whitespace", func(f1 validator.FieldLevel) bool {