Skip to content

Commit fc8675b

Browse files
authored
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
1 parent b0f09e3 commit fc8675b

File tree

3 files changed

+21
-7
lines changed

3 files changed

+21
-7
lines changed

controllers/dns.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"errors"
66
"fmt"
77
"net/http"
8+
"strings"
89

910
"github.com/gorilla/mux"
1011
"github.com/gravitl/netmaker/database"
@@ -162,7 +163,10 @@ func createDNS(w http.ResponseWriter, r *http.Request) {
162163
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
163164
return
164165
}
165-
166+
// check if default domain is appended if not append
167+
if !strings.HasSuffix(entry.Name, servercfg.GetDefaultDomain()) {
168+
entry.Name += "." + servercfg.GetDefaultDomain()
169+
}
166170
entry, err = logic.CreateDNS(entry)
167171
if err != nil {
168172
logger.Log(0, r.Header.Get("user"),

controllers/dns_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -391,7 +391,7 @@ func TestValidateDNSCreate(t *testing.T) {
391391
entry := models.DNSEntry{Address: "10.0.0.2", Network: "skynet"}
392392
err := logic.ValidateDNSCreate(entry)
393393
assert.NotNil(t, err)
394-
assert.Contains(t, err.Error(), "Field validation for 'Name' failed on the 'required' tag")
394+
assert.Contains(t, err.Error(), "invalid input")
395395
})
396396
t.Run("NameTooLong", func(t *testing.T) {
397397
name := ""
@@ -414,13 +414,13 @@ func TestValidateDNSCreate(t *testing.T) {
414414
entry := models.DNSEntry{Address: "10.10.10.5", Name: "white space", Network: "skynet"}
415415
err := logic.ValidateDNSCreate(entry)
416416
assert.NotNil(t, err)
417-
assert.Contains(t, err.Error(), "Field validation for 'Name' failed on the 'whitespace' tag")
417+
assert.Contains(t, err.Error(), "invalid input")
418418
})
419419
t.Run("AllSpaces", func(t *testing.T) {
420420
entry := models.DNSEntry{Address: "10.10.10.5", Name: " ", Network: "skynet"}
421421
err := logic.ValidateDNSCreate(entry)
422422
assert.NotNil(t, err)
423-
assert.Contains(t, err.Error(), "Field validation for 'Name' failed on the 'whitespace' tag")
423+
assert.Contains(t, err.Error(), "invalid input")
424424
})
425425

426426
}

logic/dns.go

+13-3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package logic
22

33
import (
44
"encoding/json"
5+
"errors"
56
"fmt"
67
"os"
78
"regexp"
@@ -11,6 +12,7 @@ import (
1112
"github.com/gravitl/netmaker/database"
1213
"github.com/gravitl/netmaker/logger"
1314
"github.com/gravitl/netmaker/models"
15+
"github.com/gravitl/netmaker/servercfg"
1416
"github.com/txn2/txeh"
1517
)
1618

@@ -104,7 +106,7 @@ func GetNodeDNS(network string) ([]models.DNSEntry, error) {
104106
if err != nil {
105107
return dns, err
106108
}
107-
109+
defaultDomain := servercfg.GetDefaultDomain()
108110
for _, node := range nodes {
109111
if node.Network != network {
110112
continue
@@ -114,7 +116,7 @@ func GetNodeDNS(network string) ([]models.DNSEntry, error) {
114116
continue
115117
}
116118
var entry = models.DNSEntry{}
117-
entry.Name = fmt.Sprintf("%s.%s", host.Name, network)
119+
entry.Name = fmt.Sprintf("%s.%s.%s", host.Name, network, defaultDomain)
118120
entry.Network = network
119121
if node.Address.IP != nil {
120122
entry.Address = node.Address.IP.String()
@@ -224,9 +226,17 @@ func SortDNSEntrys(unsortedDNSEntrys []models.DNSEntry) {
224226
})
225227
}
226228

229+
// IsNetworkNameValid - checks if a netid of a network uses valid characters
230+
func IsDNSEntryValid(d string) bool {
231+
re := regexp.MustCompile(`^[A-Za-z0-9-.]+$`)
232+
return re.MatchString(d)
233+
}
234+
227235
// ValidateDNSCreate - checks if an entry is valid
228236
func ValidateDNSCreate(entry models.DNSEntry) error {
229-
237+
if !IsDNSEntryValid(entry.Name) {
238+
return errors.New("invalid input. Only uppercase letters (A-Z), lowercase letters (a-z), numbers (0-9), minus sign (-) and dots (.) are allowed")
239+
}
230240
v := validator.New()
231241

232242
_ = v.RegisterValidation("whitespace", func(f1 validator.FieldLevel) bool {

0 commit comments

Comments
 (0)