mirror of
https://github.com/TeaOSLab/EdgeAPI.git
synced 2025-11-08 03:00:26 +08:00
添加DNS账号时自动读取DNS服务商下域名
This commit is contained in:
@@ -86,6 +86,7 @@ func (this *DNSDomainDAO) CreateDomain(tx *dbs.Tx, adminId int64, userId int64,
|
|||||||
op.Name = name
|
op.Name = name
|
||||||
op.State = DNSDomainStateEnabled
|
op.State = DNSDomainStateEnabled
|
||||||
op.IsOn = true
|
op.IsOn = true
|
||||||
|
op.IsUp = true
|
||||||
err := this.Save(tx, op)
|
err := this.Save(tx, op)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
@@ -247,3 +248,25 @@ func (this *DNSDomainDAO) ExistDomainRecord(tx *dbs.Tx, domainId int64, recordNa
|
|||||||
Param("query", query.AsJSON()).
|
Param("query", query.AsJSON()).
|
||||||
Exist()
|
Exist()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FindEnabledDomainWithName 根据名称查找某个域名
|
||||||
|
func (this *DNSDomainDAO) FindEnabledDomainWithName(tx *dbs.Tx, providerId int64, domainName string) (*DNSDomain, error) {
|
||||||
|
one, err := this.Query(tx).
|
||||||
|
State(DNSDomainStateEnabled).
|
||||||
|
Attr("isOn", true).
|
||||||
|
Attr("providerId", providerId).
|
||||||
|
Attr("name", domainName).
|
||||||
|
Find()
|
||||||
|
if one != nil {
|
||||||
|
return one.(*DNSDomain), nil
|
||||||
|
}
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateDomainIsUp 设置是否在线
|
||||||
|
func (this *DNSDomainDAO) UpdateDomainIsUp(tx *dbs.Tx, domainId int64, isUp bool) error {
|
||||||
|
return this.Query(tx).
|
||||||
|
Pk(domainId).
|
||||||
|
Set("isUp", isUp).
|
||||||
|
UpdateQuickly()
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package dns
|
package dns
|
||||||
|
|
||||||
// 管理的域名
|
// DNSDomain 管理的域名
|
||||||
type DNSDomain struct {
|
type DNSDomain struct {
|
||||||
Id uint32 `field:"id"` // ID
|
Id uint32 `field:"id"` // ID
|
||||||
AdminId uint32 `field:"adminId"` // 管理员ID
|
AdminId uint32 `field:"adminId"` // 管理员ID
|
||||||
@@ -14,6 +14,7 @@ type DNSDomain struct {
|
|||||||
Data string `field:"data"` // 原始数据信息
|
Data string `field:"data"` // 原始数据信息
|
||||||
Records string `field:"records"` // 所有解析记录
|
Records string `field:"records"` // 所有解析记录
|
||||||
Routes string `field:"routes"` // 线路数据
|
Routes string `field:"routes"` // 线路数据
|
||||||
|
IsUp uint8 `field:"isUp"` // 是否在线
|
||||||
State uint8 `field:"state"` // 状态
|
State uint8 `field:"state"` // 状态
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -30,6 +31,7 @@ type DNSDomainOperator struct {
|
|||||||
Data interface{} // 原始数据信息
|
Data interface{} // 原始数据信息
|
||||||
Records interface{} // 所有解析记录
|
Records interface{} // 所有解析记录
|
||||||
Routes interface{} // 线路数据
|
Routes interface{} // 线路数据
|
||||||
|
IsUp interface{} // 是否在线
|
||||||
State interface{} // 状态
|
State interface{} // 状态
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,6 +31,34 @@ func (this *AliDNSProvider) Auth(params maps.Map) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetDomains 获取所有域名列表
|
||||||
|
func (this *AliDNSProvider) GetDomains() (domains []string, err error) {
|
||||||
|
pageNumber := 1
|
||||||
|
size := 100
|
||||||
|
|
||||||
|
for {
|
||||||
|
req := alidns.CreateDescribeDomainsRequest()
|
||||||
|
req.PageNumber = requests.NewInteger(pageNumber)
|
||||||
|
req.PageSize = requests.NewInteger(size)
|
||||||
|
resp := alidns.CreateDescribeDomainsResponse()
|
||||||
|
err = this.doAPI(req, resp)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, domain := range resp.Domains.Domain {
|
||||||
|
domains = append(domains, domain.DomainName)
|
||||||
|
}
|
||||||
|
|
||||||
|
pageNumber++
|
||||||
|
if int64((pageNumber-1)*size) >= resp.TotalCount {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// GetRecords 获取域名列表
|
// GetRecords 获取域名列表
|
||||||
func (this *AliDNSProvider) GetRecords(domain string) (records []*dnstypes.Record, err error) {
|
func (this *AliDNSProvider) GetRecords(domain string) (records []*dnstypes.Record, err error) {
|
||||||
pageNumber := 1
|
pageNumber := 1
|
||||||
|
|||||||
@@ -11,6 +11,14 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func TestAliDNSProvider_GetDomains(t *testing.T) {
|
||||||
|
provider, err := testAliDNSProvider()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
t.Log(provider.GetDomains())
|
||||||
|
}
|
||||||
|
|
||||||
func TestAliDNSProvider_GetRecords(t *testing.T) {
|
func TestAliDNSProvider_GetRecords(t *testing.T) {
|
||||||
provider, err := testAliDNSProvider()
|
provider, err := testAliDNSProvider()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -59,6 +59,21 @@ func (this *CloudFlareProvider) Auth(params maps.Map) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetDomains 获取所有域名列表
|
||||||
|
func (this *CloudFlareProvider) GetDomains() (domains []string, err error) {
|
||||||
|
resp := new(cloudflare.ZonesResponse)
|
||||||
|
err = this.doAPI(http.MethodGet, "zones", map[string]string{}, nil, resp)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, zone := range resp.Result {
|
||||||
|
domains = append(domains, zone.Name)
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// GetRecords 获取域名解析记录列表
|
// GetRecords 获取域名解析记录列表
|
||||||
func (this *CloudFlareProvider) GetRecords(domain string) (records []*dnstypes.Record, err error) {
|
func (this *CloudFlareProvider) GetRecords(domain string) (records []*dnstypes.Record, err error) {
|
||||||
zoneId, err := this.findZoneIdWithDomain(domain)
|
zoneId, err := this.findZoneIdWithDomain(domain)
|
||||||
|
|||||||
@@ -12,6 +12,14 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func TestCloudFlareProvider_GetDomains(t *testing.T) {
|
||||||
|
provider, err := testCloudFlareProvider()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
t.Log(provider.GetDomains())
|
||||||
|
}
|
||||||
|
|
||||||
func TestCloudFlareProvider_GetRecords(t *testing.T) {
|
func TestCloudFlareProvider_GetRecords(t *testing.T) {
|
||||||
provider, err := testCloudFlareProvider()
|
provider, err := testCloudFlareProvider()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -49,6 +49,16 @@ func (this *CustomHTTPProvider) Auth(params maps.Map) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetDomains 获取所有域名列表
|
||||||
|
func (this *CustomHTTPProvider) GetDomains() (domains []string, err error) {
|
||||||
|
resp, err := this.post(maps.Map{})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
err = json.Unmarshal(resp, &domains)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// GetRecords 获取域名解析记录列表
|
// GetRecords 获取域名解析记录列表
|
||||||
func (this *CustomHTTPProvider) GetRecords(domain string) (records []*dnstypes.Record, err error) {
|
func (this *CustomHTTPProvider) GetRecords(domain string) (records []*dnstypes.Record, err error) {
|
||||||
resp, err := this.post(maps.Map{
|
resp, err := this.post(maps.Map{
|
||||||
|
|||||||
@@ -7,6 +7,22 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func TestCustomHTTPProvider_GetDomains(t *testing.T) {
|
||||||
|
provider := CustomHTTPProvider{}
|
||||||
|
err := provider.Auth(maps.Map{
|
||||||
|
"url": "http://127.0.0.1:2345/dns",
|
||||||
|
"secret": "123456",
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
domains, err := provider.GetDomains()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
t.Log(domains)
|
||||||
|
}
|
||||||
|
|
||||||
func TestCustomHTTPProvider_AddRecord(t *testing.T) {
|
func TestCustomHTTPProvider_AddRecord(t *testing.T) {
|
||||||
provider := CustomHTTPProvider{}
|
provider := CustomHTTPProvider{}
|
||||||
err := provider.Auth(maps.Map{
|
err := provider.Auth(maps.Map{
|
||||||
|
|||||||
@@ -35,6 +35,40 @@ func (this *DNSPodProvider) Auth(params maps.Map) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetDomains 获取所有域名列表
|
||||||
|
func (this *DNSPodProvider) GetDomains() (domains []string, err error) {
|
||||||
|
offset := 0
|
||||||
|
size := 100
|
||||||
|
for {
|
||||||
|
domainsResp, err := this.post("/Domain.list", map[string]string{
|
||||||
|
"offset": numberutils.FormatInt(offset),
|
||||||
|
"length": numberutils.FormatInt(size),
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
offset += size
|
||||||
|
|
||||||
|
domainsSlice := domainsResp.GetSlice("domains")
|
||||||
|
if len(domainsSlice) == 0 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, domain := range domainsSlice {
|
||||||
|
domainMap := maps.NewMap(domain)
|
||||||
|
domains = append(domains, domainMap.GetString("name"))
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查是否到头
|
||||||
|
info := domainsResp.GetMap("info")
|
||||||
|
recordTotal := info.GetInt("record_total")
|
||||||
|
if offset >= recordTotal {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// GetRecords 获取域名列表
|
// GetRecords 获取域名列表
|
||||||
func (this *DNSPodProvider) GetRecords(domain string) (records []*dnstypes.Record, err error) {
|
func (this *DNSPodProvider) GetRecords(domain string) (records []*dnstypes.Record, err error) {
|
||||||
offset := 0
|
offset := 0
|
||||||
|
|||||||
@@ -9,6 +9,18 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func TestDNSPodProvider_GetDomains(t *testing.T) {
|
||||||
|
provider, err := testDNSPodProvider()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
domains, err := provider.GetDomains()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
t.Log(domains)
|
||||||
|
}
|
||||||
|
|
||||||
func TestDNSPodProvider_GetRoutes(t *testing.T) {
|
func TestDNSPodProvider_GetRoutes(t *testing.T) {
|
||||||
provider, err := testDNSPodProvider()
|
provider, err := testDNSPodProvider()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -55,6 +55,21 @@ func (this *HuaweiDNSProvider) Auth(params maps.Map) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetDomains 获取所有域名列表
|
||||||
|
func (this *HuaweiDNSProvider) GetDomains() (domains []string, err error) {
|
||||||
|
var resp = new(huaweidns.ZonesResponse)
|
||||||
|
err = this.doAPI(http.MethodGet, "/v2/zones", map[string]string{}, nil, resp)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, zone := range resp.Zones {
|
||||||
|
zone.Name = strings.TrimSuffix(zone.Name, ".")
|
||||||
|
domains = append(domains, zone.Name)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// GetRecords 获取域名解析记录列表
|
// GetRecords 获取域名解析记录列表
|
||||||
func (this *HuaweiDNSProvider) GetRecords(domain string) (records []*dnstypes.Record, err error) {
|
func (this *HuaweiDNSProvider) GetRecords(domain string) (records []*dnstypes.Record, err error) {
|
||||||
zoneId, err := this.findZoneIdWithDomain(domain)
|
zoneId, err := this.findZoneIdWithDomain(domain)
|
||||||
|
|||||||
@@ -11,6 +11,18 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func TestHuaweiDNSProvider_GetDomains(t *testing.T) {
|
||||||
|
provider, err := testHuaweiDNSProvider()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
domains, err := provider.GetDomains()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
t.Log("domains:", domains)
|
||||||
|
}
|
||||||
|
|
||||||
func TestHuaweiDNSProvider_GetRecords(t *testing.T) {
|
func TestHuaweiDNSProvider_GetRecords(t *testing.T) {
|
||||||
provider, err := testHuaweiDNSProvider()
|
provider, err := testHuaweiDNSProvider()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -10,6 +10,9 @@ type ProviderInterface interface {
|
|||||||
// Auth 认证
|
// Auth 认证
|
||||||
Auth(params maps.Map) error
|
Auth(params maps.Map) error
|
||||||
|
|
||||||
|
// GetDomains 获取所有域名列表
|
||||||
|
GetDomains() (domains []string, err error)
|
||||||
|
|
||||||
// GetRecords 获取域名解析记录列表
|
// GetRecords 获取域名解析记录列表
|
||||||
GetRecords(domain string) (records []*dnstypes.Record, err error)
|
GetRecords(domain string) (records []*dnstypes.Record, err error)
|
||||||
|
|
||||||
|
|||||||
@@ -34,6 +34,19 @@ func (this *LocalEdgeDNSProvider) Auth(params maps.Map) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetDomains 获取所有域名列表
|
||||||
|
func (this *LocalEdgeDNSProvider) GetDomains() (domains []string, err error) {
|
||||||
|
var tx *dbs.Tx
|
||||||
|
domainOnes, err := nameservers.SharedNSDomainDAO.ListEnabledDomains(tx, this.clusterId, 0, "", 0, 1000)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
for _, domain := range domainOnes {
|
||||||
|
domains = append(domains, domain.Name)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// GetRecords 获取域名解析记录列表
|
// GetRecords 获取域名解析记录列表
|
||||||
func (this *LocalEdgeDNSProvider) GetRecords(domain string) (records []*dnstypes.Record, err error) {
|
func (this *LocalEdgeDNSProvider) GetRecords(domain string) (records []*dnstypes.Record, err error) {
|
||||||
var tx *dbs.Tx
|
var tx *dbs.Tx
|
||||||
|
|||||||
@@ -13,6 +13,24 @@ import (
|
|||||||
|
|
||||||
const testClusterId = 7
|
const testClusterId = 7
|
||||||
|
|
||||||
|
func TestLocalEdgeDNSProvider_GetDomains(t *testing.T) {
|
||||||
|
dbs.NotifyReady()
|
||||||
|
|
||||||
|
provider := &dnsclients.LocalEdgeDNSProvider{}
|
||||||
|
err := provider.Auth(maps.Map{
|
||||||
|
"clusterId": testClusterId,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
domains, err := provider.GetDomains()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
t.Log("domains:", domains)
|
||||||
|
}
|
||||||
|
|
||||||
func TestLocalEdgeDNSProvider_GetRecords(t *testing.T) {
|
func TestLocalEdgeDNSProvider_GetRecords(t *testing.T) {
|
||||||
dbs.NotifyReady()
|
dbs.NotifyReady()
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,12 @@ func (this *UserEdgeDNSProvider) Auth(params maps.Map) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetDomains 获取所有域名列表
|
||||||
|
func (this *UserEdgeDNSProvider) GetDomains() (domains []string, err error) {
|
||||||
|
// TODO
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// GetRecords 获取域名解析记录列表
|
// GetRecords 获取域名解析记录列表
|
||||||
func (this *UserEdgeDNSProvider) GetRecords(domain string) (records []*dnstypes.Record, err error) {
|
func (this *UserEdgeDNSProvider) GetRecords(domain string) (records []*dnstypes.Record, err error) {
|
||||||
// TODO
|
// TODO
|
||||||
|
|||||||
@@ -364,6 +364,7 @@ func (this *DNSDomainService) convertDomainToPB(domain *dns.DNSDomain) (*pb.DNSD
|
|||||||
ProviderId: int64(domain.ProviderId),
|
ProviderId: int64(domain.ProviderId),
|
||||||
Name: domain.Name,
|
Name: domain.Name,
|
||||||
IsOn: domain.IsOn == 1,
|
IsOn: domain.IsOn == 1,
|
||||||
|
IsUp: domain.IsUp == 1,
|
||||||
DataUpdatedAt: int64(domain.DataUpdatedAt),
|
DataUpdatedAt: int64(domain.DataUpdatedAt),
|
||||||
CountNodeRecords: int64(countNodeRecords),
|
CountNodeRecords: int64(countNodeRecords),
|
||||||
NodesChanged: nodesChanged,
|
NodesChanged: nodesChanged,
|
||||||
@@ -693,7 +694,7 @@ func (this *DNSDomainService) syncClusterDNS(req *pb.SyncDNSDomainDataRequest) (
|
|||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检查域名是否在记录中
|
// ExistDNSDomainRecord 检查域名是否在记录中
|
||||||
func (this *DNSDomainService) ExistDNSDomainRecord(ctx context.Context, req *pb.ExistDNSDomainRecordRequest) (*pb.ExistDNSDomainRecordResponse, error) {
|
func (this *DNSDomainService) ExistDNSDomainRecord(ctx context.Context, req *pb.ExistDNSDomainRecordRequest) (*pb.ExistDNSDomainRecordResponse, error) {
|
||||||
_, _, err := this.ValidateAdminAndUser(ctx, 0, 0)
|
_, _, err := this.ValidateAdminAndUser(ctx, 0, 0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -708,3 +709,84 @@ func (this *DNSDomainService) ExistDNSDomainRecord(ctx context.Context, req *pb.
|
|||||||
}
|
}
|
||||||
return &pb.ExistDNSDomainRecordResponse{IsOk: isOk}, nil
|
return &pb.ExistDNSDomainRecordResponse{IsOk: isOk}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SyncDNSDomainsFromProvider 从服务商同步域名
|
||||||
|
func (this *DNSDomainService) SyncDNSDomainsFromProvider(ctx context.Context, req *pb.SyncDNSDomainsFromProviderRequest) (*pb.SyncDNSDomainsFromProviderResponse, error) {
|
||||||
|
_, _, err := this.ValidateAdminAndUser(ctx, 0, 0)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
tx := this.NullTx()
|
||||||
|
provider, err := dns.SharedDNSProviderDAO.FindEnabledDNSProvider(tx, req.DnsProviderId)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if provider == nil {
|
||||||
|
return nil, errors.New("can not find provider")
|
||||||
|
}
|
||||||
|
|
||||||
|
// 下线不存在的域名
|
||||||
|
oldDomains, err := dns.SharedDNSDomainDAO.FindAllEnabledDomainsWithProviderId(tx, req.DnsProviderId)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
dnsProvider := dnsclients.FindProvider(provider.Type)
|
||||||
|
if dnsProvider == nil {
|
||||||
|
return nil, errors.New("provider type '" + provider.Type + "' is not supported yet")
|
||||||
|
}
|
||||||
|
|
||||||
|
params, err := provider.DecodeAPIParams()
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.New("decode params failed: " + err.Error())
|
||||||
|
}
|
||||||
|
err = dnsProvider.Auth(params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.New("auth failed: " + err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
domainNames, err := dnsProvider.GetDomains()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var hasChanges = false
|
||||||
|
|
||||||
|
// 创建或上线域名
|
||||||
|
for _, domainName := range domainNames {
|
||||||
|
domain, err := dns.SharedDNSDomainDAO.FindEnabledDomainWithName(tx, req.DnsProviderId, domainName)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if domain == nil {
|
||||||
|
_, err = dns.SharedDNSDomainDAO.CreateDomain(tx, 0, 0, req.DnsProviderId, domainName)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
hasChanges = true
|
||||||
|
} else if domain.IsUp == 0 {
|
||||||
|
err = dns.SharedDNSDomainDAO.UpdateDomainIsUp(tx, int64(domain.Id), true)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
hasChanges = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 将老的域名置为下线
|
||||||
|
for _, oldDomain := range oldDomains {
|
||||||
|
var domainName = oldDomain.Name
|
||||||
|
if oldDomain.IsUp == 1 && !lists.ContainsString(domainNames, domainName) {
|
||||||
|
err = dns.SharedDNSDomainDAO.UpdateDomainIsUp(tx, int64(oldDomain.Id), false)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
hasChanges = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return &pb.SyncDNSDomainsFromProviderResponse{
|
||||||
|
HasChanges: hasChanges,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user