mirror of
https://gitee.com/mirrors/AllinSSL.git
synced 2026-03-08 15:51:11 +08:00
拆分accounts库和settings库
dns新增azure 新增部署到华为云cdn
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
104
backend/internal/cert/deploy/huaweicloud.go
Normal file
104
backend/internal/cert/deploy/huaweicloud.go
Normal 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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user