feat(gateway): 优化gateway相关功能
Quality check / Web UI (push) Successful in 9m19s

This commit is contained in:
mei
2026-09-12 15:32:27 +08:00
parent 0d89b7fe8f
commit 9b656cebee
84 changed files with 2769 additions and 825 deletions
+27 -31
View File
@@ -2,54 +2,50 @@ package alidns
import (
"encoding/json"
"fmt"
alidns "github.com/alibabacloud-go/alidns-20150109/v5/client"
openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
"github.com/alibabacloud-go/tea/tea"
"github.com/aliyun/credentials-go/credentials"
"github.com/ssdomei232/goodBaby/handler/db"
"github.com/ssdomei232/goodBaby/model"
)
// getAliDNSClient initializes and returns an Alibaba Cloud DNS client based on the provided rule's account configuration. It retrieves the account configuration from the database, sets up the necessary credentials, and creates a new client instance for interacting with Alibaba Cloud DNS services.
func getAliDNSClientFromRule(rule *model.Rule) (client *alidns.Client, err error) {
var accountConfig AliDNSAccount
// get config
if err := db.LoadAccountConfig(rule.AccountID, &accountConfig); err != nil {
return nil, err
// ParseAccountConfig 解析阿里云账号配置
func ParseAccountConfig(config string) (*AliDNSAccount, error) {
if config == "" {
return nil, fmt.Errorf("解析阿里云账号配置失败: 规则没有关联账号")
}
return getAliDNSClient(accountConfig.AK, accountConfig.SK)
var account AliDNSAccount
if err := json.Unmarshal([]byte(config), &account); err != nil {
return nil, fmt.Errorf("解析阿里云账号配置失败: %v", err)
}
return &account, nil
}
func getAliDNSClient(ak string, sk string) (client *alidns.Client, err error) {
// init aliyun account config
// ParseDeleteRecordConfig 解析删除解析记录规则配置
func ParseDeleteRecordConfig(configJSON string) (*DeleteRecordConfig, error) {
var config DeleteRecordConfig
if err := json.Unmarshal([]byte(configJSON), &config); err != nil {
return nil, fmt.Errorf("解析阿里云删除记录规则配置失败: %v", err)
}
return &config, nil
}
// newClient 用 AccessKey 创建阿里云 DNS 客户端
func newClient(ak string, sk string) (*alidns.Client, error) {
credentialsConfig := new(credentials.Config).
SetType("access_key").
SetAccessKeyId(ak).
SetAccessKeySecret(sk)
akCredential, err := credentials.NewCredential(credentialsConfig)
if err != nil {
return nil, err
}
config := &openapi.Config{}
config.Credential = akCredential
config.Endpoint = tea.String("alidns.aliyuncs.com")
// create aliyun account client
client, _ = alidns.NewClient(config)
return client, nil
}
// getDeleteRecordConfig retrieves the configuration for deleting DNS records from the provided rule. It unmarshals the rule's configuration JSON into a DeleteRecordConfig structure and returns it.
func getDeleteRecordConfig(rule *model.Rule) (*DeleteRecordConfig, error) {
var deleteRecordConfig DeleteRecordConfig
if err := json.Unmarshal([]byte(rule.ConfigJson), &deleteRecordConfig); err != nil {
return nil, err
return nil, fmt.Errorf("创建阿里云凭据失败: %w", err)
}
return &deleteRecordConfig, nil
return alidns.NewClient(&openapi.Config{
Credential: akCredential,
Endpoint: tea.String("alidns.aliyuncs.com"),
})
}