mirror of
https://github.com/gravitl/netmaker.git
synced 2025-09-07 13:44:17 +08:00
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:
parent
b0f09e3517
commit
fc8675bf9c
3 changed files with 21 additions and 7 deletions
|
@ -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"),
|
||||
|
|
|
@ -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")
|
||||
})
|
||||
|
||||
}
|
||||
|
|
16
logic/dns.go
16
logic/dns.go
|
@ -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 {
|
||||
|
|
Loading…
Add table
Reference in a new issue