mirror of
https://github.com/TeaOSLab/EdgeAPI.git
synced 2025-11-01 21:30:27 +08:00
DNS服务商账号增加“最小TTL”选项
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -39,4 +39,10 @@ type ProviderInterface interface {
|
||||
|
||||
// DefaultRoute 默认线路
|
||||
DefaultRoute() string
|
||||
|
||||
// SetMinTTL 设置最小TTL
|
||||
SetMinTTL(ttl int32)
|
||||
|
||||
// MinTTL 最小TTL
|
||||
MinTTL() int32
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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": [
|
||||
|
||||
Reference in New Issue
Block a user