mirror of
https://github.com/gravitl/netmaker.git
synced 2025-09-06 13:14:24 +08:00
set match domain on update
This commit is contained in:
parent
4e8ab0ec3c
commit
3f2b480057
4 changed files with 82 additions and 2 deletions
|
@ -90,6 +90,11 @@ func createNs(w http.ResponseWriter, r *http.Request) {
|
|||
if gNs, ok := logic.GlobalNsList[req.Name]; ok {
|
||||
req.Servers = gNs.IPs
|
||||
}
|
||||
if !servercfg.IsPro {
|
||||
req.Tags = datatypes.JSONMap{
|
||||
"*": struct{}{},
|
||||
}
|
||||
}
|
||||
ns := schema.Nameserver{
|
||||
ID: uuid.New().String(),
|
||||
Name: req.Name,
|
||||
|
@ -222,6 +227,7 @@ func updateNs(w http.ResponseWriter, r *http.Request) {
|
|||
}
|
||||
ns.Servers = updateNs.Servers
|
||||
ns.Tags = updateNs.Tags
|
||||
ns.MatchDomain = updateNs.MatchDomain
|
||||
ns.Description = updateNs.Description
|
||||
ns.Name = updateNs.Name
|
||||
ns.Status = updateNs.Status
|
||||
|
|
38
logic/dns.go
38
logic/dns.go
|
@ -394,6 +394,44 @@ func ValidateUpdateNameserverReq(updateNs 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 {
|
||||
returnNsLi = append(returnNsLi, models.Nameserver{
|
||||
IPs: nsI.Servers,
|
||||
MatchDomain: nsI.MatchDomain,
|
||||
})
|
||||
continue
|
||||
}
|
||||
for tagI := range node.Tags {
|
||||
if _, ok := nsI.Tags[tagI.String()]; ok {
|
||||
returnNsLi = append(returnNsLi, models.Nameserver{
|
||||
IPs: nsI.Servers,
|
||||
MatchDomain: nsI.MatchDomain,
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
if node.IsInternetGateway {
|
||||
globalNs := models.Nameserver{
|
||||
MatchDomain: ".",
|
||||
}
|
||||
for _, nsI := range 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
|
||||
|
|
|
@ -1328,7 +1328,7 @@ func getUserRemoteAccessGwsV1(w http.ResponseWriter, r *http.Request) {
|
|||
Addresses: utils.NoEmptyStringToCsv(node.Address.String(), node.Address6.String()),
|
||||
}
|
||||
if !node.IsInternetGateway {
|
||||
hNs := logic.GetNameserversForHost(host)
|
||||
hNs := logic.GetNameserversForNode(&node)
|
||||
for _, nsI := range hNs {
|
||||
gw.MatchDomains = append(gw.MatchDomains, nsI.MatchDomain)
|
||||
}
|
||||
|
@ -1379,7 +1379,7 @@ func getUserRemoteAccessGwsV1(w http.ResponseWriter, r *http.Request) {
|
|||
Addresses: utils.NoEmptyStringToCsv(node.Address.String(), node.Address6.String()),
|
||||
}
|
||||
if !node.IsInternetGateway {
|
||||
hNs := logic.GetNameserversForHost(host)
|
||||
hNs := logic.GetNameserversForNode(&node)
|
||||
for _, nsI := range hNs {
|
||||
gw.MatchDomains = append(gw.MatchDomains, nsI.MatchDomain)
|
||||
}
|
||||
|
|
36
pro/logic/dns.go
Normal file
36
pro/logic/dns.go
Normal file
|
@ -0,0 +1,36 @@
|
|||
package logic
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"github.com/gravitl/netmaker/logic"
|
||||
"github.com/gravitl/netmaker/models"
|
||||
"github.com/gravitl/netmaker/schema"
|
||||
)
|
||||
|
||||
func ValidateNameserverReq(ns schema.Nameserver) error {
|
||||
if ns.Name == "" {
|
||||
return errors.New("name is required")
|
||||
}
|
||||
if ns.NetworkID == "" {
|
||||
return errors.New("network is required")
|
||||
}
|
||||
if len(ns.Servers) == 0 {
|
||||
return errors.New("atleast one nameserver should be specified")
|
||||
}
|
||||
if !logic.IsValidMatchDomain(ns.MatchDomain) {
|
||||
return errors.New("invalid match domain")
|
||||
}
|
||||
if len(ns.Tags) > 0 {
|
||||
for tagI := range ns.Tags {
|
||||
if tagI == "*" {
|
||||
continue
|
||||
}
|
||||
_, err := GetTag(models.TagID(tagI))
|
||||
if err != nil {
|
||||
return errors.New("invalid tag")
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
Loading…
Add table
Reference in a new issue