pull/135/head
zhangchenhao 2025-05-23 10:16:49 +08:00
parent fe363955d8
commit c557293c78
2 changed files with 39 additions and 31 deletions

View File

@ -17,6 +17,7 @@ import (
"github.com/go-acme/lego/v4/providers/dns/alidns" "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/baiducloud"
"github.com/go-acme/lego/v4/providers/dns/cloudflare" "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/huaweicloud"
"github.com/go-acme/lego/v4/providers/dns/tencentcloud" "github.com/go-acme/lego/v4/providers/dns/tencentcloud"
"github.com/go-acme/lego/v4/providers/dns/volcengine" "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.AccessKey = creds["access_key"]
config.SecretKey = creds["secret_key"] config.SecretKey = creds["secret_key"]
return volcengine.NewDNSProviderConfig(config) return volcengine.NewDNSProviderConfig(config)
case "godaddy":
config := godaddy.NewDefaultConfig()
config.APIKey = creds["api_key"]
config.APISecret = creds["api_secret"]
return godaddy.NewDNSProviderConfig(config)
default: default:
return nil, fmt.Errorf("不支持的 DNS Provider: %s", providerName) 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) ca = eabData["ca"].(string)
} }
user, err := LoadUserFromDB(db, email, ca) user, err := LoadUserFromDB(db, email, ca)
if err != nil { if err != nil {
logger.Debug("acme账号不存在注册新账号") logger.Debug("acme账号不存在注册新账号")
@ -172,7 +178,7 @@ func GetAcmeClient(db *public.Sqlite, email, algorithm, proxy, eabId string, log
return nil, err return nil, err
} }
user.Registration = reg user.Registration = reg
err = SaveUserToDB(db, user, ca) err = SaveUserToDB(db, user, ca)
if err != nil { if err != nil {
return nil, err return nil, err
@ -250,7 +256,7 @@ func Apply(cfg map[string]any, logger *public.Logger) (map[string]any, error) {
return nil, err return nil, err
} }
defer db.Close() defer db.Close()
email, ok := cfg["email"].(string) email, ok := cfg["email"].(string)
if !ok { if !ok {
return nil, fmt.Errorf("参数错误email") return nil, fmt.Errorf("参数错误email")
@ -296,7 +302,7 @@ func Apply(cfg map[string]any, logger *public.Logger) (map[string]any, error) {
default: default:
eabId = "" eabId = ""
} }
var providerID string var providerID string
switch v := cfg["provider_id"].(type) { switch v := cfg["provider_id"].(type) {
case float64: 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") return nil, fmt.Errorf("参数错误name_server")
} }
} }
var skipCheck bool var skipCheck bool
if cfg["skip_check"] == nil { 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") return nil, fmt.Errorf("参数错误skip_check")
} }
} }
domainArr := strings.Split(domains, ",") domainArr := strings.Split(domains, ",")
for i := range domainArr { for i := range domainArr {
domainArr[i] = strings.TrimSpace(domainArr[i]) domainArr[i] = strings.TrimSpace(domainArr[i])
} }
// 获取上次申请的证书 // 获取上次申请的证书
runId, ok := cfg["_runId"].(string) runId, ok := cfg["_runId"].(string)
if !ok { if !ok {
@ -395,13 +401,13 @@ func Apply(cfg map[string]any, logger *public.Logger) (map[string]any, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
// DNS 验证 // DNS 验证
provider, err := GetDNSProvider(providerStr, providerConfig) provider, err := GetDNSProvider(providerStr, providerConfig)
if err != nil { if err != nil {
return nil, fmt.Errorf("创建 DNS provider 失败: %v", err) return nil, fmt.Errorf("创建 DNS provider 失败: %v", err)
} }
if skipCheck { if skipCheck {
// 跳过预检查 // 跳过预检查
err = client.Challenge.SetDNS01Provider(provider, 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 { if err != nil {
return nil, err return nil, err
} }
// fmt.Println(strings.Split(domains, ",")) // fmt.Println(strings.Split(domains, ","))
request := certificate.ObtainRequest{ request := certificate.ObtainRequest{
Domains: domainArr, Domains: domainArr,
@ -428,18 +434,18 @@ func Apply(cfg map[string]any, logger *public.Logger) (map[string]any, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
certStr := string(certObj.Certificate) certStr := string(certObj.Certificate)
keyStr := string(certObj.PrivateKey) keyStr := string(certObj.PrivateKey)
issuerCertStr := string(certObj.IssuerCertificate) issuerCertStr := string(certObj.IssuerCertificate)
// 保存证书和私钥 // 保存证书和私钥
data := map[string]any{ data := map[string]any{
"cert": certStr, "cert": certStr,
"key": keyStr, "key": keyStr,
"issuerCert": issuerCertStr, "issuerCert": issuerCertStr,
} }
_, err = cert.SaveCert("workflow", keyStr, certStr, issuerCertStr, runId) _, err = cert.SaveCert("workflow", keyStr, certStr, issuerCertStr, runId)
if err != nil { if err != nil {
return nil, err return nil, err

View File

@ -28,9 +28,9 @@ func init() {
fmt.Fprintf(os.Stderr, "切换目录失败: %v\n", err) fmt.Fprintf(os.Stderr, "切换目录失败: %v\n", err)
os.Exit(1) os.Exit(1)
} }
os.MkdirAll("data", os.ModePerm) os.MkdirAll("data", os.ModePerm)
dbPath := "data/data.db" dbPath := "data/data.db"
_, _ = filepath.Abs(dbPath) _, _ = filepath.Abs(dbPath)
// fmt.Println("数据库路径:", absPath) // 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 ('ssh', 'host');
INSERT INTO access_type (name, type) VALUES ('btpanel', 'host'); INSERT INTO access_type (name, type) VALUES ('btpanel', 'host');
INSERT INTO access_type (name, type) VALUES ('1panel', 'host');`) INSERT INTO access_type (name, type) VALUES ('1panel', 'host');`)
uuidStr := public.GenerateUUID() uuidStr := public.GenerateUUID()
randomStr := public.RandomString(8) randomStr := public.RandomString(8)
port, err := public.GetFreePort() port, err := public.GetFreePort()
if err != nil { if err != nil {
port = 20773 port = 20773
} }
Isql := fmt.Sprintf( 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 ('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); 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 ('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 ('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) 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) 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": "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": "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": "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": "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": "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": "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": "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": "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": "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"}) 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( err = sqlite_migrate.EnsureDatabaseWithTables(
"data/site_monitor.db", "data/site_monitor.db",
"data/data.db", "data/data.db",
@ -246,7 +248,7 @@ INSERT INTO settings (key, value, create_time, update_time, active, type) VALUES
if err != nil { if err != nil {
fmt.Println("错误:", err) fmt.Println("错误:", err)
} }
db1, err := sql.Open("sqlite", "data/site_monitor.db") db1, err := sql.Open("sqlite", "data/site_monitor.db")
if err != nil { if err != nil {
// fmt.Println("创建数据库失败:", err) // fmt.Println("创建数据库失败:", err)
@ -289,7 +291,7 @@ func insertDefaultData(db *sql.DB, table, insertSQL string) {
// fmt.Println("检查数据行数失败:", err) // fmt.Println("检查数据行数失败:", err)
return return
} }
// 如果表为空,则插入默认数据 // 如果表为空,则插入默认数据
if count == 0 { if count == 0 {
// fmt.Println("表为空,插入默认数据...") // fmt.Println("表为空,插入默认数据...")
@ -323,7 +325,7 @@ func InsertIfNotExists(
whereArgs = append(whereArgs, val) whereArgs = append(whereArgs, val)
i++ i++
} }
// 2. 判断是否存在 // 2. 判断是否存在
query := fmt.Sprintf("SELECT EXISTS(SELECT 1 FROM %s WHERE %s)", table, whereClause) query := fmt.Sprintf("SELECT EXISTS(SELECT 1 FROM %s WHERE %s)", table, whereClause)
var exists bool var exists bool
@ -334,7 +336,7 @@ func InsertIfNotExists(
if exists { if exists {
return nil // 已存在 return nil // 已存在
} }
// 3. 构建 INSERT 语句 // 3. 构建 INSERT 语句
columnList := "" columnList := ""
placeholderList := "" placeholderList := ""
@ -347,11 +349,11 @@ func InsertIfNotExists(
placeholderList += "?" placeholderList += "?"
} }
insertSQL := fmt.Sprintf("INSERT INTO %s (%s) VALUES (%s)", table, columnList, placeholderList) insertSQL := fmt.Sprintf("INSERT INTO %s (%s) VALUES (%s)", table, columnList, placeholderList)
_, err = db.Exec(insertSQL, insertValues...) _, err = db.Exec(insertSQL, insertValues...)
if err != nil { if err != nil {
return fmt.Errorf("insert failed: %w", err) return fmt.Errorf("insert failed: %w", err)
} }
return nil return nil
} }