mirror of
				https://github.com/TeaOSLab/EdgeAPI.git
				synced 2025-11-04 16:00:24 +08:00 
			
		
		
		
	增加DNS服务商账号管理
This commit is contained in:
		@@ -69,6 +69,10 @@ function build() {
 | 
				
			|||||||
	# building api node
 | 
						# building api node
 | 
				
			||||||
	env GOOS=$OS GOARCH=$ARCH go build --ldflags="-s -w" -o $DIST/bin/edge-api $ROOT/../cmd/edge-api/main.go
 | 
						env GOOS=$OS GOARCH=$ARCH go build --ldflags="-s -w" -o $DIST/bin/edge-api $ROOT/../cmd/edge-api/main.go
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# delete hidden files
 | 
				
			||||||
 | 
						find $DIST -name ".DS_Store" -delete
 | 
				
			||||||
 | 
						find $DIST -name ".gitignore" -delete
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	echo "zip files"
 | 
						echo "zip files"
 | 
				
			||||||
	cd "${DIST}/../" || exit
 | 
						cd "${DIST}/../" || exit
 | 
				
			||||||
	if [ -f "${ZIP}" ]; then
 | 
						if [ -f "${ZIP}" ]; then
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										133
									
								
								internal/db/models/dns_provider_dao.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										133
									
								
								internal/db/models/dns_provider_dao.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,133 @@
 | 
				
			|||||||
 | 
					package models
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"github.com/TeaOSLab/EdgeAPI/internal/errors"
 | 
				
			||||||
 | 
						_ "github.com/go-sql-driver/mysql"
 | 
				
			||||||
 | 
						"github.com/iwind/TeaGo/Tea"
 | 
				
			||||||
 | 
						"github.com/iwind/TeaGo/dbs"
 | 
				
			||||||
 | 
						"github.com/iwind/TeaGo/types"
 | 
				
			||||||
 | 
						"time"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const (
 | 
				
			||||||
 | 
						DNSProviderStateEnabled  = 1 // 已启用
 | 
				
			||||||
 | 
						DNSProviderStateDisabled = 0 // 已禁用
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type DNSProviderDAO dbs.DAO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func NewDNSProviderDAO() *DNSProviderDAO {
 | 
				
			||||||
 | 
						return dbs.NewDAO(&DNSProviderDAO{
 | 
				
			||||||
 | 
							DAOObject: dbs.DAOObject{
 | 
				
			||||||
 | 
								DB:     Tea.Env,
 | 
				
			||||||
 | 
								Table:  "edgeDNSProviders",
 | 
				
			||||||
 | 
								Model:  new(DNSProvider),
 | 
				
			||||||
 | 
								PkName: "id",
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						}).(*DNSProviderDAO)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var SharedDNSProviderDAO *DNSProviderDAO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func init() {
 | 
				
			||||||
 | 
						dbs.OnReady(func() {
 | 
				
			||||||
 | 
							SharedDNSProviderDAO = NewDNSProviderDAO()
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 启用条目
 | 
				
			||||||
 | 
					func (this *DNSProviderDAO) EnableDNSProvider(id int64) error {
 | 
				
			||||||
 | 
						_, err := this.Query().
 | 
				
			||||||
 | 
							Pk(id).
 | 
				
			||||||
 | 
							Set("state", DNSProviderStateEnabled).
 | 
				
			||||||
 | 
							Update()
 | 
				
			||||||
 | 
						return err
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 禁用条目
 | 
				
			||||||
 | 
					func (this *DNSProviderDAO) DisableDNSProvider(id int64) error {
 | 
				
			||||||
 | 
						_, err := this.Query().
 | 
				
			||||||
 | 
							Pk(id).
 | 
				
			||||||
 | 
							Set("state", DNSProviderStateDisabled).
 | 
				
			||||||
 | 
							Update()
 | 
				
			||||||
 | 
						return err
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 查找启用中的条目
 | 
				
			||||||
 | 
					func (this *DNSProviderDAO) FindEnabledDNSProvider(id int64) (*DNSProvider, error) {
 | 
				
			||||||
 | 
						result, err := this.Query().
 | 
				
			||||||
 | 
							Pk(id).
 | 
				
			||||||
 | 
							Attr("state", DNSProviderStateEnabled).
 | 
				
			||||||
 | 
							Find()
 | 
				
			||||||
 | 
						if result == nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return result.(*DNSProvider), err
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 创建服务商
 | 
				
			||||||
 | 
					func (this *DNSProviderDAO) CreateDNSProvider(providerType string, name string, apiParamsJSON []byte, routesJSON []byte) (int64, error) {
 | 
				
			||||||
 | 
						op := NewDNSProviderOperator()
 | 
				
			||||||
 | 
						op.Type = providerType
 | 
				
			||||||
 | 
						op.Name = name
 | 
				
			||||||
 | 
						if len(apiParamsJSON) > 0 {
 | 
				
			||||||
 | 
							op.ApiParams = apiParamsJSON
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if len(routesJSON) > 0 {
 | 
				
			||||||
 | 
							op.Routes = routesJSON
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						op.State = DNSProviderStateEnabled
 | 
				
			||||||
 | 
						op.DataUpdatedAt = time.Now().Unix()
 | 
				
			||||||
 | 
						_, err := this.Save(op)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return 0, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return types.Int64(op.Id), nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 修改服务商
 | 
				
			||||||
 | 
					func (this *DNSProviderDAO) UpdateDNSProvider(dnsProviderId int64, name string, apiParamsJSON []byte, routesJSON []byte) error {
 | 
				
			||||||
 | 
						if dnsProviderId <= 0 {
 | 
				
			||||||
 | 
							return errors.New("invalid dnsProviderId")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						op := NewDNSProviderOperator()
 | 
				
			||||||
 | 
						op.Id = dnsProviderId
 | 
				
			||||||
 | 
						op.Name = name
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// 如果留空则表示不修改
 | 
				
			||||||
 | 
						if len(apiParamsJSON) > 0 {
 | 
				
			||||||
 | 
							op.ApiParams = apiParamsJSON
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// 如果留空则表示不修改
 | 
				
			||||||
 | 
						if len(routesJSON) > 0 {
 | 
				
			||||||
 | 
							op.Routes = routesJSON
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						op.DataUpdatedAt = time.Now().Unix()
 | 
				
			||||||
 | 
						_, err := this.Save(op)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 计算服务商数量
 | 
				
			||||||
 | 
					func (this *DNSProviderDAO) CountAllEnabledDNSProviders() (int64, error) {
 | 
				
			||||||
 | 
						return this.Query().
 | 
				
			||||||
 | 
							State(DNSProviderStateEnabled).
 | 
				
			||||||
 | 
							Count()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 列出单页服务商
 | 
				
			||||||
 | 
					func (this *DNSProviderDAO) ListEnabledDNSProviders(offset int64, size int64) (result []*DNSProvider, err error) {
 | 
				
			||||||
 | 
						_, err = this.Query().
 | 
				
			||||||
 | 
							State(DNSProviderStateEnabled).
 | 
				
			||||||
 | 
							Offset(offset).
 | 
				
			||||||
 | 
							Limit(size).
 | 
				
			||||||
 | 
							DescPk().
 | 
				
			||||||
 | 
							Slice(&result).
 | 
				
			||||||
 | 
							FindAll()
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										5
									
								
								internal/db/models/dns_provider_dao_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								internal/db/models/dns_provider_dao_test.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					package models
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						_ "github.com/go-sql-driver/mysql"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
							
								
								
									
										30
									
								
								internal/db/models/dns_provider_model.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								internal/db/models/dns_provider_model.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					package models
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// DNS服务商
 | 
				
			||||||
 | 
					type DNSProvider struct {
 | 
				
			||||||
 | 
						Id            uint32 `field:"id"`            // ID
 | 
				
			||||||
 | 
						Name          string `field:"name"`          // 名称
 | 
				
			||||||
 | 
						AdminId       uint32 `field:"adminId"`       // 管理员ID
 | 
				
			||||||
 | 
						Type          string `field:"type"`          // 供应商类型
 | 
				
			||||||
 | 
						ApiParams     string `field:"apiParams"`     // API参数
 | 
				
			||||||
 | 
						CreatedAt     uint64 `field:"createdAt"`     // 创建时间
 | 
				
			||||||
 | 
						State         uint8  `field:"state"`         // 状态
 | 
				
			||||||
 | 
						Routes        string `field:"routes"`        // 可以使用的线路
 | 
				
			||||||
 | 
						DataUpdatedAt uint64 `field:"dataUpdatedAt"` // 数据同步时间
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type DNSProviderOperator struct {
 | 
				
			||||||
 | 
						Id            interface{} // ID
 | 
				
			||||||
 | 
						Name          interface{} // 名称
 | 
				
			||||||
 | 
						AdminId       interface{} // 管理员ID
 | 
				
			||||||
 | 
						Type          interface{} // 供应商类型
 | 
				
			||||||
 | 
						ApiParams     interface{} // API参数
 | 
				
			||||||
 | 
						CreatedAt     interface{} // 创建时间
 | 
				
			||||||
 | 
						State         interface{} // 状态
 | 
				
			||||||
 | 
						Routes        interface{} // 可以使用的线路
 | 
				
			||||||
 | 
						DataUpdatedAt interface{} // 数据同步时间
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func NewDNSProviderOperator() *DNSProviderOperator {
 | 
				
			||||||
 | 
						return &DNSProviderOperator{}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										1
									
								
								internal/db/models/dns_provider_model_ext.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								internal/db/models/dns_provider_model_ext.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					package models
 | 
				
			||||||
@@ -268,6 +268,25 @@ func (this *NodeClusterDAO) FindAllEnabledClustersWithGrantId(grantId int64) (re
 | 
				
			|||||||
	return
 | 
						return
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 计算使用某个DNS服务商的集群数量
 | 
				
			||||||
 | 
					func (this *NodeClusterDAO) CountAllEnabledClustersWithDNSProviderId(dnsProviderId int64) (int64, error) {
 | 
				
			||||||
 | 
						return this.Query().
 | 
				
			||||||
 | 
							State(NodeClusterStateEnabled).
 | 
				
			||||||
 | 
							Attr("dnsProviderId", dnsProviderId).
 | 
				
			||||||
 | 
							Count()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 获取所有使用某个DNS服务商的集群
 | 
				
			||||||
 | 
					func (this *NodeClusterDAO) FindAllEnabledClustersWithDNSProviderId(dnsProviderId int64) (result []*NodeCluster, err error) {
 | 
				
			||||||
 | 
						_, err = this.Query().
 | 
				
			||||||
 | 
							State(NodeClusterStateEnabled).
 | 
				
			||||||
 | 
							Attr("dnsProviderId", dnsProviderId).
 | 
				
			||||||
 | 
							Slice(&result).
 | 
				
			||||||
 | 
							DescPk().
 | 
				
			||||||
 | 
							FindAll()
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 查找集群的认证ID
 | 
					// 查找集群的认证ID
 | 
				
			||||||
func (this *NodeClusterDAO) FindClusterGrantId(clusterId int64) (int64, error) {
 | 
					func (this *NodeClusterDAO) FindClusterGrantId(clusterId int64) (int64, error) {
 | 
				
			||||||
	return this.Query().
 | 
						return this.Query().
 | 
				
			||||||
@@ -276,6 +295,21 @@ func (this *NodeClusterDAO) FindClusterGrantId(clusterId int64) (int64, error) {
 | 
				
			|||||||
		FindInt64Col(0)
 | 
							FindInt64Col(0)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 查找DNS信息
 | 
				
			||||||
 | 
					func (this *NodeClusterDAO) FindClusterDNSInfo(clusterId int64) (*NodeCluster, error) {
 | 
				
			||||||
 | 
						one, err := this.Query().
 | 
				
			||||||
 | 
							Pk(clusterId).
 | 
				
			||||||
 | 
							Result("dnsName", "dnsDomain", "dnsProviderId").
 | 
				
			||||||
 | 
							Find()
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if one == nil {
 | 
				
			||||||
 | 
							return nil, nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return one.(*NodeCluster), nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 生成唯一ID
 | 
					// 生成唯一ID
 | 
				
			||||||
func (this *NodeClusterDAO) genUniqueId() (string, error) {
 | 
					func (this *NodeClusterDAO) genUniqueId() (string, error) {
 | 
				
			||||||
	for {
 | 
						for {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,6 +17,9 @@ type NodeCluster struct {
 | 
				
			|||||||
	UniqueId       string `field:"uniqueId"`       // 唯一ID
 | 
						UniqueId       string `field:"uniqueId"`       // 唯一ID
 | 
				
			||||||
	Secret         string `field:"secret"`         // 密钥
 | 
						Secret         string `field:"secret"`         // 密钥
 | 
				
			||||||
	HealthCheck    string `field:"healthCheck"`    // 健康检查
 | 
						HealthCheck    string `field:"healthCheck"`    // 健康检查
 | 
				
			||||||
 | 
						DnsProviderId  uint32 `field:"dnsProviderId"`  // 当前使用的DNS供应商
 | 
				
			||||||
 | 
						DnsName        string `field:"dnsName"`        // DNS名称
 | 
				
			||||||
 | 
						DnsDomain      string `field:"dnsDomain"`      // DNS域
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type NodeClusterOperator struct {
 | 
					type NodeClusterOperator struct {
 | 
				
			||||||
@@ -35,6 +38,9 @@ type NodeClusterOperator struct {
 | 
				
			|||||||
	UniqueId       interface{} // 唯一ID
 | 
						UniqueId       interface{} // 唯一ID
 | 
				
			||||||
	Secret         interface{} // 密钥
 | 
						Secret         interface{} // 密钥
 | 
				
			||||||
	HealthCheck    interface{} // 健康检查
 | 
						HealthCheck    interface{} // 健康检查
 | 
				
			||||||
 | 
						DnsProviderId  interface{} // 当前使用的DNS供应商
 | 
				
			||||||
 | 
						DnsName        interface{} // DNS名称
 | 
				
			||||||
 | 
						DnsDomain      interface{} // DNS域
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func NewNodeClusterOperator() *NodeClusterOperator {
 | 
					func NewNodeClusterOperator() *NodeClusterOperator {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,6 +23,7 @@ type Node struct {
 | 
				
			|||||||
	State             uint8  `field:"state"`             // 状态
 | 
						State             uint8  `field:"state"`             // 状态
 | 
				
			||||||
	ConnectedAPINodes string `field:"connectedAPINodes"` // 当前连接的API节点
 | 
						ConnectedAPINodes string `field:"connectedAPINodes"` // 当前连接的API节点
 | 
				
			||||||
	MaxCPU            uint32 `field:"maxCPU"`            // 可以使用的最多CPU
 | 
						MaxCPU            uint32 `field:"maxCPU"`            // 可以使用的最多CPU
 | 
				
			||||||
 | 
						DnsRoutes         string `field:"dnsRoutes"`         // DNS线路设置
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type NodeOperator struct {
 | 
					type NodeOperator struct {
 | 
				
			||||||
@@ -47,6 +48,7 @@ type NodeOperator struct {
 | 
				
			|||||||
	State             interface{} // 状态
 | 
						State             interface{} // 状态
 | 
				
			||||||
	ConnectedAPINodes interface{} // 当前连接的API节点
 | 
						ConnectedAPINodes interface{} // 当前连接的API节点
 | 
				
			||||||
	MaxCPU            interface{} // 可以使用的最多CPU
 | 
						MaxCPU            interface{} // 可以使用的最多CPU
 | 
				
			||||||
 | 
						DnsRoutes         interface{} // DNS线路设置
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func NewNodeOperator() *NodeOperator {
 | 
					func NewNodeOperator() *NodeOperator {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,6 +10,7 @@ import (
 | 
				
			|||||||
	_ "github.com/go-sql-driver/mysql"
 | 
						_ "github.com/go-sql-driver/mysql"
 | 
				
			||||||
	"github.com/iwind/TeaGo/Tea"
 | 
						"github.com/iwind/TeaGo/Tea"
 | 
				
			||||||
	"github.com/iwind/TeaGo/dbs"
 | 
						"github.com/iwind/TeaGo/dbs"
 | 
				
			||||||
 | 
						"github.com/iwind/TeaGo/rands"
 | 
				
			||||||
	"github.com/iwind/TeaGo/types"
 | 
						"github.com/iwind/TeaGo/types"
 | 
				
			||||||
	"strconv"
 | 
						"strconv"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
@@ -138,6 +139,12 @@ func (this *ServerDAO) CreateServer(adminId int64, userId int64, serverType serv
 | 
				
			|||||||
		op.GroupIds = groupIdsJSON
 | 
							op.GroupIds = groupIdsJSON
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						dnsName, err := this.genDNSName()
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return 0, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						op.DnsName = dnsName
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	op.Version = 1
 | 
						op.Version = 1
 | 
				
			||||||
	op.IsOn = 1
 | 
						op.IsOn = 1
 | 
				
			||||||
	op.State = ServerStateEnabled
 | 
						op.State = ServerStateEnabled
 | 
				
			||||||
@@ -795,3 +802,19 @@ func (this *ServerDAO) CountAllEnabledServersWithGroupId(groupId int64) (int64,
 | 
				
			|||||||
func (this *ServerDAO) createEvent() error {
 | 
					func (this *ServerDAO) createEvent() error {
 | 
				
			||||||
	return SharedSysEventDAO.CreateEvent(NewServerChangeEvent())
 | 
						return SharedSysEventDAO.CreateEvent(NewServerChangeEvent())
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 生成DNS Name
 | 
				
			||||||
 | 
					func (this *ServerDAO) genDNSName() (string, error) {
 | 
				
			||||||
 | 
						for {
 | 
				
			||||||
 | 
							dnsName := rands.HexString(8)
 | 
				
			||||||
 | 
							exist, err := this.Query().
 | 
				
			||||||
 | 
								Attr("dnsName", dnsName).
 | 
				
			||||||
 | 
								Exist()
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								return "", err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if !exist {
 | 
				
			||||||
 | 
								return dnsName, nil
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,6 +4,7 @@ import (
 | 
				
			|||||||
	"crypto/md5"
 | 
						"crypto/md5"
 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
	_ "github.com/go-sql-driver/mysql"
 | 
						_ "github.com/go-sql-driver/mysql"
 | 
				
			||||||
 | 
						"github.com/iwind/TeaGo/dbs"
 | 
				
			||||||
	"github.com/iwind/TeaGo/logs"
 | 
						"github.com/iwind/TeaGo/logs"
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -42,3 +43,12 @@ func TestNewServerDAO_md5(t *testing.T) {
 | 
				
			|||||||
	h := m.Sum(nil)
 | 
						h := m.Sum(nil)
 | 
				
			||||||
	t.Logf("%x", h)
 | 
						t.Logf("%x", h)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestServerDAO_genDNSName(t *testing.T) {
 | 
				
			||||||
 | 
						dbs.NotifyReady()
 | 
				
			||||||
 | 
						dnsName, err := SharedServerDAO.genDNSName()
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							t.Fatal(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						t.Log("dnsName:", dnsName)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,6 +27,7 @@ type Server struct {
 | 
				
			|||||||
	Version      uint32 `field:"version"`      // 版本号
 | 
						Version      uint32 `field:"version"`      // 版本号
 | 
				
			||||||
	CreatedAt    uint64 `field:"createdAt"`    // 创建时间
 | 
						CreatedAt    uint64 `field:"createdAt"`    // 创建时间
 | 
				
			||||||
	State        uint8  `field:"state"`        // 状态
 | 
						State        uint8  `field:"state"`        // 状态
 | 
				
			||||||
 | 
						DnsName      string `field:"dnsName"`      // DNS名称
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type ServerOperator struct {
 | 
					type ServerOperator struct {
 | 
				
			||||||
@@ -55,6 +56,7 @@ type ServerOperator struct {
 | 
				
			|||||||
	Version      interface{} // 版本号
 | 
						Version      interface{} // 版本号
 | 
				
			||||||
	CreatedAt    interface{} // 创建时间
 | 
						CreatedAt    interface{} // 创建时间
 | 
				
			||||||
	State        interface{} // 状态
 | 
						State        interface{} // 状态
 | 
				
			||||||
 | 
						DnsName      interface{} // DNS名称
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func NewServerOperator() *ServerOperator {
 | 
					func NewServerOperator() *ServerOperator {
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										7
									
								
								internal/dnsproviders/provider_interface.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								internal/dnsproviders/provider_interface.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					package dnsproviders
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// DNS操作接口
 | 
				
			||||||
 | 
					type ProviderInterface interface {
 | 
				
			||||||
 | 
						// 检查账号
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										25
									
								
								internal/dnsproviders/types.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								internal/dnsproviders/types.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					package dnsproviders
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "github.com/iwind/TeaGo/maps"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type ProviderType = string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const (
 | 
				
			||||||
 | 
						ProviderTypeDNSPod ProviderType = "dnspod"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var AllProviderTypes = []maps.Map{
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							"name": "DNSPod",
 | 
				
			||||||
 | 
							"code": ProviderTypeDNSPod,
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func FindProviderTypeName(providerType string) string {
 | 
				
			||||||
 | 
						for _, t := range AllProviderTypes {
 | 
				
			||||||
 | 
							if t.GetString("code") == providerType {
 | 
				
			||||||
 | 
								return t.GetString("name")
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return ""
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -181,6 +181,7 @@ func (this *APINode) listenRPC(listener net.Listener, tlsConfig *tls.Config) err
 | 
				
			|||||||
	pb.RegisterIPListServiceServer(rpcServer, &services.IPListService{})
 | 
						pb.RegisterIPListServiceServer(rpcServer, &services.IPListService{})
 | 
				
			||||||
	pb.RegisterIPItemServiceServer(rpcServer, &services.IPItemService{})
 | 
						pb.RegisterIPItemServiceServer(rpcServer, &services.IPItemService{})
 | 
				
			||||||
	pb.RegisterLogServiceServer(rpcServer, &services.LogService{})
 | 
						pb.RegisterLogServiceServer(rpcServer, &services.LogService{})
 | 
				
			||||||
 | 
						pb.RegisterDNSProviderServiceServer(rpcServer, &services.DNSProviderService{})
 | 
				
			||||||
	err := rpcServer.Serve(listener)
 | 
						err := rpcServer.Serve(listener)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return errors.New("[API]start rpc failed: " + err.Error())
 | 
							return errors.New("[API]start rpc failed: " + err.Error())
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										146
									
								
								internal/rpc/services/service_dns_provider.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										146
									
								
								internal/rpc/services/service_dns_provider.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,146 @@
 | 
				
			|||||||
 | 
					package services
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
 | 
						"github.com/TeaOSLab/EdgeAPI/internal/db/models"
 | 
				
			||||||
 | 
						"github.com/TeaOSLab/EdgeAPI/internal/dnsproviders"
 | 
				
			||||||
 | 
						rpcutils "github.com/TeaOSLab/EdgeAPI/internal/rpc/utils"
 | 
				
			||||||
 | 
						"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// DNS服务商相关服务
 | 
				
			||||||
 | 
					type DNSProviderService struct {
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 创建服务商
 | 
				
			||||||
 | 
					func (this *DNSProviderService) CreateDNSProvider(ctx context.Context, req *pb.CreateDNSProviderRequest) (*pb.CreateDNSProviderResponse, error) {
 | 
				
			||||||
 | 
						// 校验请求
 | 
				
			||||||
 | 
						_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						providerId, err := models.SharedDNSProviderDAO.CreateDNSProvider(req.Type, req.Name, req.ApiParamsJSON, req.RoutesJSON)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return &pb.CreateDNSProviderResponse{DnsProviderId: providerId}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 修改服务商
 | 
				
			||||||
 | 
					func (this *DNSProviderService) UpdateDNSProvider(ctx context.Context, req *pb.UpdateDNSProviderRequest) (*pb.RPCUpdateSuccess, error) {
 | 
				
			||||||
 | 
						// 校验请求
 | 
				
			||||||
 | 
						_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						err = models.SharedDNSProviderDAO.UpdateDNSProvider(req.DnsProviderId, req.Name, req.ApiParamsJSON, req.RoutesJSON)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return rpcutils.RPCUpdateSuccess()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 计算服务商数量
 | 
				
			||||||
 | 
					func (this *DNSProviderService) CountAllEnabledDNSProviders(ctx context.Context, req *pb.CountAllEnabledDNSProvidersRequest) (*pb.CountAllEnabledDNSProvidersResponse, error) {
 | 
				
			||||||
 | 
						// 校验请求
 | 
				
			||||||
 | 
						_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						count, err := models.SharedDNSProviderDAO.CountAllEnabledDNSProviders()
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return &pb.CountAllEnabledDNSProvidersResponse{Count: count}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 列出单页服务商信息
 | 
				
			||||||
 | 
					func (this *DNSProviderService) ListEnabledDNSProviders(ctx context.Context, req *pb.ListEnabledDNSProvidersRequest) (*pb.ListEnabledDNSProvidersResponse, error) {
 | 
				
			||||||
 | 
						// 校验请求
 | 
				
			||||||
 | 
						_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						providers, err := models.SharedDNSProviderDAO.ListEnabledDNSProviders(req.Offset, req.Size)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						result := []*pb.DNSProvider{}
 | 
				
			||||||
 | 
						for _, provider := range providers {
 | 
				
			||||||
 | 
							result = append(result, &pb.DNSProvider{
 | 
				
			||||||
 | 
								Id:            int64(provider.Id),
 | 
				
			||||||
 | 
								Name:          provider.Name,
 | 
				
			||||||
 | 
								Type:          provider.Type,
 | 
				
			||||||
 | 
								TypeName:      dnsproviders.FindProviderTypeName(provider.Type),
 | 
				
			||||||
 | 
								ApiParamsJSON: []byte(provider.ApiParams),
 | 
				
			||||||
 | 
								RoutesJSON:    []byte(provider.Routes),
 | 
				
			||||||
 | 
								DataUpdatedAt: int64(provider.DataUpdatedAt),
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return &pb.ListEnabledDNSProvidersResponse{DnsProviders: result}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 删除服务商
 | 
				
			||||||
 | 
					func (this *DNSProviderService) DeleteDNSProvider(ctx context.Context, req *pb.DeleteDNSProviderRequest) (*pb.RPCDeleteSuccess, error) {
 | 
				
			||||||
 | 
						// 校验请求
 | 
				
			||||||
 | 
						_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						err = models.SharedDNSProviderDAO.DisableDNSProvider(req.DnsProviderId)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return rpcutils.RPCDeleteSuccess()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 查找单个服务商
 | 
				
			||||||
 | 
					func (this *DNSProviderService) FindEnabledDNSProvider(ctx context.Context, req *pb.FindEnabledDNSProviderRequest) (*pb.FindEnabledDNSProviderResponse, error) {
 | 
				
			||||||
 | 
						// 校验请求
 | 
				
			||||||
 | 
						_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						provider, err := models.SharedDNSProviderDAO.FindEnabledDNSProvider(req.DnsProviderId)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if provider == nil {
 | 
				
			||||||
 | 
							return &pb.FindEnabledDNSProviderResponse{DnsProvider: nil}, nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return &pb.FindEnabledDNSProviderResponse{DnsProvider: &pb.DNSProvider{
 | 
				
			||||||
 | 
							Id:            int64(provider.Id),
 | 
				
			||||||
 | 
							Name:          provider.Name,
 | 
				
			||||||
 | 
							Type:          provider.Type,
 | 
				
			||||||
 | 
							TypeName:      dnsproviders.FindProviderTypeName(provider.Type),
 | 
				
			||||||
 | 
							ApiParamsJSON: []byte(provider.ApiParams),
 | 
				
			||||||
 | 
							RoutesJSON:    []byte(provider.Routes),
 | 
				
			||||||
 | 
							DataUpdatedAt: int64(provider.DataUpdatedAt),
 | 
				
			||||||
 | 
						}}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 取得所有服务商类型
 | 
				
			||||||
 | 
					func (this *DNSProviderService) FindAllDNSProviderTypes(ctx context.Context, req *pb.FindAllDNSProviderTypesRequest) (*pb.FindAllDNSProviderTypesResponse, error) {
 | 
				
			||||||
 | 
						// 校验请求
 | 
				
			||||||
 | 
						_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						result := []*pb.DNSProviderType{}
 | 
				
			||||||
 | 
						for _, t := range dnsproviders.AllProviderTypes {
 | 
				
			||||||
 | 
							result = append(result, &pb.DNSProviderType{
 | 
				
			||||||
 | 
								Name: t.GetString("name"),
 | 
				
			||||||
 | 
								Code: t.GetString("code"),
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return &pb.FindAllDNSProviderTypesResponse{ProviderTypes: result}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -4,6 +4,7 @@ import (
 | 
				
			|||||||
	"context"
 | 
						"context"
 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeAPI/internal/db/models"
 | 
						"github.com/TeaOSLab/EdgeAPI/internal/db/models"
 | 
				
			||||||
 | 
						"github.com/TeaOSLab/EdgeAPI/internal/dnsproviders"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeAPI/internal/errors"
 | 
						"github.com/TeaOSLab/EdgeAPI/internal/errors"
 | 
				
			||||||
	rpcutils "github.com/TeaOSLab/EdgeAPI/internal/rpc/utils"
 | 
						rpcutils "github.com/TeaOSLab/EdgeAPI/internal/rpc/utils"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeAPI/internal/tasks"
 | 
						"github.com/TeaOSLab/EdgeAPI/internal/tasks"
 | 
				
			||||||
@@ -350,3 +351,59 @@ func (this *NodeClusterService) FindAllEnabledNodeClustersWithGrantId(ctx contex
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	return &pb.FindAllEnabledNodeClustersWithGrantIdResponse{Clusters: result}, nil
 | 
						return &pb.FindAllEnabledNodeClustersWithGrantIdResponse{Clusters: result}, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 查找集群的DNS配置
 | 
				
			||||||
 | 
					func (this *NodeClusterService) FindEnabledNodeClusterDNS(ctx context.Context, req *pb.FindEnabledNodeClusterDNSRequest) (*pb.FindEnabledNodeClusterDNSResponse, error) {
 | 
				
			||||||
 | 
						// 校验请求
 | 
				
			||||||
 | 
						_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						dnsInfo, err := models.SharedNodeClusterDAO.FindClusterDNSInfo(req.NodeClusterId)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if dnsInfo == nil {
 | 
				
			||||||
 | 
							return &pb.FindEnabledNodeClusterDNSResponse{
 | 
				
			||||||
 | 
								Name:     "",
 | 
				
			||||||
 | 
								Domain:   "",
 | 
				
			||||||
 | 
								Provider: nil,
 | 
				
			||||||
 | 
							}, nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						provider, err := models.SharedDNSProviderDAO.FindEnabledDNSProvider(int64(dnsInfo.DnsProviderId))
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						var pbProvider *pb.DNSProvider = nil
 | 
				
			||||||
 | 
						if provider != nil {
 | 
				
			||||||
 | 
							pbProvider = &pb.DNSProvider{
 | 
				
			||||||
 | 
								Id:       int64(provider.Id),
 | 
				
			||||||
 | 
								Type:     provider.Type,
 | 
				
			||||||
 | 
								TypeName: dnsproviders.FindProviderTypeName(provider.Type),
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return &pb.FindEnabledNodeClusterDNSResponse{
 | 
				
			||||||
 | 
							Name:     dnsInfo.DnsName,
 | 
				
			||||||
 | 
							Domain:   dnsInfo.DnsDomain,
 | 
				
			||||||
 | 
							Provider: pbProvider,
 | 
				
			||||||
 | 
						}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 计算使用某个DNS服务商的集群数量
 | 
				
			||||||
 | 
					func (this *NodeClusterService) CountAllEnabledNodeClustersWithDNSProviderId(ctx context.Context, req *pb.CountAllEnabledNodeClustersWithDNSProviderIdRequest) (*pb.CountAllEnabledNodeClustersWithDNSProviderIdResponse, error) {
 | 
				
			||||||
 | 
						// 校验请求
 | 
				
			||||||
 | 
						_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						count, err := models.SharedNodeClusterDAO.CountAllEnabledClustersWithDNSProviderId(req.DnsProviderId)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return &pb.CountAllEnabledNodeClustersWithDNSProviderIdResponse{Count: count}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -420,6 +420,7 @@ func (this *ServerService) ListEnabledServersMatch(ctx context.Context, req *pb.
 | 
				
			|||||||
			ExcludeNodes:   []byte(server.ExcludeNodes),
 | 
								ExcludeNodes:   []byte(server.ExcludeNodes),
 | 
				
			||||||
			ServerNamesJON: []byte(server.ServerNames),
 | 
								ServerNamesJON: []byte(server.ServerNames),
 | 
				
			||||||
			CreatedAt:      int64(server.CreatedAt),
 | 
								CreatedAt:      int64(server.CreatedAt),
 | 
				
			||||||
 | 
								DnsName:        server.DnsName,
 | 
				
			||||||
			Cluster: &pb.NodeCluster{
 | 
								Cluster: &pb.NodeCluster{
 | 
				
			||||||
				Id:   int64(server.ClusterId),
 | 
									Id:   int64(server.ClusterId),
 | 
				
			||||||
				Name: clusterName,
 | 
									Name: clusterName,
 | 
				
			||||||
@@ -515,6 +516,7 @@ func (this *ServerService) FindEnabledServer(ctx context.Context, req *pb.FindEn
 | 
				
			|||||||
		Type:             server.Type,
 | 
							Type:             server.Type,
 | 
				
			||||||
		Name:             server.Name,
 | 
							Name:             server.Name,
 | 
				
			||||||
		Description:      server.Description,
 | 
							Description:      server.Description,
 | 
				
			||||||
 | 
							DnsName:          server.DnsName,
 | 
				
			||||||
		Config:           []byte(server.Config),
 | 
							Config:           []byte(server.Config),
 | 
				
			||||||
		ServerNamesJON:   []byte(server.ServerNames),
 | 
							ServerNamesJON:   []byte(server.ServerNames),
 | 
				
			||||||
		HttpJSON:         []byte(server.Http),
 | 
							HttpJSON:         []byte(server.Http),
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user