73 lines
2.3 KiB
Go
73 lines
2.3 KiB
Go
package dnspod
|
|
|
|
import (
|
|
dnsUtil "github.com/Mmx233/BitSrunLoginGo/internal/pkg/dns/util"
|
|
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common"
|
|
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile"
|
|
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/regions"
|
|
dnspod "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod/v20210323"
|
|
"net/http"
|
|
"strings"
|
|
)
|
|
|
|
type DnsPod struct {
|
|
SecretId string `json:"secret_id,omitempty" yaml:"secret_id,omitempty"`
|
|
SecretKey string `json:"secret_key,omitempty" yaml:"secret_key,omitempty"`
|
|
}
|
|
|
|
type DnsProvider struct {
|
|
Client *dnspod.Client
|
|
TTL uint64
|
|
DnsPod
|
|
}
|
|
|
|
func New(ttl uint64, conf DnsPod, Http http.RoundTripper) (*DnsProvider, error) {
|
|
var p = DnsProvider{TTL: ttl, DnsPod: conf}
|
|
var err error
|
|
p.Client, err = dnspod.NewClient(common.NewCredential(p.SecretId, p.SecretKey), regions.Guangzhou, profile.NewClientProfile())
|
|
p.Client.WithHttpTransport(Http)
|
|
return &p, err
|
|
}
|
|
|
|
func (a DnsProvider) SetDomainRecord(domain, ip string) error {
|
|
subDomain, rootDomain, err := dnsUtil.DecodeDomain(domain)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
var (
|
|
recordType = "A"
|
|
recordLine = "默认"
|
|
limit uint64 = 1
|
|
)
|
|
|
|
reqRecordList := dnspod.NewDescribeRecordListRequest()
|
|
reqRecordList.Domain = &rootDomain
|
|
reqRecordList.Subdomain = &subDomain
|
|
reqRecordList.Limit = &limit
|
|
res, err := a.Client.DescribeRecordList(reqRecordList)
|
|
if (err != nil && strings.Contains(err.Error(), dnspod.RESOURCENOTFOUND_NODATAOFRECORD)) || (err == nil && len(res.Response.RecordList) == 0) {
|
|
reqNewRecord := dnspod.NewCreateRecordRequest()
|
|
reqNewRecord.TTL = &a.TTL
|
|
reqNewRecord.Domain = &rootDomain
|
|
reqNewRecord.RecordType = &recordType
|
|
reqNewRecord.RecordLine = &recordLine
|
|
reqNewRecord.Value = &ip
|
|
reqNewRecord.SubDomain = &subDomain
|
|
_, err = a.Client.CreateRecord(reqNewRecord)
|
|
return err
|
|
} else if err != nil {
|
|
return err
|
|
}
|
|
|
|
reqModifyRecord := dnspod.NewModifyRecordRequest()
|
|
reqModifyRecord.Domain = &rootDomain
|
|
reqModifyRecord.SubDomain = &subDomain
|
|
reqModifyRecord.Value = &ip
|
|
reqModifyRecord.RecordId = res.Response.RecordList[0].RecordId
|
|
reqModifyRecord.RecordLine = &recordLine
|
|
reqModifyRecord.RecordType = &recordType
|
|
_, err = a.Client.ModifyRecord(reqModifyRecord)
|
|
return err
|
|
}
|