From c557293c789fc171be5250c40f858dfe7d9c7344 Mon Sep 17 00:00:00 2001 From: zhangchenhao Date: Fri, 23 May 2025 10:16:49 +0800 Subject: [PATCH] godaddy --- backend/internal/cert/apply/apply.go | 34 +++++++++++++++----------- backend/migrations/init.go | 36 +++++++++++++++------------- 2 files changed, 39 insertions(+), 31 deletions(-) diff --git a/backend/internal/cert/apply/apply.go b/backend/internal/cert/apply/apply.go index 3d3ba48..c90429a 100644 --- a/backend/internal/cert/apply/apply.go +++ b/backend/internal/cert/apply/apply.go @@ -17,6 +17,7 @@ import ( "github.com/go-acme/lego/v4/providers/dns/alidns" "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/godaddy" "github.com/go-acme/lego/v4/providers/dns/huaweicloud" "github.com/go-acme/lego/v4/providers/dns/tencentcloud" "github.com/go-acme/lego/v4/providers/dns/volcengine" @@ -92,7 +93,12 @@ func GetDNSProvider(providerName string, creds map[string]string) (challenge.Pro config.AccessKey = creds["access_key"] config.SecretKey = creds["secret_key"] return volcengine.NewDNSProviderConfig(config) - + case "godaddy": + config := godaddy.NewDefaultConfig() + config.APIKey = creds["api_key"] + config.APISecret = creds["api_secret"] + return godaddy.NewDNSProviderConfig(config) + default: return nil, fmt.Errorf("不支持的 DNS Provider: %s", providerName) } @@ -123,7 +129,7 @@ func GetAcmeClient(db *public.Sqlite, email, algorithm, proxy, eabId string, log } ca = eabData["ca"].(string) } - + user, err := LoadUserFromDB(db, email, ca) if err != nil { logger.Debug("acme账号不存在,注册新账号") @@ -172,7 +178,7 @@ func GetAcmeClient(db *public.Sqlite, email, algorithm, proxy, eabId string, log return nil, err } user.Registration = reg - + err = SaveUserToDB(db, user, ca) if err != nil { return nil, err @@ -250,7 +256,7 @@ func Apply(cfg map[string]any, logger *public.Logger) (map[string]any, error) { return nil, err } defer db.Close() - + email, ok := cfg["email"].(string) if !ok { return nil, fmt.Errorf("参数错误:email") @@ -296,7 +302,7 @@ func Apply(cfg map[string]any, logger *public.Logger) (map[string]any, error) { default: eabId = "" } - + var providerID string switch v := cfg["provider_id"].(type) { case float64: @@ -322,7 +328,7 @@ func Apply(cfg map[string]any, logger *public.Logger) (map[string]any, error) { return nil, fmt.Errorf("参数错误:name_server") } } - + var skipCheck bool if cfg["skip_check"] == nil { // 默认跳过预检查 @@ -357,12 +363,12 @@ func Apply(cfg map[string]any, logger *public.Logger) (map[string]any, error) { return nil, fmt.Errorf("参数错误:skip_check") } } - + domainArr := strings.Split(domains, ",") for i := range domainArr { domainArr[i] = strings.TrimSpace(domainArr[i]) } - + // 获取上次申请的证书 runId, ok := cfg["_runId"].(string) if !ok { @@ -395,13 +401,13 @@ func Apply(cfg map[string]any, logger *public.Logger) (map[string]any, error) { if err != nil { return nil, err } - + // DNS 验证 provider, err := GetDNSProvider(providerStr, providerConfig) if err != nil { return nil, fmt.Errorf("创建 DNS provider 失败: %v", err) } - + if skipCheck { // 跳过预检查 err = client.Challenge.SetDNS01Provider(provider, @@ -418,7 +424,7 @@ func Apply(cfg map[string]any, logger *public.Logger) (map[string]any, error) { if err != nil { return nil, err } - + // fmt.Println(strings.Split(domains, ",")) request := certificate.ObtainRequest{ Domains: domainArr, @@ -428,18 +434,18 @@ func Apply(cfg map[string]any, logger *public.Logger) (map[string]any, error) { if err != nil { return nil, err } - + certStr := string(certObj.Certificate) keyStr := string(certObj.PrivateKey) issuerCertStr := string(certObj.IssuerCertificate) - + // 保存证书和私钥 data := map[string]any{ "cert": certStr, "key": keyStr, "issuerCert": issuerCertStr, } - + _, err = cert.SaveCert("workflow", keyStr, certStr, issuerCertStr, runId) if err != nil { return nil, err diff --git a/backend/migrations/init.go b/backend/migrations/init.go index 45a1f5e..143fb3b 100644 --- a/backend/migrations/init.go +++ b/backend/migrations/init.go @@ -28,9 +28,9 @@ func init() { fmt.Fprintf(os.Stderr, "切换目录失败: %v\n", err) os.Exit(1) } - + os.MkdirAll("data", os.ModePerm) - + dbPath := "data/data.db" _, _ = filepath.Abs(dbPath) // fmt.Println("数据库路径:", absPath) @@ -201,15 +201,15 @@ func init() { INSERT INTO access_type (name, type) VALUES ('ssh', 'host'); INSERT INTO access_type (name, type) VALUES ('btpanel', 'host'); INSERT INTO access_type (name, type) VALUES ('1panel', 'host');`) - + uuidStr := public.GenerateUUID() randomStr := public.RandomString(8) - + port, err := public.GetFreePort() if err != nil { port = 20773 } - + Isql := fmt.Sprintf( `INSERT INTO settings (key, value, create_time, update_time, active, type) VALUES ('log_path', 'logs/ALLinSSL.log', '2025-04-15 15:58', '2025-04-15 15:58', 1, null); INSERT INTO settings (key, value, create_time, update_time, active, type) VALUES ( 'workflow_log_path', 'logs/workflows/', '2025-04-15 15:58', '2025-04-15 15:58', 1, null); @@ -218,26 +218,28 @@ INSERT INTO settings (key, value, create_time, update_time, active, type) VALUES INSERT INTO settings (key, value, create_time, update_time, active, type) VALUES ('session_key', '%s', '2025-04-15 15:58', '2025-04-15 15:58', 1, null); INSERT INTO settings (key, value, create_time, update_time, active, type) VALUES ('secure', '/%s', '2025-04-15 15:58', '2025-04-15 15:58', 1, null); INSERT INTO settings (key, value, create_time, update_time, active, type) VALUES ('port', '%d', '2025-04-15 15:58', '2025-04-15 15:58', 1, null);`, uuidStr, randomStr, port) - + insertDefaultData(db, "settings", Isql) - + InsertIfNotExists(db, "access_type", map[string]any{"name": "cloudflare", "type": "host"}, []string{"name", "type"}, []any{"cloudflare", "host"}) InsertIfNotExists(db, "access_type", map[string]any{"name": "cloudflare", "type": "dns"}, []string{"name", "type"}, []any{"cloudflare", "dns"}) InsertIfNotExists(db, "access_type", map[string]any{"name": "huaweicloud", "type": "host"}, []string{"name", "type"}, []any{"huaweicloud", "host"}) InsertIfNotExists(db, "access_type", map[string]any{"name": "huaweicloud", "type": "dns"}, []string{"name", "type"}, []any{"huaweicloud", "dns"}) - + InsertIfNotExists(db, "access_type", map[string]any{"name": "baidu", "type": "host"}, []string{"name", "type"}, []any{"baidu", "host"}) InsertIfNotExists(db, "access_type", map[string]any{"name": "baidu", "type": "dns"}, []string{"name", "type"}, []any{"baidu", "dns"}) - + InsertIfNotExists(db, "access_type", map[string]any{"name": "btwaf", "type": "host"}, []string{"name", "type"}, []any{"btwaf", "host"}) - + // 雷池 InsertIfNotExists(db, "access_type", map[string]any{"name": "safeline", "type": "host"}, []string{"name", "type"}, []any{"safeline", "host"}) // 西部数码 InsertIfNotExists(db, "access_type", map[string]any{"name": "westcn", "type": "dns"}, []string{"name", "type"}, []any{"westcn", "dns"}) // 火山引擎 InsertIfNotExists(db, "access_type", map[string]any{"name": "volcengine", "type": "dns"}, []string{"name", "type"}, []any{"volcengine", "dns"}) - + // godaddy + InsertIfNotExists(db, "access_type", map[string]any{"name": "godaddy", "type": "dns"}, []string{"name", "type"}, []any{"godaddy", "dns"}) + err = sqlite_migrate.EnsureDatabaseWithTables( "data/site_monitor.db", "data/data.db", @@ -246,7 +248,7 @@ INSERT INTO settings (key, value, create_time, update_time, active, type) VALUES if err != nil { fmt.Println("错误:", err) } - + db1, err := sql.Open("sqlite", "data/site_monitor.db") if err != nil { // fmt.Println("创建数据库失败:", err) @@ -289,7 +291,7 @@ func insertDefaultData(db *sql.DB, table, insertSQL string) { // fmt.Println("检查数据行数失败:", err) return } - + // 如果表为空,则插入默认数据 if count == 0 { // fmt.Println("表为空,插入默认数据...") @@ -323,7 +325,7 @@ func InsertIfNotExists( whereArgs = append(whereArgs, val) i++ } - + // 2. 判断是否存在 query := fmt.Sprintf("SELECT EXISTS(SELECT 1 FROM %s WHERE %s)", table, whereClause) var exists bool @@ -334,7 +336,7 @@ func InsertIfNotExists( if exists { return nil // 已存在 } - + // 3. 构建 INSERT 语句 columnList := "" placeholderList := "" @@ -347,11 +349,11 @@ func InsertIfNotExists( placeholderList += "?" } insertSQL := fmt.Sprintf("INSERT INTO %s (%s) VALUES (%s)", table, columnList, placeholderList) - + _, err = db.Exec(insertSQL, insertValues...) if err != nil { return fmt.Errorf("insert failed: %w", err) } - + return nil }