separate pro and ce nameserver funcs

This commit is contained in:
abhishek9686 2025-08-28 00:26:32 +05:30
parent 885b36810b
commit 599a24ce55
3 changed files with 156 additions and 31 deletions

View file

@ -20,6 +20,10 @@ import (
"github.com/txn2/txeh" "github.com/txn2/txeh"
) )
var GetNameserversForNode = getNameserversForNode
var GetNameserversForHost = getNameserversForHost
var ValidateNameserverReq = validateNameserverReq
type GlobalNs struct { type GlobalNs struct {
ID string `json:"id"` ID string `json:"id"`
IPs []string `json:"ips"` IPs []string `json:"ips"`
@ -196,18 +200,8 @@ func GetGwDNS(node *models.Node) string {
} }
func SetDNSOnWgConfig(gwNode *models.Node, extclient *models.ExtClient) { func SetDNSOnWgConfig(gwNode *models.Node, extclient *models.ExtClient) {
if extclient.RemoteAccessClientID == "" { if extclient.DNS == "" {
if extclient.DNS == "" { extclient.DNS = GetGwDNS(gwNode)
extclient.DNS = GetGwDNS(gwNode)
}
return
}
ns := GetNameserversForNode(gwNode)
for _, nsI := range ns {
if nsI.MatchDomain == "." {
extclient.DNS = GetGwDNS(gwNode)
break
}
} }
} }
@ -404,7 +398,7 @@ func CreateDNS(entry models.DNSEntry) (models.DNSEntry, error) {
return entry, err return entry, err
} }
func ValidateNameserverReq(ns schema.Nameserver) error { func validateNameserverReq(ns schema.Nameserver) error {
if ns.Name == "" { if ns.Name == "" {
return errors.New("name is required") return errors.New("name is required")
} }
@ -428,7 +422,7 @@ func ValidateNameserverReq(ns schema.Nameserver) error {
return nil return nil
} }
func GetNameserversForNode(node *models.Node) (returnNsLi []models.Nameserver) { func getNameserversForNode(node *models.Node) (returnNsLi []models.Nameserver) {
ns := &schema.Nameserver{ ns := &schema.Nameserver{
NetworkID: node.Network, NetworkID: node.Network,
} }
@ -447,16 +441,16 @@ func GetNameserversForNode(node *models.Node) (returnNsLi []models.Nameserver) {
} }
continue continue
} }
for tagI := range node.Tags {
if _, ok := nsI.Tags[tagI.String()]; ok { if _, ok := nsI.Nodes[node.ID.String()]; ok {
for _, matchDomain := range nsI.MatchDomains { for _, matchDomain := range nsI.MatchDomains {
returnNsLi = append(returnNsLi, models.Nameserver{ returnNsLi = append(returnNsLi, models.Nameserver{
IPs: nsI.Servers, IPs: nsI.Servers,
MatchDomain: matchDomain, MatchDomain: matchDomain,
}) })
}
} }
} }
} }
if node.IsInternetGateway { if node.IsInternetGateway {
globalNs := models.Nameserver{ globalNs := models.Nameserver{
@ -470,7 +464,7 @@ func GetNameserversForNode(node *models.Node) (returnNsLi []models.Nameserver) {
return return
} }
func GetNameserversForHost(h *models.Host) (returnNsLi []models.Nameserver) { func getNameserversForHost(h *models.Host) (returnNsLi []models.Nameserver) {
if h.DNS != "yes" { if h.DNS != "yes" {
return return
} }
@ -497,17 +491,17 @@ func GetNameserversForHost(h *models.Host) (returnNsLi []models.Nameserver) {
} }
continue 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 { if node.IsInternetGateway {
globalNs := models.Nameserver{ globalNs := models.Nameserver{

View file

@ -155,6 +155,9 @@ func InitPro() {
logic.GetFwRulesForNodeAndPeerOnGw = proLogic.GetFwRulesForNodeAndPeerOnGw logic.GetFwRulesForNodeAndPeerOnGw = proLogic.GetFwRulesForNodeAndPeerOnGw
logic.GetFwRulesForUserNodesOnGw = proLogic.GetFwRulesForUserNodesOnGw logic.GetFwRulesForUserNodesOnGw = proLogic.GetFwRulesForUserNodesOnGw
logic.GetHostLocInfo = proLogic.GetHostLocInfo logic.GetHostLocInfo = proLogic.GetHostLocInfo
logic.GetNameserversForHost = proLogic.GetNameserversForHost
logic.GetNameserversForNode = proLogic.GetNameserversForNode
logic.ValidateNameserverReq = proLogic.ValidateNameserverReq
} }

View file

@ -1,8 +1,10 @@
package logic package logic
import ( import (
"context"
"errors" "errors"
"github.com/gravitl/netmaker/db"
"github.com/gravitl/netmaker/logic" "github.com/gravitl/netmaker/logic"
"github.com/gravitl/netmaker/models" "github.com/gravitl/netmaker/models"
"github.com/gravitl/netmaker/schema" "github.com/gravitl/netmaker/schema"
@ -41,3 +43,129 @@ func ValidateNameserverReq(ns schema.Nameserver) error {
} }
return nil 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
}