set match domain on update

This commit is contained in:
abhishek9686 2025-08-25 10:25:13 +05:30
parent 4e8ab0ec3c
commit 3f2b480057
4 changed files with 82 additions and 2 deletions

View file

@ -90,6 +90,11 @@ func createNs(w http.ResponseWriter, r *http.Request) {
if gNs, ok := logic.GlobalNsList[req.Name]; ok {
req.Servers = gNs.IPs
}
if !servercfg.IsPro {
req.Tags = datatypes.JSONMap{
"*": struct{}{},
}
}
ns := schema.Nameserver{
ID: uuid.New().String(),
Name: req.Name,
@ -222,6 +227,7 @@ func updateNs(w http.ResponseWriter, r *http.Request) {
}
ns.Servers = updateNs.Servers
ns.Tags = updateNs.Tags
ns.MatchDomain = updateNs.MatchDomain
ns.Description = updateNs.Description
ns.Name = updateNs.Name
ns.Status = updateNs.Status

View file

@ -394,6 +394,44 @@ func ValidateUpdateNameserverReq(updateNs schema.Nameserver) error {
return nil
}
func GetNameserversForNode(node *models.Node) (returnNsLi []models.Nameserver) {
ns := &schema.Nameserver{
NetworkID: node.Network,
}
nsLi, _ := ns.ListByNetwork(db.WithContext(context.TODO()))
for _, nsI := range nsLi {
if !nsI.Status {
continue
}
_, all := nsI.Tags["*"]
if all {
returnNsLi = append(returnNsLi, models.Nameserver{
IPs: nsI.Servers,
MatchDomain: nsI.MatchDomain,
})
continue
}
for tagI := range node.Tags {
if _, ok := nsI.Tags[tagI.String()]; ok {
returnNsLi = append(returnNsLi, models.Nameserver{
IPs: nsI.Servers,
MatchDomain: nsI.MatchDomain,
})
}
}
}
if node.IsInternetGateway {
globalNs := models.Nameserver{
MatchDomain: ".",
}
for _, nsI := range GlobalNsList {
globalNs.IPs = append(globalNs.IPs, nsI.IPs...)
}
returnNsLi = append(returnNsLi, globalNs)
}
return
}
func GetNameserversForHost(h *models.Host) (returnNsLi []models.Nameserver) {
if h.DNS != "yes" {
return

View file

@ -1328,7 +1328,7 @@ func getUserRemoteAccessGwsV1(w http.ResponseWriter, r *http.Request) {
Addresses: utils.NoEmptyStringToCsv(node.Address.String(), node.Address6.String()),
}
if !node.IsInternetGateway {
hNs := logic.GetNameserversForHost(host)
hNs := logic.GetNameserversForNode(&node)
for _, nsI := range hNs {
gw.MatchDomains = append(gw.MatchDomains, nsI.MatchDomain)
}
@ -1379,7 +1379,7 @@ func getUserRemoteAccessGwsV1(w http.ResponseWriter, r *http.Request) {
Addresses: utils.NoEmptyStringToCsv(node.Address.String(), node.Address6.String()),
}
if !node.IsInternetGateway {
hNs := logic.GetNameserversForHost(host)
hNs := logic.GetNameserversForNode(&node)
for _, nsI := range hNs {
gw.MatchDomains = append(gw.MatchDomains, nsI.MatchDomain)
}

36
pro/logic/dns.go Normal file
View file

@ -0,0 +1,36 @@
package logic
import (
"errors"
"github.com/gravitl/netmaker/logic"
"github.com/gravitl/netmaker/models"
"github.com/gravitl/netmaker/schema"
)
func ValidateNameserverReq(ns schema.Nameserver) error {
if ns.Name == "" {
return errors.New("name is required")
}
if ns.NetworkID == "" {
return errors.New("network is required")
}
if len(ns.Servers) == 0 {
return errors.New("atleast one nameserver should be specified")
}
if !logic.IsValidMatchDomain(ns.MatchDomain) {
return errors.New("invalid match domain")
}
if len(ns.Tags) > 0 {
for tagI := range ns.Tags {
if tagI == "*" {
continue
}
_, err := GetTag(models.TagID(tagI))
if err != nil {
return errors.New("invalid tag")
}
}
}
return nil
}