mirror of
https://github.com/TeaOSLab/EdgeAPI.git
synced 2025-11-03 23:20:26 +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 {
|
func (this *DNSProvider) Present(domain, token, keyAuth string) error {
|
||||||
_ = os.Setenv("LEGO_DISABLE_CNAME_SUPPORT", "true")
|
_ = 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)
|
var index = strings.Index(fqdn, "."+this.dnsDomain)
|
||||||
@@ -66,6 +69,7 @@ func (this *DNSProvider) Present(domain, token, keyAuth string) error {
|
|||||||
Type: dnstypes.RecordTypeTXT,
|
Type: dnstypes.RecordTypeTXT,
|
||||||
Value: value,
|
Value: value,
|
||||||
Route: this.raw.DefaultRoute(),
|
Route: this.raw.DefaultRoute(),
|
||||||
|
TTL: this.raw.MinTTL(),
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("create DNS record failed: %w", err)
|
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)
|
FindInt64Col(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// UpdateACMETaskCert 设置任务关联的证书
|
// UpdateACMETaskCert 设置任务关联的证书
|
||||||
func (this *ACMETaskDAO) UpdateACMETaskCert(tx *dbs.Tx, taskId int64, certId int64) error {
|
func (this *ACMETaskDAO) UpdateACMETaskCert(tx *dbs.Tx, taskId int64, certId int64) error {
|
||||||
if taskId <= 0 {
|
if taskId <= 0 {
|
||||||
@@ -387,6 +386,7 @@ func (this *ACMETaskDAO) runTaskWithoutLog(tx *dbs.Tx, taskId int64) (isOk bool,
|
|||||||
errMsg = "暂不支持此类型的DNS服务商 '" + dnsProvider.Type + "'"
|
errMsg = "暂不支持此类型的DNS服务商 '" + dnsProvider.Type + "'"
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
providerInterface.SetMinTTL(int32(dnsProvider.MinTTL))
|
||||||
apiParams, err := dnsProvider.DecodeAPIParams()
|
apiParams, err := dnsProvider.DecodeAPIParams()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
errMsg = "解析DNS服务商API参数时出错:" + err.Error()
|
errMsg = "解析DNS服务商API参数时出错:" + err.Error()
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ func (this *DNSProviderDAO) FindEnabledDNSProvider(tx *dbs.Tx, id int64) (*DNSPr
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CreateDNSProvider 创建服务商
|
// 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()
|
var op = NewDNSProviderOperator()
|
||||||
op.AdminId = adminId
|
op.AdminId = adminId
|
||||||
op.UserId = userId
|
op.UserId = userId
|
||||||
@@ -76,6 +76,11 @@ func (this *DNSProviderDAO) CreateDNSProvider(tx *dbs.Tx, adminId int64, userId
|
|||||||
if len(apiParamsJSON) > 0 {
|
if len(apiParamsJSON) > 0 {
|
||||||
op.ApiParams = apiParamsJSON
|
op.ApiParams = apiParamsJSON
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if minTTL >= 0 {
|
||||||
|
op.MinTTL = minTTL
|
||||||
|
}
|
||||||
|
|
||||||
op.State = DNSProviderStateEnabled
|
op.State = DNSProviderStateEnabled
|
||||||
err := this.Save(tx, op)
|
err := this.Save(tx, op)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -85,7 +90,7 @@ func (this *DNSProviderDAO) CreateDNSProvider(tx *dbs.Tx, adminId int64, userId
|
|||||||
}
|
}
|
||||||
|
|
||||||
// UpdateDNSProvider 修改服务商
|
// 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 {
|
if dnsProviderId <= 0 {
|
||||||
return errors.New("invalid dnsProviderId")
|
return errors.New("invalid dnsProviderId")
|
||||||
}
|
}
|
||||||
@@ -99,6 +104,10 @@ func (this *DNSProviderDAO) UpdateDNSProvider(tx *dbs.Tx, dnsProviderId int64, n
|
|||||||
op.ApiParams = apiParamsJSON
|
op.ApiParams = apiParamsJSON
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if minTTL >= 0 {
|
||||||
|
op.MinTTL = minTTL
|
||||||
|
}
|
||||||
|
|
||||||
err := this.Save(tx, op)
|
err := this.Save(tx, op)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
@@ -2,6 +2,19 @@ package dns
|
|||||||
|
|
||||||
import "github.com/iwind/TeaGo/dbs"
|
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服务商
|
// DNSProvider DNS服务商
|
||||||
type DNSProvider struct {
|
type DNSProvider struct {
|
||||||
Id uint32 `field:"id"` // ID
|
Id uint32 `field:"id"` // ID
|
||||||
@@ -13,18 +26,20 @@ type DNSProvider struct {
|
|||||||
CreatedAt uint64 `field:"createdAt"` // 创建时间
|
CreatedAt uint64 `field:"createdAt"` // 创建时间
|
||||||
State uint8 `field:"state"` // 状态
|
State uint8 `field:"state"` // 状态
|
||||||
DataUpdatedAt uint64 `field:"dataUpdatedAt"` // 数据同步时间
|
DataUpdatedAt uint64 `field:"dataUpdatedAt"` // 数据同步时间
|
||||||
|
MinTTL uint32 `field:"minTTL"` // 最小TTL
|
||||||
}
|
}
|
||||||
|
|
||||||
type DNSProviderOperator struct {
|
type DNSProviderOperator struct {
|
||||||
Id interface{} // ID
|
Id any // ID
|
||||||
Name interface{} // 名称
|
Name any // 名称
|
||||||
AdminId interface{} // 管理员ID
|
AdminId any // 管理员ID
|
||||||
UserId interface{} // 用户ID
|
UserId any // 用户ID
|
||||||
Type interface{} // 供应商类型
|
Type any // 供应商类型
|
||||||
ApiParams interface{} // API参数
|
ApiParams any // API参数
|
||||||
CreatedAt interface{} // 创建时间
|
CreatedAt any // 创建时间
|
||||||
State interface{} // 状态
|
State any // 状态
|
||||||
DataUpdatedAt interface{} // 数据同步时间
|
DataUpdatedAt any // 数据同步时间
|
||||||
|
MinTTL any // 最小TTL
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewDNSProviderOperator() *DNSProviderOperator {
|
func NewDNSProviderOperator() *DNSProviderOperator {
|
||||||
|
|||||||
@@ -5,7 +5,9 @@ import (
|
|||||||
"github.com/TeaOSLab/EdgeAPI/internal/dnsclients/dnstypes"
|
"github.com/TeaOSLab/EdgeAPI/internal/dnsclients/dnstypes"
|
||||||
)
|
)
|
||||||
|
|
||||||
type BaseProvider struct{}
|
type BaseProvider struct {
|
||||||
|
minTTL int32
|
||||||
|
}
|
||||||
|
|
||||||
// WrapError 封装解析相关错误
|
// WrapError 封装解析相关错误
|
||||||
func (this *BaseProvider) WrapError(err error, domain string, record *dnstypes.Record) error {
|
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)
|
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 默认线路
|
||||||
DefaultRoute() string
|
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()
|
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 {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -59,7 +59,7 @@ func (this *DNSProviderService) UpdateDNSProvider(ctx context.Context, req *pb.U
|
|||||||
return nil, err
|
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 {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -114,6 +114,7 @@ func (this *DNSProviderService) ListEnabledDNSProviders(ctx context.Context, req
|
|||||||
TypeName: dnsclients.FindProviderTypeName(provider.Type),
|
TypeName: dnsclients.FindProviderTypeName(provider.Type),
|
||||||
ApiParamsJSON: provider.ApiParams,
|
ApiParamsJSON: provider.ApiParams,
|
||||||
DataUpdatedAt: int64(provider.DataUpdatedAt),
|
DataUpdatedAt: int64(provider.DataUpdatedAt),
|
||||||
|
MinTTL: int32(provider.MinTTL),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
return &pb.ListEnabledDNSProvidersResponse{DnsProviders: result}, nil
|
return &pb.ListEnabledDNSProvidersResponse{DnsProviders: result}, nil
|
||||||
@@ -148,6 +149,7 @@ func (this *DNSProviderService) FindAllEnabledDNSProviders(ctx context.Context,
|
|||||||
TypeName: dnsclients.FindProviderTypeName(provider.Type),
|
TypeName: dnsclients.FindProviderTypeName(provider.Type),
|
||||||
ApiParamsJSON: provider.ApiParams,
|
ApiParamsJSON: provider.ApiParams,
|
||||||
DataUpdatedAt: int64(provider.DataUpdatedAt),
|
DataUpdatedAt: int64(provider.DataUpdatedAt),
|
||||||
|
MinTTL: int32(provider.MinTTL),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
return &pb.FindAllEnabledDNSProvidersResponse{DnsProviders: result}, nil
|
return &pb.FindAllEnabledDNSProvidersResponse{DnsProviders: result}, nil
|
||||||
@@ -218,6 +220,7 @@ func (this *DNSProviderService) FindEnabledDNSProvider(ctx context.Context, req
|
|||||||
TypeName: dnsclients.FindProviderTypeName(provider.Type),
|
TypeName: dnsclients.FindProviderTypeName(provider.Type),
|
||||||
ApiParamsJSON: provider.ApiParams,
|
ApiParamsJSON: provider.ApiParams,
|
||||||
DataUpdatedAt: int64(provider.DataUpdatedAt),
|
DataUpdatedAt: int64(provider.DataUpdatedAt),
|
||||||
|
MinTTL: int32(provider.MinTTL),
|
||||||
},
|
},
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
@@ -262,6 +265,7 @@ func (this *DNSProviderService) FindAllEnabledDNSProvidersWithType(ctx context.C
|
|||||||
Name: provider.Name,
|
Name: provider.Name,
|
||||||
Type: provider.Type,
|
Type: provider.Type,
|
||||||
TypeName: dnsclients.FindProviderTypeName(provider.Type),
|
TypeName: dnsclients.FindProviderTypeName(provider.Type),
|
||||||
|
MinTTL: int32(provider.MinTTL),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
return &pb.FindAllEnabledDNSProvidersWithTypeResponse{DnsProviders: result}, nil
|
return &pb.FindAllEnabledDNSProvidersWithTypeResponse{DnsProviders: result}, nil
|
||||||
|
|||||||
@@ -109381,7 +109381,7 @@
|
|||||||
"name": "edgeDNSProviders",
|
"name": "edgeDNSProviders",
|
||||||
"engine": "InnoDB",
|
"engine": "InnoDB",
|
||||||
"charset": "utf8mb4_general_ci",
|
"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": [
|
"fields": [
|
||||||
{
|
{
|
||||||
"name": "id",
|
"name": "id",
|
||||||
@@ -109418,6 +109418,10 @@
|
|||||||
{
|
{
|
||||||
"name": "dataUpdatedAt",
|
"name": "dataUpdatedAt",
|
||||||
"definition": "bigint(11) unsigned DEFAULT '0' COMMENT '数据同步时间'"
|
"definition": "bigint(11) unsigned DEFAULT '0' COMMENT '数据同步时间'"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "minTTL",
|
||||||
|
"definition": "int(11) unsigned DEFAULT '0' COMMENT '最小TTL'"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"indexes": [
|
"indexes": [
|
||||||
|
|||||||
Reference in New Issue
Block a user