mirror of
https://github.com/gravitl/netmaker.git
synced 2025-09-04 12:14:19 +08:00
separate pro and ce nameserver funcs
This commit is contained in:
parent
885b36810b
commit
599a24ce55
3 changed files with 156 additions and 31 deletions
56
logic/dns.go
56
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{
|
||||
|
|
|
@ -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
|
||||
|
||||
}
|
||||
|
||||
|
|
128
pro/logic/dns.go
128
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
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue