拆分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

@@ -6,7 +6,7 @@ import (
)
func GetSqliteEAB() (*public.Sqlite, error) {
s, err := public.NewSqlite("data/data.db", "")
s, err := public.NewSqlite("data/accounts.db", "")
if err != nil {
return nil, err
}

View File

@@ -9,12 +9,14 @@ import (
"crypto/rand"
"encoding/json"
"fmt"
azcorecloud "github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud"
"github.com/go-acme/lego/v4/certcrypto"
"github.com/go-acme/lego/v4/certificate"
"github.com/go-acme/lego/v4/challenge"
"github.com/go-acme/lego/v4/challenge/dns01"
"github.com/go-acme/lego/v4/lego"
"github.com/go-acme/lego/v4/providers/dns/alidns"
"github.com/go-acme/lego/v4/providers/dns/azuredns"
"github.com/go-acme/lego/v4/providers/dns/baiducloud"
"github.com/go-acme/lego/v4/providers/dns/cloudflare"
"github.com/go-acme/lego/v4/providers/dns/cloudns"
@@ -53,7 +55,7 @@ var CADirURLMap = map[string]string{
}
func GetSqlite() (*public.Sqlite, error) {
s, err := public.NewSqlite("data/data.db", "")
s, err := public.NewSqlite("data/accounts.db", "")
if err != nil {
return nil, err
}
@@ -119,11 +121,27 @@ func GetDNSProvider(providerName string, creds map[string]string) (challenge.Pro
config.AuthID = creds["auth_id"]
config.AuthPassword = creds["auth_password"]
return cloudns.NewDNSProviderConfig(config)
case "route53":
case "aws":
config := route53.NewDefaultConfig()
config.AccessKeyID = creds["access_key_id"]
config.SecretAccessKey = creds["secret_access_key"]
return route53.NewDNSProviderConfig(config)
case "azure":
config := azuredns.NewDefaultConfig()
config.TenantID = creds["tenant_id"]
config.ClientID = creds["client_id"]
config.ClientSecret = creds["client_secret"]
switch strings.ToLower(creds["environment"]) {
case "", "default", "public", "azurecloud":
config.Environment = azcorecloud.AzurePublic
case "china", "chinacloud", "azurechina", "azurechinacloud":
config.Environment = azcorecloud.AzureChina
case "usgovernment", "government", "azureusgovernment", "azuregovernment":
config.Environment = azcorecloud.AzureGovernment
default:
return nil, fmt.Errorf("不支持的 Azure 环境: %s", creds["environment"])
}
return azuredns.NewDNSProviderConfig(config)
default:
return nil, fmt.Errorf("不支持的 DNS Provider: %s", providerName)

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
}

View File

@@ -39,7 +39,7 @@ func Get() (Setting, error) {
}
setting.Key = string(key)
setting.Cert = string(cert)
s, err := public.NewSqlite("data/data.db", "")
s, err := public.NewSqlite("data/settings.db", "")
if err != nil {
return setting, err
}
@@ -61,7 +61,7 @@ func Save(setting *Setting) error {
var restart bool
var reload bool
s, err := public.NewSqlite("data/data.db", "")
s, err := public.NewSqlite("data/settings.db", "")
if err != nil {
return err
}