diff --git a/internal/utils/lookup.go b/internal/utils/lookup.go index fb3b6c9a..8e6fb1ea 100644 --- a/internal/utils/lookup.go +++ b/internal/utils/lookup.go @@ -1,6 +1,7 @@ package utils import ( + "github.com/TeaOSLab/EdgeCommon/pkg/configutils" "github.com/miekg/dns" ) @@ -16,13 +17,19 @@ func LookupCNAME(host string) (string, error) { m.SetQuestion(host+".", dns.TypeCNAME) m.RecursionDesired = true - r, _, err := c.Exchange(m, config.Servers[0]+":"+config.Port) - if err != nil { - return "", err - } - if len(r.Answer) == 0 { - return "", nil - } - return r.Answer[0].(*dns.CNAME).Target, nil + var lastErr error + for _, serverAddr := range config.Servers { + r, _, err := c.Exchange(m, configutils.QuoteIP(serverAddr)+":"+config.Port) + if err != nil { + lastErr = err + continue + } + if len(r.Answer) == 0 { + continue + } + + return r.Answer[0].(*dns.CNAME).Target, nil + } + return "", lastErr } diff --git a/internal/web/actions/default/servers/server/settings/dns/index.go b/internal/web/actions/default/servers/server/settings/dns/index.go index 7deb7055..56ec72b6 100644 --- a/internal/web/actions/default/servers/server/settings/dns/index.go +++ b/internal/web/actions/default/servers/server/settings/dns/index.go @@ -3,6 +3,7 @@ package dns import ( "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/iwind/TeaGo/actions" ) type IndexAction struct { @@ -28,6 +29,28 @@ func (this *IndexAction) RunGet(params struct { } else { this.Data["dnsDomain"] = "" } + this.Data["supportCNAME"] = dnsInfoResp.SupportCNAME this.Show() } + +func (this *IndexAction) RunPost(params struct { + ServerId int64 + SupportCNAME bool + + Must *actions.Must + CSRF *actionutils.CSRF +}) { + defer this.CreateLogInfo("修改服务 %d 的DNS设置", params.ServerId) + + _, err := this.RPC().ServerRPC().UpdateServerDNS(this.AdminContext(), &pb.UpdateServerDNSRequest{ + ServerId: params.ServerId, + SupportCNAME: params.SupportCNAME, + }) + if err != nil { + this.ErrorPage(err) + return + } + + this.Success() +} diff --git a/internal/web/actions/default/servers/server/settings/dns/init.go b/internal/web/actions/default/servers/server/settings/dns/init.go index ab0110d4..d75e5c9e 100644 --- a/internal/web/actions/default/servers/server/settings/dns/init.go +++ b/internal/web/actions/default/servers/server/settings/dns/init.go @@ -14,6 +14,7 @@ func init() { Helper(serverutils.NewServerHelper()). Prefix("/servers/server/settings/dns"). GetPost("", new(IndexAction)). + Post("/regenerateCNAME", new(RegenerateCNAMEAction)). EndAll() }) } diff --git a/internal/web/actions/default/servers/server/settings/dns/regenerateCNAME.go b/internal/web/actions/default/servers/server/settings/dns/regenerateCNAME.go new file mode 100644 index 00000000..57271685 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/dns/regenerateCNAME.go @@ -0,0 +1,26 @@ +// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved. + +package dns + +import ( + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" +) + +type RegenerateCNAMEAction struct { + actionutils.ParentAction +} + +func (this *RegenerateCNAMEAction) RunPost(params struct { + ServerId int64 +}) { + defer this.CreateLogInfo("重新生成服务 %d 的CNAME", params.ServerId) + + _, err := this.RPC().ServerRPC().RegenerateServerCNAME(this.AdminContext(), &pb.RegenerateServerCNAMERequest{ServerId: params.ServerId}) + if err != nil { + this.ErrorPage(err) + return + } + + this.Success() +} diff --git a/web/views/@default/servers/server/settings/dns/index.html b/web/views/@default/servers/server/settings/dns/index.html index 651964f9..7719ae30 100644 --- a/web/views/@default/servers/server/settings/dns/index.html +++ b/web/views/@default/servers/server/settings/dns/index.html @@ -3,13 +3,25 @@ {$template "/left_menu"}
| 当前服务CNAME | -
-				{{dnsName}}.{{dnsDomain}}.根域名    可以在DNS设置一个CNAME记录,名字为你自己的域名,值为上面这个值。 - | 
-