From 599a24ce55b010b8d1538200f17e52c0c6a586fc Mon Sep 17 00:00:00 2001 From: abhishek9686 Date: Thu, 28 Aug 2025 00:26:32 +0530 Subject: [PATCH] separate pro and ce nameserver funcs --- logic/dns.go | 56 +++++++++----------- pro/initialize.go | 3 ++ pro/logic/dns.go | 128 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 156 insertions(+), 31 deletions(-) diff --git a/logic/dns.go b/logic/dns.go index ef0941cb..0fb39e07 100644 --- a/logic/dns.go +++ b/logic/dns.go @@ -20,6 +20,10 @@ import ( "github.com/txn2/txeh" ) +var GetNameserversForNode = getNameserversForNode +var GetNameserversForHost = getNameserversForHost +var ValidateNameserverReq = validateNameserverReq + type GlobalNs struct { ID string `json:"id"` IPs []string `json:"ips"` @@ -196,18 +200,8 @@ func GetGwDNS(node *models.Node) string { } func SetDNSOnWgConfig(gwNode *models.Node, extclient *models.ExtClient) { - if extclient.RemoteAccessClientID == "" { - if extclient.DNS == "" { - extclient.DNS = GetGwDNS(gwNode) - } - return - } - ns := GetNameserversForNode(gwNode) - for _, nsI := range ns { - if nsI.MatchDomain == "." { - extclient.DNS = GetGwDNS(gwNode) - break - } + if extclient.DNS == "" { + extclient.DNS = GetGwDNS(gwNode) } } @@ -404,7 +398,7 @@ func CreateDNS(entry models.DNSEntry) (models.DNSEntry, error) { return entry, err } -func ValidateNameserverReq(ns schema.Nameserver) error { +func validateNameserverReq(ns schema.Nameserver) error { if ns.Name == "" { return errors.New("name is required") } @@ -428,7 +422,7 @@ func ValidateNameserverReq(ns schema.Nameserver) error { return nil } -func GetNameserversForNode(node *models.Node) (returnNsLi []models.Nameserver) { +func getNameserversForNode(node *models.Node) (returnNsLi []models.Nameserver) { ns := &schema.Nameserver{ NetworkID: node.Network, } @@ -447,16 +441,16 @@ func GetNameserversForNode(node *models.Node) (returnNsLi []models.Nameserver) { } continue } - for tagI := range node.Tags { - if _, ok := nsI.Tags[tagI.String()]; ok { - for _, matchDomain := range nsI.MatchDomains { - returnNsLi = append(returnNsLi, models.Nameserver{ - IPs: nsI.Servers, - MatchDomain: matchDomain, - }) - } + + if _, ok := nsI.Nodes[node.ID.String()]; ok { + for _, matchDomain := range nsI.MatchDomains { + returnNsLi = append(returnNsLi, models.Nameserver{ + IPs: nsI.Servers, + MatchDomain: matchDomain, + }) } } + } if node.IsInternetGateway { globalNs := models.Nameserver{ @@ -470,7 +464,7 @@ func GetNameserversForNode(node *models.Node) (returnNsLi []models.Nameserver) { return } -func GetNameserversForHost(h *models.Host) (returnNsLi []models.Nameserver) { +func getNameserversForHost(h *models.Host) (returnNsLi []models.Nameserver) { if h.DNS != "yes" { return } @@ -497,17 +491,17 @@ func GetNameserversForHost(h *models.Host) (returnNsLi []models.Nameserver) { } continue } - for tagI := range node.Tags { - if _, ok := nsI.Tags[tagI.String()]; ok { - for _, matchDomain := range nsI.MatchDomains { - returnNsLi = append(returnNsLi, models.Nameserver{ - IPs: nsI.Servers, - MatchDomain: matchDomain, - }) - } + if _, ok := nsI.Nodes[node.ID.String()]; ok { + for _, matchDomain := range nsI.MatchDomains { + returnNsLi = append(returnNsLi, models.Nameserver{ + IPs: nsI.Servers, + MatchDomain: matchDomain, + }) } + } + } if node.IsInternetGateway { globalNs := models.Nameserver{ diff --git a/pro/initialize.go b/pro/initialize.go index 19883985..83b4225a 100644 --- a/pro/initialize.go +++ b/pro/initialize.go @@ -155,6 +155,9 @@ func InitPro() { logic.GetFwRulesForNodeAndPeerOnGw = proLogic.GetFwRulesForNodeAndPeerOnGw logic.GetFwRulesForUserNodesOnGw = proLogic.GetFwRulesForUserNodesOnGw logic.GetHostLocInfo = proLogic.GetHostLocInfo + logic.GetNameserversForHost = proLogic.GetNameserversForHost + logic.GetNameserversForNode = proLogic.GetNameserversForNode + logic.ValidateNameserverReq = proLogic.ValidateNameserverReq } diff --git a/pro/logic/dns.go b/pro/logic/dns.go index 80a0cf5f..1356692d 100644 --- a/pro/logic/dns.go +++ b/pro/logic/dns.go @@ -1,8 +1,10 @@ package logic import ( + "context" "errors" + "github.com/gravitl/netmaker/db" "github.com/gravitl/netmaker/logic" "github.com/gravitl/netmaker/models" "github.com/gravitl/netmaker/schema" @@ -41,3 +43,129 @@ func ValidateNameserverReq(ns 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 { + for _, matchDomain := range nsI.MatchDomains { + returnNsLi = append(returnNsLi, models.Nameserver{ + IPs: nsI.Servers, + MatchDomain: matchDomain, + }) + } + continue + } + foundTag := false + for tagI := range node.Tags { + if _, ok := nsI.Tags[tagI.String()]; ok { + for _, matchDomain := range nsI.MatchDomains { + returnNsLi = append(returnNsLi, models.Nameserver{ + IPs: nsI.Servers, + MatchDomain: matchDomain, + }) + } + foundTag = true + } + if foundTag { + break + } + } + if foundTag { + continue + } + if _, ok := nsI.Nodes[node.ID.String()]; ok { + for _, matchDomain := range nsI.MatchDomains { + returnNsLi = append(returnNsLi, models.Nameserver{ + IPs: nsI.Servers, + MatchDomain: matchDomain, + }) + } + } + } + if node.IsInternetGateway { + globalNs := models.Nameserver{ + MatchDomain: ".", + } + for _, nsI := range logic.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 + } + for _, nodeID := range h.Nodes { + node, err := logic.GetNodeByID(nodeID) + if err != nil { + continue + } + 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 { + for _, matchDomain := range nsI.MatchDomains { + returnNsLi = append(returnNsLi, models.Nameserver{ + IPs: nsI.Servers, + MatchDomain: matchDomain, + }) + } + continue + } + foundTag := false + for tagI := range node.Tags { + if _, ok := nsI.Tags[tagI.String()]; ok { + for _, matchDomain := range nsI.MatchDomains { + returnNsLi = append(returnNsLi, models.Nameserver{ + IPs: nsI.Servers, + MatchDomain: matchDomain, + }) + } + foundTag = true + } + if foundTag { + break + } + } + if foundTag { + continue + } + if _, ok := nsI.Nodes[node.ID.String()]; ok { + for _, matchDomain := range nsI.MatchDomains { + returnNsLi = append(returnNsLi, models.Nameserver{ + IPs: nsI.Servers, + MatchDomain: matchDomain, + }) + } + } + + } + if node.IsInternetGateway { + globalNs := models.Nameserver{ + MatchDomain: ".", + } + for _, nsI := range logic.GlobalNsList { + globalNs.IPs = append(globalNs.IPs, nsI.IPs...) + } + returnNsLi = append(returnNsLi, globalNs) + } + } + return +}