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" "errors"
"fmt" "fmt"
"net/http" "net/http"
"strings"
"github.com/gorilla/mux" "github.com/gorilla/mux"
"github.com/gravitl/netmaker/database" "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")) logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
return 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) entry, err = logic.CreateDNS(entry)
if err != nil { if err != nil {
logger.Log(0, r.Header.Get("user"), 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"} entry := models.DNSEntry{Address: "10.0.0.2", Network: "skynet"}
err := logic.ValidateDNSCreate(entry) err := logic.ValidateDNSCreate(entry)
assert.NotNil(t, err) 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) { t.Run("NameTooLong", func(t *testing.T) {
name := "" name := ""
@ -414,13 +414,13 @@ func TestValidateDNSCreate(t *testing.T) {
entry := models.DNSEntry{Address: "10.10.10.5", Name: "white space", Network: "skynet"} entry := models.DNSEntry{Address: "10.10.10.5", Name: "white space", Network: "skynet"}
err := logic.ValidateDNSCreate(entry) err := logic.ValidateDNSCreate(entry)
assert.NotNil(t, err) 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) { t.Run("AllSpaces", func(t *testing.T) {
entry := models.DNSEntry{Address: "10.10.10.5", Name: " ", Network: "skynet"} entry := models.DNSEntry{Address: "10.10.10.5", Name: " ", Network: "skynet"}
err := logic.ValidateDNSCreate(entry) err := logic.ValidateDNSCreate(entry)
assert.NotNil(t, err) 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 ( import (
"encoding/json" "encoding/json"
"errors"
"fmt" "fmt"
"os" "os"
"regexp" "regexp"
@ -11,6 +12,7 @@ import (
"github.com/gravitl/netmaker/database" "github.com/gravitl/netmaker/database"
"github.com/gravitl/netmaker/logger" "github.com/gravitl/netmaker/logger"
"github.com/gravitl/netmaker/models" "github.com/gravitl/netmaker/models"
"github.com/gravitl/netmaker/servercfg"
"github.com/txn2/txeh" "github.com/txn2/txeh"
) )
@ -104,7 +106,7 @@ func GetNodeDNS(network string) ([]models.DNSEntry, error) {
if err != nil { if err != nil {
return dns, err return dns, err
} }
defaultDomain := servercfg.GetDefaultDomain()
for _, node := range nodes { for _, node := range nodes {
if node.Network != network { if node.Network != network {
continue continue
@ -114,7 +116,7 @@ func GetNodeDNS(network string) ([]models.DNSEntry, error) {
continue continue
} }
var entry = models.DNSEntry{} 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 entry.Network = network
if node.Address.IP != nil { if node.Address.IP != nil {
entry.Address = node.Address.IP.String() 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 // ValidateDNSCreate - checks if an entry is valid
func ValidateDNSCreate(entry models.DNSEntry) error { 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 := validator.New()
_ = v.RegisterValidation("whitespace", func(f1 validator.FieldLevel) bool { _ = v.RegisterValidation("whitespace", func(f1 validator.FieldLevel) bool {