增加DNS域名管理

This commit is contained in:
GoEdgeLab
2020-11-12 14:41:28 +08:00
parent 761cb6ca60
commit 94204a61fb
28 changed files with 581 additions and 80 deletions

View File

@@ -0,0 +1,170 @@
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"
)
const (
DNSDomainStateEnabled = 1 // 已启用
DNSDomainStateDisabled = 0 // 已禁用
)
type DNSDomainDAO dbs.DAO
func NewDNSDomainDAO() *DNSDomainDAO {
return dbs.NewDAO(&DNSDomainDAO{
DAOObject: dbs.DAOObject{
DB: Tea.Env,
Table: "edgeDNSDomains",
Model: new(DNSDomain),
PkName: "id",
},
}).(*DNSDomainDAO)
}
var SharedDNSDomainDAO *DNSDomainDAO
func init() {
dbs.OnReady(func() {
SharedDNSDomainDAO = NewDNSDomainDAO()
})
}
// 启用条目
func (this *DNSDomainDAO) EnableDNSDomain(id int64) error {
_, err := this.Query().
Pk(id).
Set("state", DNSDomainStateEnabled).
Update()
return err
}
// 禁用条目
func (this *DNSDomainDAO) DisableDNSDomain(id int64) error {
_, err := this.Query().
Pk(id).
Set("state", DNSDomainStateDisabled).
Update()
return err
}
// 查找启用中的条目
func (this *DNSDomainDAO) FindEnabledDNSDomain(id int64) (*DNSDomain, error) {
result, err := this.Query().
Pk(id).
Attr("state", DNSDomainStateEnabled).
Find()
if result == nil {
return nil, err
}
return result.(*DNSDomain), err
}
// 根据主键查找名称
func (this *DNSDomainDAO) FindDNSDomainName(id int64) (string, error) {
return this.Query().
Pk(id).
Result("name").
FindStringCol("")
}
// 创建域名
func (this *DNSDomainDAO) CreateDomain(providerId int64, name string) (int64, error) {
op := NewDNSDomainOperator()
op.ProviderId = providerId
op.Name = name
op.State = DNSDomainStateEnabled
op.IsOn = true
_, err := this.Save(op)
if err != nil {
return 0, err
}
return types.Int64(op.Id), nil
}
// 修改域名
func (this *DNSDomainDAO) UpdateDomain(domainId int64, name string, isOn bool) error {
if domainId <= 0 {
return errors.New("invalid domainId")
}
op := NewDNSDomainOperator()
op.Id = domainId
op.Name = name
op.IsOn = isOn
_, err := this.Save(op)
if err != nil {
return err
}
return nil
}
// 查询一个服务商下面的所有域名
func (this *DNSDomainDAO) FindAllEnabledDomainsWithProviderId(providerId int64) (result []*DNSDomain, err error) {
_, err = this.Query().
State(DNSDomainStateEnabled).
Attr("providerId", providerId).
AscPk().
Slice(&result).
FindAll()
return
}
// 计算某个服务商下的域名数量
func (this *DNSDomainDAO) CountAllEnabledDomainsWithProviderId(providerId int64) (int64, error) {
return this.Query().
State(DNSDomainStateEnabled).
Attr("providerId", providerId).
Count()
}
// 更新域名数据
func (this *DNSDomainDAO) UpdateDomainData(domainId int64, data string) error {
if domainId <= 0 {
return errors.New("invalid domainId")
}
op := NewDNSDomainOperator()
op.Id = domainId
op.Data = data
_, err := this.Save(op)
return err
}
// 更新服务相关域名
func (this *DNSDomainDAO) UpdateServerDomains(domainId int64, serverDomainsJSON []byte) error {
if domainId <= 0 {
return errors.New("invalid domainId")
}
op := NewDNSDomainOperator()
op.Id = domainId
op.ServerDomains = serverDomainsJSON
_, err := this.Save(op)
return err
}
// 更新集群相关域名
func (this *DNSDomainDAO) UpdateClusterDomains(domainId int64, clusterDomainJSON []byte) error {
if domainId <= 0 {
return errors.New("invalid domainId")
}
op := NewDNSDomainOperator()
op.Id = domainId
op.ClusterDomains = clusterDomainJSON
_, err := this.Save(op)
return err
}
// 更新线路
func (this *DNSDomainDAO) UpdateRoutes(domainId int64, routesJSON []byte) error {
if domainId <= 0 {
return errors.New("invalid domainId")
}
op := NewDNSDomainOperator()
op.Id = domainId
op.Routes = routesJSON
_, err := this.Save(op)
return err
}

View File

@@ -0,0 +1,5 @@
package models
import (
_ "github.com/go-sql-driver/mysql"
)

View File

@@ -0,0 +1,36 @@
package models
// 管理的域名
type DNSDomain struct {
Id uint32 `field:"id"` // ID
AdminId uint32 `field:"adminId"` // 管理员ID
ProviderId uint32 `field:"providerId"` // 服务商ID
IsOn uint8 `field:"isOn"` // 是否可用
Name string `field:"name"` // 域名
CreatedAt uint64 `field:"createdAt"` // 创建时间
DataUpdatedAt uint64 `field:"dataUpdatedAt"` // 数据更新时间
Data string `field:"data"` // 原始数据信息
ServerDomains string `field:"serverDomains"` // 服务相关子域名
ClusterDomains string `field:"clusterDomains"` // 集群相关域名
Routes string `field:"routes"` // 线路数据
State uint8 `field:"state"` // 状态
}
type DNSDomainOperator struct {
Id interface{} // ID
AdminId interface{} // 管理员ID
ProviderId interface{} // 服务商ID
IsOn interface{} // 是否可用
Name interface{} // 域名
CreatedAt interface{} // 创建时间
DataUpdatedAt interface{} // 数据更新时间
Data interface{} // 原始数据信息
ServerDomains interface{} // 服务相关子域名
ClusterDomains interface{} // 集群相关域名
Routes interface{} // 线路数据
State interface{} // 状态
}
func NewDNSDomainOperator() *DNSDomainOperator {
return &DNSDomainOperator{}
}

View File

@@ -0,0 +1 @@
package models

View File

@@ -6,7 +6,6 @@ import (
"github.com/iwind/TeaGo/Tea"
"github.com/iwind/TeaGo/dbs"
"github.com/iwind/TeaGo/types"
"time"
)
const (
@@ -66,18 +65,14 @@ func (this *DNSProviderDAO) FindEnabledDNSProvider(id int64) (*DNSProvider, erro
}
// 创建服务商
func (this *DNSProviderDAO) CreateDNSProvider(providerType string, name string, apiParamsJSON []byte, routesJSON []byte) (int64, error) {
func (this *DNSProviderDAO) CreateDNSProvider(providerType string, name string, apiParamsJSON []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
@@ -86,7 +81,7 @@ func (this *DNSProviderDAO) CreateDNSProvider(providerType string, name string,
}
// 修改服务商
func (this *DNSProviderDAO) UpdateDNSProvider(dnsProviderId int64, name string, apiParamsJSON []byte, routesJSON []byte) error {
func (this *DNSProviderDAO) UpdateDNSProvider(dnsProviderId int64, name string, apiParamsJSON []byte) error {
if dnsProviderId <= 0 {
return errors.New("invalid dnsProviderId")
}
@@ -100,12 +95,6 @@ func (this *DNSProviderDAO) UpdateDNSProvider(dnsProviderId int64, name string,
op.ApiParams = apiParamsJSON
}
// 如果留空则表示不修改
if len(routesJSON) > 0 {
op.Routes = routesJSON
}
op.DataUpdatedAt = time.Now().Unix()
_, err := this.Save(op)
if err != nil {
return err

View File

@@ -9,7 +9,6 @@ type DNSProvider struct {
ApiParams string `field:"apiParams"` // API参数
CreatedAt uint64 `field:"createdAt"` // 创建时间
State uint8 `field:"state"` // 状态
Routes string `field:"routes"` // 可以使用的线路
DataUpdatedAt uint64 `field:"dataUpdatedAt"` // 数据同步时间
}
@@ -21,7 +20,6 @@ type DNSProviderOperator struct {
ApiParams interface{} // API参数
CreatedAt interface{} // 创建时间
State interface{} // 状态
Routes interface{} // 可以使用的线路
DataUpdatedAt interface{} // 数据同步时间
}

View File

@@ -272,7 +272,8 @@ func (this *NodeClusterDAO) FindAllEnabledClustersWithGrantId(grantId int64) (re
func (this *NodeClusterDAO) CountAllEnabledClustersWithDNSProviderId(dnsProviderId int64) (int64, error) {
return this.Query().
State(NodeClusterStateEnabled).
Attr("dnsProviderId", dnsProviderId).
Where("dnsDomainId IN (SELECT id FROM "+SharedDNSDomainDAO.Table+" WHERE state=1 AND providerId=:providerId)").
Param("providerId", dnsProviderId).
Count()
}
@@ -280,13 +281,22 @@ func (this *NodeClusterDAO) CountAllEnabledClustersWithDNSProviderId(dnsProvider
func (this *NodeClusterDAO) FindAllEnabledClustersWithDNSProviderId(dnsProviderId int64) (result []*NodeCluster, err error) {
_, err = this.Query().
State(NodeClusterStateEnabled).
Attr("dnsProviderId", dnsProviderId).
Where("dnsDomainId IN (SELECT id FROM "+SharedDNSDomainDAO.Table+" WHERE state=1 AND providerId=:providerId)").
Param("providerId", dnsProviderId).
Slice(&result).
DescPk().
FindAll()
return
}
// 计算使用某个DNS域名的集群数量
func (this *NodeClusterDAO) CountAllEnabledClustersWithDNSDomainId(dnsDomainId int64) (int64, error) {
return this.Query().
State(NodeClusterStateEnabled).
Attr("dnsDomainId", dnsDomainId).
Count()
}
// 查找集群的认证ID
func (this *NodeClusterDAO) FindClusterGrantId(clusterId int64) (int64, error) {
return this.Query().

View File

@@ -17,9 +17,8 @@ type NodeCluster struct {
UniqueId string `field:"uniqueId"` // 唯一ID
Secret string `field:"secret"` // 密钥
HealthCheck string `field:"healthCheck"` // 健康检查
DnsProviderId uint32 `field:"dnsProviderId"` // 当前使用的DNS供应商
DnsName string `field:"dnsName"` // DNS名称
DnsDomain string `field:"dnsDomain"` // DNS
DnsDomainId uint32 `field:"dnsDomainId"` // 域名ID
}
type NodeClusterOperator struct {
@@ -38,9 +37,8 @@ type NodeClusterOperator struct {
UniqueId interface{} // 唯一ID
Secret interface{} // 密钥
HealthCheck interface{} // 健康检查
DnsProviderId interface{} // 当前使用的DNS供应商
DnsName interface{} // DNS名称
DnsDomain interface{} // DNS
DnsDomainId interface{} // 域名ID
}
func NewNodeClusterOperator() *NodeClusterOperator {