可以修改服务的CNAME

This commit is contained in:
GoEdgeLab
2022-08-26 19:51:07 +08:00
parent a5b0d7f4f0
commit 836e03a144
6 changed files with 125 additions and 2 deletions

View File

@@ -15,6 +15,7 @@ func init() {
Prefix("/servers/server/settings/dns").
GetPost("", new(IndexAction)).
Post("/regenerateCNAME", new(RegenerateCNAMEAction)).
GetPost("/updateCNAMEPopup", new(UpdateCNAMEPopupAction)).
EndAll()
})
}

View File

@@ -16,7 +16,7 @@ func (this *RegenerateCNAMEAction) RunPost(params struct {
}) {
defer this.CreateLogInfo("重新生成服务 %d 的CNAME", params.ServerId)
_, err := this.RPC().ServerRPC().RegenerateServerCNAME(this.AdminContext(), &pb.RegenerateServerCNAMERequest{ServerId: params.ServerId})
_, err := this.RPC().ServerRPC().RegenerateServerDNSName(this.AdminContext(), &pb.RegenerateServerDNSNameRequest{ServerId: params.ServerId})
if err != nil {
this.ErrorPage(err)
return

View File

@@ -0,0 +1,94 @@
// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. Official site: https://goedge.cn .
package dns
import (
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
"github.com/iwind/TeaGo/types"
"regexp"
"strings"
)
type UpdateCNAMEPopupAction struct {
actionutils.ParentAction
}
func (this *UpdateCNAMEPopupAction) RunGet(params struct {
ServerId int64
}) {
this.Data["serverId"] = params.ServerId
dnsInfoResp, err := this.RPC().ServerRPC().FindEnabledServerDNS(this.AdminContext(), &pb.FindEnabledServerDNSRequest{ServerId: params.ServerId})
if err != nil {
this.ErrorPage(err)
return
}
this.Data["dnsName"] = dnsInfoResp.DnsName
this.Show()
}
func (this *UpdateCNAMEPopupAction) RunPost(params struct {
ServerId int64
DnsName string
}) {
defer this.CreateLogInfo("修改服务 %d CNAME为 %s", params.ServerId, params.DnsName)
var dnsName = strings.ToLower(params.DnsName)
if len(dnsName) == 0 {
this.FailField("dnsName", "CNAME不能为空")
}
const maxLen = 30
if len(dnsName) > maxLen {
this.FailField("dnsName", "CNAME长度不能超过"+types.String(maxLen)+"个字符")
}
if !regexp.MustCompile(`^[a-z0-9]{1,` + types.String(maxLen) + `}$`).MatchString(dnsName) {
this.FailField("dnsName", "CNAME中只能包含数字、英文字母")
}
serverResp, err := this.RPC().ServerRPC().FindEnabledServer(this.AdminContext(), &pb.FindEnabledServerRequest{ServerId: params.ServerId})
if err != nil {
this.ErrorPage(err)
return
}
var server = serverResp.Server
if server == nil {
this.Fail("找不到要修改的服务")
}
if server.NodeCluster == nil {
this.Fail("服务必须先分配到一个集群才能修改")
}
var clusterId = server.NodeCluster.Id
if server.DnsName == params.DnsName {
// 没有修改则直接返回
this.Success()
}
serverIdResp, err := this.RPC().ServerRPC().FindServerIdWithDNSName(this.AdminContext(), &pb.FindServerIdWithDNSNameRequest{
NodeClusterId: clusterId,
DnsName: dnsName,
})
if err != nil {
this.ErrorPage(err)
return
}
if serverIdResp.ServerId > 0 && serverIdResp.ServerId != params.ServerId {
this.FailField("dnsName", "当前CNAME已被别的服务占用请换一个")
}
_, err = this.RPC().ServerRPC().UpdateServerDNSName(this.AdminContext(), &pb.UpdateServerDNSNameRequest{
ServerId: params.ServerId,
DnsName: dnsName,
})
if err != nil {
this.ErrorPage(err)
return
}
this.Success()
}

View File

@@ -10,7 +10,7 @@
<tr>
<td class="title">当前服务CNAME</td>
<td>
<span id="cname-text">{{dnsName}}.<span v-if="dnsDomain.length > 0">{{dnsDomain}}.</span><span v-else>根域名</span></span> &nbsp; <copy-to-clipboard :v-target="'cname-text'"></copy-to-clipboard> &nbsp;<a href="" @click.prevent="regenerateCNAME()" style="font-size: 0.8em">[重新生成]</a>
<span id="cname-text">{{dnsName}}.<span v-if="dnsDomain.length > 0">{{dnsDomain}}.</span><span v-else>根域名</span></span> &nbsp; <copy-to-clipboard :v-target="'cname-text'"></copy-to-clipboard> &nbsp;<a href="" @click.prevent="regenerateCNAME()" style="font-size: 0.8em">[重新生成]</a> &nbsp; <a href="" @click.prevent="updateCNAME()" style="font-size: 0.8em">[手动修改]</a>
<p class="comment">可以在DNS设置一个CNAME记录名字为你自己的域名值为上面这个值。</p>
</td>
</tr>

View File

@@ -11,4 +11,12 @@ Tea.context(function () {
.refresh()
})
}
this.updateCNAME = function () {
teaweb.popup("/servers/server/settings/dns/updateCNAMEPopup?serverId=" + this.serverId, {
callback: function () {
teaweb.successRefresh("保存成功")
}
})
}
})

View File

@@ -0,0 +1,20 @@
{$layout "layout_popup"}
<h3>修改服务CNAME</h3>
<form class="ui form" data-tea-action="$" data-tea-success="success">
<csrf-token></csrf-token>
<input type="hidden" name="serverId" :value="serverId"/>
<table class="ui table definition selectable">
<tr>
<td class="title">CNAME *</td>
<td>
<input type="text" name="dnsName" maxlength="30" v-model="dnsName"/>
<p class="comment">最长只能是30个</p>
</td>
</tr>
</table>
<submit-btn></submit-btn>
</form>