Files
EdgeAdmin/internal/web/actions/default/servers/server/settings/dns/updateCNAMEPopup.go

98 lines
2.5 KiB
Go
Raw Normal View History

2022-08-26 19:51:07 +08:00
// 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{
2022-12-31 17:31:17 +08:00
ServerId: params.ServerId,
IgnoreSSLCerts: true,
})
2022-08-26 19:51:07 +08:00
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()
}