重构项目

This commit is contained in:
2025-10-30 18:26:02 +08:00
parent fbc8bcd089
commit 7e10e2d2da
39 changed files with 728 additions and 464 deletions

View File

@ -0,0 +1,61 @@
package moudle
import (
"SafelineAPI/internal/app/logger"
"SafelineAPI/internal/class/MyUser"
"crypto/ecdsa"
"crypto/elliptic"
"crypto/rand"
"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/lego"
"github.com/go-acme/lego/v4/registration"
)
func ApplyCert(domains []string, email string, provider challenge.Provider) ([]byte, []byte, bool) {
privateKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
if err != nil {
logger.Error.Printf("申请 %s%s%s 证书时发生错误: %s%s%s", logger.Cyan, domains, logger.Reset, logger.Red, err, logger.Reset)
return nil, nil, true
}
myUser := MyUser.MyUser{
Email: email,
Key: privateKey,
}
config := lego.NewConfig(&myUser)
config.Certificate.KeyType = certcrypto.RSA2048
client, err := lego.NewClient(config)
if err != nil {
logger.Error.Printf("申请 %s%s%s 证书时发生错误: %s%s%s", logger.Cyan, domains, logger.Reset, logger.Red, err, logger.Reset)
return nil, nil, true
}
err = client.Challenge.SetDNS01Provider(provider)
if err != nil {
logger.Error.Printf("申请 %s%s%s 证书时发生错误: %s%s%s", logger.Cyan, domains, logger.Reset, logger.Red, err, logger.Reset)
return nil, nil, true
}
reg, err := client.Registration.Register(registration.RegisterOptions{TermsOfServiceAgreed: true})
if err != nil {
logger.Error.Printf("申请 %s%s%s 证书时发生错误: %s%s%s", logger.Cyan, domains, logger.Reset, logger.Red, err, logger.Reset)
return nil, nil, true
}
myUser.Registration = reg
request := certificate.ObtainRequest{
Domains: domains,
Bundle: true,
}
certResource, err := client.Certificate.Obtain(request)
if err != nil {
logger.Error.Printf("申请 %s%s%s 证书时发生错误: %s%s%s", logger.Cyan, domains, logger.Reset, logger.Red, err, logger.Reset)
return nil, nil, true
}
return certResource.Certificate, certResource.PrivateKey, false
}

View File

@ -0,0 +1,23 @@
package moudle
import (
"SafelineAPI/internal/app/SafelineRequest"
"SafelineAPI/internal/app/logger"
"SafelineAPI/internal/class/config"
"SafelineAPI/pkg/utils"
"bytes"
)
func UpdateCert(conf config.Config, email string, Certificate, PrivateKey []byte, cert SafelineRequest.Nodes) ([]string, []string) {
var upsertReq SafelineRequest.UpsertReq
upsertReq.Create(Certificate, PrivateKey, cert.Domains, email, cert.Id, cert.Type)
body := bytes.NewReader(upsertReq.Marshal())
result := utils.Upsert(conf.Server.Host.Url(), conf.Server.ApiToken.String(), body)
if result.Msg != "" {
logger.Error.Printf("域名 %s%s%s 证书更新失败: %s%s%s", logger.Cyan, cert.Domains, logger.Reset, logger.Red, result.Msg, logger.Reset)
return nil, cert.Domains
}
logger.Success.Printf("域名 %s%s%s 证书更新成功!", logger.Cyan, cert.Domains, logger.Reset)
return cert.Domains, nil
}

View File

@ -0,0 +1,18 @@
package moudle
import (
"SafelineAPI/internal/app/SafelineRequest"
"time"
)
func CheckNodes(nodes []SafelineRequest.Nodes, n int) []SafelineRequest.Nodes {
var need []SafelineRequest.Nodes
date := time.Now()
for _, node := range nodes {
days := int(node.ValidBefore.Sub(date).Hours() / 24)
if days <= n {
need = append(need, node)
}
}
return need
}

View File

@ -0,0 +1,18 @@
package moudle
//func ChooseDNSProvider(config DNSProvider.Config) (challenge.Provider, error) {
// if config.ProviderName == "TencentCloud" {
// return config.TencentCloud.Provider()
// } else if config.ProviderName == "AliCloud" {
// return config.AliCloud.Provider()
// } else if config.ProviderName == "HuaweiCloud" {
// return config.HuaweiCloud.Provider()
// } else if config.ProviderName == "WestCN" {
// return config.WestCN.Provider()
// } else if config.ProviderName == "RainYun" {
// return config.RainYun.Provider()
// } else if config.ProviderName == "Dode" {
// return config.Dode.Provider()
// }
// return nil, errors.New("未正确设置 DNS 服务提供商")
//}