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"
)
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{

View file

@ -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
}

View file

@ -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
}