From 426b358d56936cd9bace7f2f948e4c4858964248 Mon Sep 17 00:00:00 2001 From: v-me-50 Date: Mon, 16 Jun 2025 18:41:41 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9esa=E9=83=A8=E7=BD=B2?= =?UTF-8?q?=E5=92=8C=E5=A4=9A=E5=90=89=E4=BA=91cdn=E9=83=A8=E7=BD=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/internal/cert/apply/account.go | 4 ++ backend/internal/cert/deploy/aliyun/esa.go | 4 +- backend/internal/cert/deploy/doge/deploy.go | 50 ++++++++++++++------- 3 files changed, 41 insertions(+), 17 deletions(-) diff --git a/backend/internal/cert/apply/account.go b/backend/internal/cert/apply/account.go index f36d3e1..4a271a8 100644 --- a/backend/internal/cert/apply/account.go +++ b/backend/internal/cert/apply/account.go @@ -204,6 +204,9 @@ func GetAccountList(search, ca string, p, limit int64) ([]map[string]interface{} if ca == "custom" { whereSql += `and type not in ('Let's Encrypt','buypass', 'google', 'sslcom', 'zerossl')` } else { + if ca == "letsencrypt" { + ca = "Let's Encrypt" + } whereSql += " and type=?" whereArgs = append(whereArgs, ca) } @@ -217,6 +220,7 @@ func GetAccountList(search, ca string, p, limit int64) ([]map[string]interface{} data[i]["ca"] = data[i]["type"] delete(data[i], "private_key") delete(data[i], "reg") + delete(data[i], "type") } return data, int(count), nil diff --git a/backend/internal/cert/deploy/aliyun/esa.go b/backend/internal/cert/deploy/aliyun/esa.go index 85b0962..73195ca 100644 --- a/backend/internal/cert/deploy/aliyun/esa.go +++ b/backend/internal/cert/deploy/aliyun/esa.go @@ -87,11 +87,11 @@ func DeployAliyunESA(cfg map[string]any) error { if err != nil { return fmt.Errorf("创建 ESA 客户端失败: %w", err) } - certPEM, ok := cert["cert_pem"].(string) + certPEM, ok := cert["cert"].(string) if !ok { return fmt.Errorf("证书内容不存在或格式错误") } - privkeyPEM, ok := cert["privkey_pem"].(string) + privkeyPEM, ok := cert["key"].(string) if !ok { return fmt.Errorf("私钥内容不存在或格式错误") } diff --git a/backend/internal/cert/deploy/doge/deploy.go b/backend/internal/cert/deploy/doge/deploy.go index 1527a05..3c41c2a 100644 --- a/backend/internal/cert/deploy/doge/deploy.go +++ b/backend/internal/cert/deploy/doge/deploy.go @@ -1,6 +1,7 @@ package doge import ( + "ALLinSSL/backend/internal/access" "ALLinSSL/backend/public" "crypto/hmac" "crypto/sha1" @@ -10,6 +11,7 @@ import ( "io" "net/http" "net/url" + "strconv" "strings" ) @@ -26,36 +28,54 @@ func NewAuth(accessKey, secretKey string) *Auth { } func DeployCdn(cfg map[string]any) error { - if cfg == nil { - return fmt.Errorf("config cannot be nil") + cert, ok := cfg["certificate"].(map[string]any) + if !ok { + return fmt.Errorf("证书不存在") } - certStr, ok := cfg["cert"].(string) - if !ok || certStr == "" { - return fmt.Errorf("cert is required and must be a string") + 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") } - keyStr, ok := cfg["key"].(string) - if !ok || keyStr == "" { - return fmt.Errorf("key is required and must be a string") + // + providerData, err := access.GetAccess(providerID) + if err != nil { + return err } - accessKey, ok := cfg["access_key"].(string) - if !ok || accessKey == "" { - return fmt.Errorf("access_key is required and must be a string") + providerConfigStr, ok := providerData["config"].(string) + if !ok { + return fmt.Errorf("api配置错误") } - secretKey, ok := cfg["secret_key"].(string) - if !ok || secretKey == "" { - return fmt.Errorf("secret_key is required and must be a string") + // 解析 JSON 配置 + var providerConfig map[string]string + err = json.Unmarshal([]byte(providerConfigStr), &providerConfig) + if err != nil { + return err } + domain, ok := cfg["domain"].(string) if !ok || domain == "" { return fmt.Errorf("domain is required and must be a string") } + certStr, ok := cert["cert"].(string) + if !ok || certStr == "" { + return fmt.Errorf("cert is required and must be a string") + } + keyStr, ok := cert["key"].(string) + if !ok || keyStr == "" { + return fmt.Errorf("key is required and must be a string") + } sha256, err := public.GetSHA256(certStr) if err != nil { return fmt.Errorf("failed to get SHA256 of cert: %w", err) } note := fmt.Sprintf("allinssl-%s", sha256) - a := NewAuth(accessKey, secretKey) + a := NewAuth(providerConfig["access_key"], providerConfig["secret_key"]) // 检查证书是否已存在于 CDN certList, err := a.listCertFromCdn() if err != nil {