From ec88c40b23c45d22449b67ffbbc88c44bd5e2104 Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Sat, 16 Oct 2021 12:03:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E4=BB=BB=E6=84=8F=E5=9F=9F?= =?UTF-8?q?=E5=90=8D=E9=80=9A=E8=BF=87CNAME=E8=AE=BF=E9=97=AE=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=EF=BC=88=E5=BC=80=E5=90=AF=E9=80=89=E9=A1=B9=E5=90=8E?= =?UTF-8?q?=EF=BC=89/=E5=8F=AF=E4=BB=A5=E9=87=8D=E6=96=B0=E7=94=9F?= =?UTF-8?q?=E6=88=90=E6=9C=8D=E5=8A=A1CNAME?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/utils/lookup.go | 23 +++++++++----- .../servers/server/settings/dns/index.go | 23 ++++++++++++++ .../servers/server/settings/dns/init.go | 1 + .../server/settings/dns/regenerateCNAME.go | 26 ++++++++++++++++ .../servers/server/settings/dns/index.html | 30 +++++++++++++------ .../servers/server/settings/dns/index.js | 14 +++++++++ 6 files changed, 100 insertions(+), 17 deletions(-) create mode 100644 internal/web/actions/default/servers/server/settings/dns/regenerateCNAME.go create mode 100644 web/views/@default/servers/server/settings/dns/index.js 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记录,名字为你自己的域名,值为上面这个值。

-
+
+ + + + + + + + + + + +
当前服务CNAME + {{dnsName}}.{{dnsDomain}}.根域名    [重新生成] +

可以在DNS设置一个CNAME记录,名字为你自己的域名,值为上面这个值。

+
支持CNAME + +

选中后表示允许任意域名使用此服务的CNAME直接访问此服务。需要节点服务器可以正确解析DNS记录。在严格匹配域名时才会生效。

+
+ +
\ No newline at end of file diff --git a/web/views/@default/servers/server/settings/dns/index.js b/web/views/@default/servers/server/settings/dns/index.js new file mode 100644 index 00000000..41f75934 --- /dev/null +++ b/web/views/@default/servers/server/settings/dns/index.js @@ -0,0 +1,14 @@ +Tea.context(function () { + this.success = NotifyReloadSuccess("保存成功") + + this.regenerateCNAME = function () { + let serverId = this.serverId + teaweb.confirm("确定要重新生成此服务的CNAME吗?", function () { + this.$post(".regenerateCNAME") + .params({ + serverId: serverId + }) + .refresh() + }) + } +}) \ No newline at end of file