mirror of https://github.com/allinssl/allinssl
76 lines
2.2 KiB
Go
76 lines
2.2 KiB
Go
package deploy
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/volcengine/volcengine-go-sdk/service/cdn"
|
|
"github.com/volcengine/volcengine-go-sdk/volcengine"
|
|
"github.com/volcengine/volcengine-go-sdk/volcengine/credentials"
|
|
"github.com/volcengine/volcengine-go-sdk/volcengine/session"
|
|
"regexp"
|
|
)
|
|
|
|
type VolcEngineCdnClient struct {
|
|
*cdn.CDN
|
|
}
|
|
|
|
func createSdkSession(ak, sk, region string) (*session.Session, error) {
|
|
config := volcengine.NewConfig().
|
|
WithRegion(region).
|
|
WithCredentials(credentials.NewStaticCredentials(ak, sk, ""))
|
|
sess, err := session.NewSession(config)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("创建火山引擎客户端失败: %w", err)
|
|
}
|
|
|
|
return sess, err
|
|
}
|
|
|
|
func ClientVolcEngineCdn(ak, sk, region string) (*VolcEngineCdnClient, error) {
|
|
sess, err := createSdkSession(ak, sk, region)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("创建火山引擎CDN客户端失败: %w", err)
|
|
}
|
|
cdnClient := &VolcEngineCdnClient{
|
|
CDN: cdn.New(sess),
|
|
}
|
|
return cdnClient, nil
|
|
}
|
|
|
|
func (v *VolcEngineCdnClient) IUploadCert(certContent, certKey string) (string, error) {
|
|
// 创建证书上传请求
|
|
input := &cdn.AddCertificateInput{
|
|
Certificate: volcengine.String(certContent),
|
|
PrivateKey: volcengine.String(certKey),
|
|
Repeatable: volcengine.Bool(false),
|
|
Source: volcengine.String("volc_cert_center"),
|
|
}
|
|
|
|
output, err := v.AddCertificate(input)
|
|
if err != nil {
|
|
if output.Metadata.Error.Code == "InvalidParameter.Certificate.Duplicated" {
|
|
re := regexp.MustCompile(`cert-[a-f0-9]{32}`)
|
|
certId := re.FindString(output.Metadata.Error.Message)
|
|
fmt.Printf("相同证书已存在 certId:%s\n", certId)
|
|
return certId, nil
|
|
}
|
|
return "", fmt.Errorf("上传证书失败: %w", err)
|
|
}
|
|
return *output.CertId, nil
|
|
}
|
|
|
|
func (v *VolcEngineCdnClient) IBatchDeployCert(certId, domain string) error {
|
|
batchDeployCertInput := &cdn.BatchDeployCertInput{
|
|
CertId: volcengine.String(certId),
|
|
Domain: volcengine.String(domain),
|
|
}
|
|
|
|
res, err := v.BatchDeployCert(batchDeployCertInput)
|
|
if err != nil {
|
|
return fmt.Errorf("部署证书失败: %w", err)
|
|
}
|
|
if *res.DeployResult[0].Status != "success" {
|
|
return fmt.Errorf("部署证书失败: %s", *res.DeployResult[0].ErrorMsg)
|
|
}
|
|
return err
|
|
}
|