DNS服务商账号增加“最小TTL”选项

This commit is contained in:
GoEdgeLab
2024-05-12 09:33:51 +08:00
parent 8d049c8239
commit 058d586341
8 changed files with 74 additions and 17 deletions

View File

@@ -29,7 +29,10 @@ func NewDNSProvider(raw dnsclients.ProviderInterface, dnsDomain string) *DNSProv
func (this *DNSProvider) Present(domain, token, keyAuth string) error {
_ = os.Setenv("LEGO_DISABLE_CNAME_SUPPORT", "true")
fqdn, value := dns01.GetRecord(domain, keyAuth)
var info = dns01.GetChallengeInfo(domain, keyAuth)
var fqdn = info.EffectiveFQDN
var value = info.Value
// 设置记录
var index = strings.Index(fqdn, "."+this.dnsDomain)
@@ -66,6 +69,7 @@ func (this *DNSProvider) Present(domain, token, keyAuth string) error {
Type: dnstypes.RecordTypeTXT,
Value: value,
Route: this.raw.DefaultRoute(),
TTL: this.raw.MinTTL(),
})
if err != nil {
return fmt.Errorf("create DNS record failed: %w", err)

View File

@@ -266,7 +266,6 @@ func (this *ACMETaskDAO) FindACMETaskUserId(tx *dbs.Tx, taskId int64) (userId in
FindInt64Col(0)
}
// UpdateACMETaskCert 设置任务关联的证书
func (this *ACMETaskDAO) UpdateACMETaskCert(tx *dbs.Tx, taskId int64, certId int64) error {
if taskId <= 0 {
@@ -387,6 +386,7 @@ func (this *ACMETaskDAO) runTaskWithoutLog(tx *dbs.Tx, taskId int64) (isOk bool,
errMsg = "暂不支持此类型的DNS服务商 '" + dnsProvider.Type + "'"
return
}
providerInterface.SetMinTTL(int32(dnsProvider.MinTTL))
apiParams, err := dnsProvider.DecodeAPIParams()
if err != nil {
errMsg = "解析DNS服务商API参数时出错" + err.Error()

View File

@@ -67,7 +67,7 @@ func (this *DNSProviderDAO) FindEnabledDNSProvider(tx *dbs.Tx, id int64) (*DNSPr
}
// CreateDNSProvider 创建服务商
func (this *DNSProviderDAO) CreateDNSProvider(tx *dbs.Tx, adminId int64, userId int64, providerType string, name string, apiParamsJSON []byte) (int64, error) {
func (this *DNSProviderDAO) CreateDNSProvider(tx *dbs.Tx, adminId int64, userId int64, providerType string, name string, apiParamsJSON []byte, minTTL int32) (int64, error) {
var op = NewDNSProviderOperator()
op.AdminId = adminId
op.UserId = userId
@@ -76,6 +76,11 @@ func (this *DNSProviderDAO) CreateDNSProvider(tx *dbs.Tx, adminId int64, userId
if len(apiParamsJSON) > 0 {
op.ApiParams = apiParamsJSON
}
if minTTL >= 0 {
op.MinTTL = minTTL
}
op.State = DNSProviderStateEnabled
err := this.Save(tx, op)
if err != nil {
@@ -85,7 +90,7 @@ func (this *DNSProviderDAO) CreateDNSProvider(tx *dbs.Tx, adminId int64, userId
}
// UpdateDNSProvider 修改服务商
func (this *DNSProviderDAO) UpdateDNSProvider(tx *dbs.Tx, dnsProviderId int64, name string, apiParamsJSON []byte) error {
func (this *DNSProviderDAO) UpdateDNSProvider(tx *dbs.Tx, dnsProviderId int64, name string, apiParamsJSON []byte, minTTL int32) error {
if dnsProviderId <= 0 {
return errors.New("invalid dnsProviderId")
}
@@ -99,6 +104,10 @@ func (this *DNSProviderDAO) UpdateDNSProvider(tx *dbs.Tx, dnsProviderId int64, n
op.ApiParams = apiParamsJSON
}
if minTTL >= 0 {
op.MinTTL = minTTL
}
err := this.Save(tx, op)
if err != nil {
return err

View File

@@ -2,6 +2,19 @@ package dns
import "github.com/iwind/TeaGo/dbs"
const (
DNSProviderField_Id dbs.FieldName = "id" // ID
DNSProviderField_Name dbs.FieldName = "name" // 名称
DNSProviderField_AdminId dbs.FieldName = "adminId" // 管理员ID
DNSProviderField_UserId dbs.FieldName = "userId" // 用户ID
DNSProviderField_Type dbs.FieldName = "type" // 供应商类型
DNSProviderField_ApiParams dbs.FieldName = "apiParams" // API参数
DNSProviderField_CreatedAt dbs.FieldName = "createdAt" // 创建时间
DNSProviderField_State dbs.FieldName = "state" // 状态
DNSProviderField_DataUpdatedAt dbs.FieldName = "dataUpdatedAt" // 数据同步时间
DNSProviderField_MinTTL dbs.FieldName = "minTTL" // 最小TTL
)
// DNSProvider DNS服务商
type DNSProvider struct {
Id uint32 `field:"id"` // ID
@@ -13,18 +26,20 @@ type DNSProvider struct {
CreatedAt uint64 `field:"createdAt"` // 创建时间
State uint8 `field:"state"` // 状态
DataUpdatedAt uint64 `field:"dataUpdatedAt"` // 数据同步时间
MinTTL uint32 `field:"minTTL"` // 最小TTL
}
type DNSProviderOperator struct {
Id interface{} // ID
Name interface{} // 名称
AdminId interface{} // 管理员ID
UserId interface{} // 用户ID
Type interface{} // 供应商类型
ApiParams interface{} // API参数
CreatedAt interface{} // 创建时间
State interface{} // 状态
DataUpdatedAt interface{} // 数据同步时间
Id any // ID
Name any // 名称
AdminId any // 管理员ID
UserId any // 用户ID
Type any // 供应商类型
ApiParams any // API参数
CreatedAt any // 创建时间
State any // 状态
DataUpdatedAt any // 数据同步时间
MinTTL any // 最小TTL
}
func NewDNSProviderOperator() *DNSProviderOperator {

View File

@@ -5,7 +5,9 @@ import (
"github.com/TeaOSLab/EdgeAPI/internal/dnsclients/dnstypes"
)
type BaseProvider struct{}
type BaseProvider struct {
minTTL int32
}
// WrapError 封装解析相关错误
func (this *BaseProvider) WrapError(err error, domain string, record *dnstypes.Record) error {
@@ -25,3 +27,16 @@ func (this *BaseProvider) WrapError(err error, domain string, record *dnstypes.R
}
return fmt.Errorf("record operation failed: '%s %s %s %d': %w", fullname, record.Type, record.Value, record.TTL, err)
}
// SetMinTTL 设置最小TTL
func (this *BaseProvider) SetMinTTL(ttl int32) {
this.minTTL = ttl
}
// MinTTL 最小TTL
func (this *BaseProvider) MinTTL() int32 {
if this.minTTL > 0 {
return this.minTTL
}
return 0
}

View File

@@ -39,4 +39,10 @@ type ProviderInterface interface {
// DefaultRoute 默认线路
DefaultRoute() string
// SetMinTTL 设置最小TTL
SetMinTTL(ttl int32)
// MinTTL 最小TTL
MinTTL() int32
}

View File

@@ -24,7 +24,7 @@ func (this *DNSProviderService) CreateDNSProvider(ctx context.Context, req *pb.C
var tx = this.NullTx()
providerId, err := dns.SharedDNSProviderDAO.CreateDNSProvider(tx, adminId, userId, req.Type, req.Name, req.ApiParamsJSON)
providerId, err := dns.SharedDNSProviderDAO.CreateDNSProvider(tx, adminId, userId, req.Type, req.Name, req.ApiParamsJSON, req.MinTTL)
if err != nil {
return nil, err
}
@@ -59,7 +59,7 @@ func (this *DNSProviderService) UpdateDNSProvider(ctx context.Context, req *pb.U
return nil, err
}
err = dns.SharedDNSProviderDAO.UpdateDNSProvider(tx, req.DnsProviderId, req.Name, req.ApiParamsJSON)
err = dns.SharedDNSProviderDAO.UpdateDNSProvider(tx, req.DnsProviderId, req.Name, req.ApiParamsJSON, req.MinTTL)
if err != nil {
return nil, err
}
@@ -114,6 +114,7 @@ func (this *DNSProviderService) ListEnabledDNSProviders(ctx context.Context, req
TypeName: dnsclients.FindProviderTypeName(provider.Type),
ApiParamsJSON: provider.ApiParams,
DataUpdatedAt: int64(provider.DataUpdatedAt),
MinTTL: int32(provider.MinTTL),
})
}
return &pb.ListEnabledDNSProvidersResponse{DnsProviders: result}, nil
@@ -148,6 +149,7 @@ func (this *DNSProviderService) FindAllEnabledDNSProviders(ctx context.Context,
TypeName: dnsclients.FindProviderTypeName(provider.Type),
ApiParamsJSON: provider.ApiParams,
DataUpdatedAt: int64(provider.DataUpdatedAt),
MinTTL: int32(provider.MinTTL),
})
}
return &pb.FindAllEnabledDNSProvidersResponse{DnsProviders: result}, nil
@@ -218,6 +220,7 @@ func (this *DNSProviderService) FindEnabledDNSProvider(ctx context.Context, req
TypeName: dnsclients.FindProviderTypeName(provider.Type),
ApiParamsJSON: provider.ApiParams,
DataUpdatedAt: int64(provider.DataUpdatedAt),
MinTTL: int32(provider.MinTTL),
},
}, nil
}
@@ -262,6 +265,7 @@ func (this *DNSProviderService) FindAllEnabledDNSProvidersWithType(ctx context.C
Name: provider.Name,
Type: provider.Type,
TypeName: dnsclients.FindProviderTypeName(provider.Type),
MinTTL: int32(provider.MinTTL),
})
}
return &pb.FindAllEnabledDNSProvidersWithTypeResponse{DnsProviders: result}, nil

View File

@@ -109381,7 +109381,7 @@
"name": "edgeDNSProviders",
"engine": "InnoDB",
"charset": "utf8mb4_general_ci",
"definition": "CREATE TABLE `edgeDNSProviders` (\n `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',\n `name` varchar(255) DEFAULT NULL COMMENT '名称',\n `adminId` int(11) unsigned DEFAULT '0' COMMENT '管理员ID',\n `userId` int(11) unsigned DEFAULT '0' COMMENT '用户ID',\n `type` varchar(255) DEFAULT NULL COMMENT '供应商类型',\n `apiParams` json DEFAULT NULL COMMENT 'API参数',\n `createdAt` bigint(11) unsigned DEFAULT '0' COMMENT '创建时间',\n `state` tinyint(1) unsigned DEFAULT '1' COMMENT '状态',\n `dataUpdatedAt` bigint(11) unsigned DEFAULT '0' COMMENT '数据同步时间',\n PRIMARY KEY (`id`),\n KEY `type` (`type`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='DNS服务商'",
"definition": "CREATE TABLE `edgeDNSProviders` (\n `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',\n `name` varchar(255) DEFAULT NULL COMMENT '名称',\n `adminId` int(11) unsigned DEFAULT '0' COMMENT '管理员ID',\n `userId` int(11) unsigned DEFAULT '0' COMMENT '用户ID',\n `type` varchar(255) DEFAULT NULL COMMENT '供应商类型',\n `apiParams` json DEFAULT NULL COMMENT 'API参数',\n `createdAt` bigint(11) unsigned DEFAULT '0' COMMENT '创建时间',\n `state` tinyint(1) unsigned DEFAULT '1' COMMENT '状态',\n `dataUpdatedAt` bigint(11) unsigned DEFAULT '0' COMMENT '数据同步时间',\n `minTTL` int(11) unsigned DEFAULT '0' COMMENT '最小TTL',\n PRIMARY KEY (`id`),\n KEY `type` (`type`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='DNS服务商'",
"fields": [
{
"name": "id",
@@ -109418,6 +109418,10 @@
{
"name": "dataUpdatedAt",
"definition": "bigint(11) unsigned DEFAULT '0' COMMENT '数据同步时间'"
},
{
"name": "minTTL",
"definition": "int(11) unsigned DEFAULT '0' COMMENT '最小TTL'"
}
],
"indexes": [