拆分accounts库和settings库

dns新增azure
新增部署到华为云cdn
This commit is contained in:
zhangchenhao
2025-05-28 16:29:50 +08:00
parent b177c20cb4
commit 9829f7eaf3
9 changed files with 234 additions and 66 deletions

View File

@@ -75,6 +75,9 @@ func Deploy(cfg map[string]any, logger *public.Logger) error {
case "baidu-cdn":
logger.Debug("部署到百度云CDN...")
return DeployBaiduCdn(cfg)
case "huaweicloud-cdn":
logger.Debug("部署到华为云CDN...")
return DeployHwCdn(cfg)
default:
return fmt.Errorf("不支持的部署: %s", providerName)
}

View File

@@ -0,0 +1,104 @@
package deploy
import (
"ALLinSSL/backend/internal/access"
"encoding/json"
"fmt"
"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/global"
cdn "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cdn/v2"
"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cdn/v2/model"
region "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cdn/v2/region"
"strconv"
"time"
)
func CreateHwAuth(accessKey, accessSecret string) (*global.Credentials, error) {
return global.NewCredentialsBuilder().WithAk(accessKey).WithSk(accessSecret).SafeBuild()
}
func ClientHwCdn(auth *global.Credentials) (*cdn.CdnClient, error) {
if auth == nil {
return nil, fmt.Errorf("authentication credentials cannot be nil")
}
Region, err := region.SafeValueOf("cn-north-1")
if err != nil {
return nil, fmt.Errorf("failed to get region: %v", err)
}
builder, err := cdn.CdnClientBuilder().WithRegion(Region).WithCredential(auth).SafeBuild()
if err != nil {
return nil, fmt.Errorf("failed to build CDN client: %v", err)
}
return cdn.NewCdnClient(builder), nil
}
func DeployHwCdn(cfg map[string]any) error {
cert, ok := cfg["certificate"].(map[string]any)
if !ok {
return fmt.Errorf("证书不存在")
}
var providerID string
switch v := cfg["provider_id"].(type) {
case float64:
providerID = strconv.Itoa(int(v))
case string:
providerID = v
default:
return fmt.Errorf("参数错误provider_id")
}
domain, ok := cfg["domain"].(string)
if !ok {
return fmt.Errorf("参数错误domain")
}
// 设置证书
keyPem, ok := cert["key"].(string)
if !ok {
return fmt.Errorf("证书错误key")
}
certPem, ok := cert["cert"].(string)
if !ok {
return fmt.Errorf("证书错误cert")
}
providerData, err := access.GetAccess(providerID)
if err != nil {
return err
}
providerConfigStr, ok := providerData["config"].(string)
if !ok {
return fmt.Errorf("api配置错误")
}
// 解析 JSON 配置
var providerConfig map[string]string
err = json.Unmarshal([]byte(providerConfigStr), &providerConfig)
if err != nil {
return err
}
auth, err := CreateHwAuth(providerConfig["access_key"], providerConfig["secret_key"])
if err != nil {
return err
}
client, err := ClientHwCdn(auth)
if err != nil {
return err
}
request := &model.UpdateDomainMultiCertificatesRequest{}
certNameHttps := fmt.Sprintf("ALLinSSL(%s)", time.Now().String())
httpsbody := &model.UpdateDomainMultiCertificatesRequestBodyContent{
DomainName: domain,
HttpsSwitch: int32(1),
CertName: &certNameHttps,
Certificate: &certPem,
PrivateKey: &keyPem,
}
request.Body = &model.UpdateDomainMultiCertificatesRequestBody{
Https: httpsbody,
}
response, err := client.UpdateDomainMultiCertificates(request)
if err == nil {
fmt.Printf("%+v\n", response)
} else {
return fmt.Errorf("failed to update domain multi certificates: %v", err)
}
return nil
}