mirror of
https://github.com/gravitl/netmaker.git
synced 2025-09-09 22:55:02 +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"
|
"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{
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
128
pro/logic/dns.go
128
pro/logic/dns.go
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue