mirror of
https://gitee.com/mirrors/AllinSSL.git
synced 2026-03-13 01:50:53 +08:00
新增部署阿里云dcdn、lecdn
新增dns厂商constellix
This commit is contained in:
92
backend/internal/cert/deploy/aliyun/dcdn.go
Normal file
92
backend/internal/cert/deploy/aliyun/dcdn.go
Normal file
@@ -0,0 +1,92 @@
|
||||
package aliyun
|
||||
|
||||
import (
|
||||
"ALLinSSL/backend/internal/access"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
|
||||
dcdn "github.com/alibabacloud-go/dcdn-20180115/v3/client"
|
||||
util "github.com/alibabacloud-go/tea-utils/v2/service"
|
||||
"github.com/alibabacloud-go/tea/tea"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
func CreateDcdnClient(accessKey, accessSecret string) (*dcdn.Client, error) {
|
||||
config := &openapi.Config{
|
||||
AccessKeyId: tea.String(accessKey),
|
||||
AccessKeySecret: tea.String(accessSecret),
|
||||
RegionId: tea.String("cn-hangzhou"),
|
||||
}
|
||||
return dcdn.NewClient(config)
|
||||
}
|
||||
|
||||
func DeployCertToDcdn(client *dcdn.Client, domain, certPEM, privkeyPEM string) error {
|
||||
request := &dcdn.SetDcdnDomainSSLCertificateRequest{
|
||||
DomainName: tea.String(domain),
|
||||
SSLPri: tea.String(privkeyPEM),
|
||||
SSLPub: tea.String(certPEM),
|
||||
SSLProtocol: tea.String("on"),
|
||||
CertType: tea.String("upload"),
|
||||
}
|
||||
|
||||
runtime := &util.RuntimeOptions{}
|
||||
|
||||
_, err := client.SetDcdnDomainSSLCertificateWithOptions(request, runtime)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
|
||||
}
|
||||
|
||||
func DeployAliyunDcdn(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")
|
||||
}
|
||||
//
|
||||
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
|
||||
}
|
||||
client, err := CreateDcdnClient(providerConfig["access_key_id"], providerConfig["access_key_secret"])
|
||||
if err != nil {
|
||||
return fmt.Errorf("创建 DCDN 客户端失败: %w", err)
|
||||
}
|
||||
certPEM, ok := cert["cert"].(string)
|
||||
if !ok {
|
||||
return fmt.Errorf("证书内容不存在或格式错误")
|
||||
}
|
||||
privkeyPEM, ok := cert["key"].(string)
|
||||
if !ok {
|
||||
return fmt.Errorf("私钥内容不存在或格式错误")
|
||||
}
|
||||
domain, ok := cfg["domain"].(string)
|
||||
if !ok {
|
||||
return fmt.Errorf("域名不存在或格式错误")
|
||||
}
|
||||
err = DeployCertToDcdn(client, domain, certPEM, privkeyPEM)
|
||||
if err != nil {
|
||||
return fmt.Errorf("部署证书到 DCDN 失败: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user