diff --git a/internal/db/models/node_dao.go b/internal/db/models/node_dao.go index 8d563915..cd092158 100644 --- a/internal/db/models/node_dao.go +++ b/internal/db/models/node_dao.go @@ -721,6 +721,10 @@ func (this *NodeDAO) ComposeNodeConfig(tx *dbs.Tx, nodeId int64, cacheMap maps.M continue } config.Servers = append(config.Servers, serverConfig) + + if server.IsOn == 1 && server.SupportCNAME == 1 { + config.SupportCNAME = true + } } // 全局设置 diff --git a/internal/db/models/server_dao.go b/internal/db/models/server_dao.go index b7150ab7..c45d21d4 100644 --- a/internal/db/models/server_dao.go +++ b/internal/db/models/server_dao.go @@ -472,10 +472,26 @@ func (this *ServerDAO) UpdateServerWeb(tx *dbs.Tx, serverId int64, webId int64) return this.NotifyUpdate(tx, serverId) } +// UpdateServerDNS 修改DNS设置 +func (this *ServerDAO) UpdateServerDNS(tx *dbs.Tx, serverId int64, supportCNAME bool) error { + if serverId <= 0 { + return errors.New("invalid serverId") + } + var op = NewServerOperator() + op.Id = serverId + op.SupportCNAME = supportCNAME + err := this.Save(tx, op) + if err != nil { + return err + } + + return this.NotifyUpdate(tx, serverId) +} + // InitServerWeb 初始化Web配置 func (this *ServerDAO) InitServerWeb(tx *dbs.Tx, serverId int64) (int64, error) { if serverId <= 0 { - return 0, errors.New("serverId should not be smaller than 0") + return 0, errors.New("invalid serverId") } adminId, userId, err := this.FindServerAdminIdAndUserId(tx, serverId) @@ -859,6 +875,7 @@ func (this *ServerDAO) ComposeServerConfig(tx *dbs.Tx, server *Server, cacheMap } // CNAME + config.SupportCNAME = server.SupportCNAME == 1 if server.ClusterId > 0 && len(server.DnsName) > 0 { clusterDNS, err := SharedNodeClusterDAO.FindClusterDNSInfo(tx, int64(server.ClusterId), cacheMap) if err != nil { @@ -1236,6 +1253,18 @@ func (this *ServerDAO) FindServerDNSName(tx *dbs.Tx, serverId int64) (string, er FindStringCol("") } +// FindServerSupportCNAME 查询服务是否支持CNAME +func (this *ServerDAO) FindServerSupportCNAME(tx *dbs.Tx, serverId int64) (bool, error) { + supportCNAME, err := this.Query(tx). + Pk(serverId). + Result("supportCNAME"). + FindIntCol(0) + if err != nil { + return false, err + } + return supportCNAME == 1, nil +} + // FindStatelessServerDNS 查询服务的DNS相关信息,并且不关注状态 func (this *ServerDAO) FindStatelessServerDNS(tx *dbs.Tx, serverId int64) (*Server, error) { one, err := this.Query(tx). diff --git a/internal/db/models/server_model.go b/internal/db/models/server_model.go index e07b7a00..709e9e7c 100644 --- a/internal/db/models/server_model.go +++ b/internal/db/models/server_model.go @@ -33,6 +33,7 @@ type Server struct { DnsName string `field:"dnsName"` // DNS名称 TcpPorts string `field:"tcpPorts"` // 所包含TCP端口 UdpPorts string `field:"udpPorts"` // 所包含UDP端口 + SupportCNAME uint8 `field:"supportCNAME"` // 允许CNAME不在域名名单 } type ServerOperator struct { @@ -67,6 +68,7 @@ type ServerOperator struct { DnsName interface{} // DNS名称 TcpPorts interface{} // 所包含TCP端口 UdpPorts interface{} // 所包含UDP端口 + SupportCNAME interface{} // 允许CNAME不在域名名单 } func NewServerOperator() *ServerOperator { diff --git a/internal/rpc/services/service_server.go b/internal/rpc/services/service_server.go index cae6be8f..da02c14a 100644 --- a/internal/rpc/services/service_server.go +++ b/internal/rpc/services/service_server.go @@ -468,6 +468,37 @@ func (this *ServerService) UpdateServerNamesAuditing(ctx context.Context, req *p return this.Success() } +// UpdateServerDNS 修改服务的DNS相关设置 +func (this *ServerService) UpdateServerDNS(ctx context.Context, req *pb.UpdateServerDNSRequest) (*pb.RPCSuccess, error) { + _, err := this.ValidateAdmin(ctx, 0) + if err != nil { + return nil, err + } + + var tx = this.NullTx() + err = models.SharedServerDAO.UpdateServerDNS(tx, req.ServerId, req.SupportCNAME) + if err != nil { + return nil, err + } + + return this.Success() +} + +// RegenerateServerCNAME 重新生成CNAME +func (this *ServerService) RegenerateServerCNAME(ctx context.Context, req *pb.RegenerateServerCNAMERequest) (*pb.RPCSuccess, error) { + _, err := this.ValidateAdmin(ctx, 0) + if err != nil { + return nil, err + } + + var tx = this.NullTx() + _, err = models.SharedServerDAO.GenerateServerDNSName(tx, req.ServerId) + if err != nil { + return nil, err + } + return this.Success() +} + // CountAllEnabledServersMatch 计算服务数量 func (this *ServerService) CountAllEnabledServersMatch(ctx context.Context, req *pb.CountAllEnabledServersMatchRequest) (*pb.RPCCountResponse, error) { // 校验请求 @@ -712,6 +743,7 @@ func (this *ServerService) FindEnabledServer(ctx context.Context, req *pb.FindEn Name: server.Name, Description: server.Description, DnsName: server.DnsName, + SupportCNAME: server.SupportCNAME == 1, Config: configJSON, ServerNamesJSON: []byte(server.ServerNames), HttpJSON: []byte(server.Http), @@ -1065,6 +1097,11 @@ func (this *ServerService) FindEnabledServerDNS(ctx context.Context, req *pb.Fin return nil, err } + supportCNAME, err := models.SharedServerDAO.FindServerSupportCNAME(tx, req.ServerId) + if err != nil { + return nil, err + } + clusterId, err := models.SharedServerDAO.FindServerClusterId(tx, req.ServerId) if err != nil { return nil, err @@ -1093,8 +1130,9 @@ func (this *ServerService) FindEnabledServerDNS(ctx context.Context, req *pb.Fin } return &pb.FindEnabledServerDNSResponse{ - DnsName: dnsName, - Domain: pbDomain, + DnsName: dnsName, + Domain: pbDomain, + SupportCNAME: supportCNAME, }, nil }