DNS添加域名的时候自动同步数据

This commit is contained in:
刘祥超
2020-11-15 12:51:29 +08:00
parent afb414bca3
commit fd7082cff6
2 changed files with 69 additions and 0 deletions

View File

@@ -1 +1,16 @@
package models package models
import (
"encoding/json"
"github.com/iwind/TeaGo/maps"
)
// 获取API参数
func (this *DNSProvider) DecodeAPIParams() (maps.Map, error) {
if len(this.ApiParams) == 0 || this.ApiParams == "null" {
return maps.Map{}, nil
}
result := maps.Map{}
err := json.Unmarshal([]byte(this.ApiParams), &result)
return result, err
}

View File

@@ -25,10 +25,64 @@ func (this *DNSDomainService) CreateDNSDomain(ctx context.Context, req *pb.Creat
return nil, err return nil, err
} }
// 查询Provider
provider, err := models.SharedDNSProviderDAO.FindEnabledDNSProvider(req.DnsProviderId)
if err != nil {
return nil, err
}
if provider == nil {
return nil, errors.New("can not find provider")
}
apiParams, err := provider.DecodeAPIParams()
if err != nil {
return nil, err
}
domainId, err := models.SharedDNSDomainDAO.CreateDomain(req.DnsProviderId, req.Name) domainId, err := models.SharedDNSDomainDAO.CreateDomain(req.DnsProviderId, req.Name)
if err != nil { if err != nil {
return nil, err return nil, err
} }
// 更新数据,且不提示错误
go func() {
domainName := req.Name
providerInterface := dnsclients.FindProvider(provider.Type)
if providerInterface == nil {
return
}
err = providerInterface.Auth(apiParams)
if err != nil {
// 这里我们刻意不提示错误
return
}
routes, err := providerInterface.GetRoutes(domainName)
if err != nil {
return
}
routesJSON, err := json.Marshal(routes)
if err != nil {
return
}
err = models.SharedDNSDomainDAO.UpdateDomainRoutes(domainId, routesJSON)
if err != nil {
return
}
records, err := providerInterface.GetRecords(domainName)
if err != nil {
return
}
recordsJSON, err := json.Marshal(records)
if err != nil {
return
}
err = models.SharedDNSDomainDAO.UpdateDomainRecords(domainId, recordsJSON)
if err != nil {
return
}
}()
return &pb.CreateDNSDomainResponse{DnsDomainId: domainId}, nil return &pb.CreateDNSDomainResponse{DnsDomainId: domainId}, nil
} }