|
@@ -7,12 +7,11 @@ import (
|
|
|
"github.com/SongZihuan/auto-aliyun-cdn-ssl/src/database"
|
|
|
"github.com/SongZihuan/auto-aliyun-cdn-ssl/src/logger"
|
|
|
"os"
|
|
|
- "strings"
|
|
|
)
|
|
|
|
|
|
var international = false
|
|
|
|
|
|
-func Init() (err error) {
|
|
|
+func Init() error {
|
|
|
if !config.IsReady() {
|
|
|
panic("config is not ready")
|
|
|
}
|
|
@@ -21,20 +20,15 @@ func Init() (err error) {
|
|
|
key := config.GetConfig().Aliyun.Key
|
|
|
secret := config.GetConfig().Aliyun.Secret
|
|
|
|
|
|
- casClient, err = createCASClient(key, secret)
|
|
|
+ err := createClient(key, secret)
|
|
|
if err != nil {
|
|
|
- return fmt.Errorf("init alibaba cloud sdk CAS client error: %s", err.Error())
|
|
|
- }
|
|
|
-
|
|
|
- cdnClient, err = createCDNClient(key, secret)
|
|
|
- if err != nil {
|
|
|
- return fmt.Errorf("init alibaba cloud sdk CDN client error: %s", err.Error())
|
|
|
+ return err
|
|
|
}
|
|
|
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
-func UpdateCDNHttpsByFilePath(domainList []string, cert string, prikey string) error {
|
|
|
+func UpdateDomainHttpsByFilePath(collection *config.DomainListCollection, cert string, prikey string) error {
|
|
|
certData, err := os.ReadFile(cert)
|
|
|
if err != nil {
|
|
|
return fmt.Errorf("read cert file error: %s", err.Error())
|
|
@@ -45,32 +39,56 @@ func UpdateCDNHttpsByFilePath(domainList []string, cert string, prikey string) e
|
|
|
return fmt.Errorf("read private key error: %s", err.Error())
|
|
|
}
|
|
|
|
|
|
- logger.Infof("成功从 %s 读取证书,从 %s 读取密钥,这些证书将被用于域名:%s", cert, prikey, strings.Join(domainList, ", "))
|
|
|
- return UpdateCDNHttps(domainList, certData, privateKeyData)
|
|
|
+ logger.Infof("成功从 %s 读取证书,从 %s 读取密钥,这些证书将被用于域名:%s", cert, prikey, collection.Domain2Str())
|
|
|
+ return UpdateDomainHttps(collection, certData, privateKeyData)
|
|
|
}
|
|
|
|
|
|
-func UpdateCDNHttps(domainList []string, certData []byte, privateKeyData []byte) error {
|
|
|
+func UpdateDomainHttps(collection *config.DomainListCollection, certData []byte, privateKeyData []byte) error {
|
|
|
certID, certName, subject, err := uploadCert(certData, privateKeyData)
|
|
|
if err != nil && errors.Is(err, ErrCertExists) && certName != "" {
|
|
|
- logger.Infof("证书已存在, 尝试检测 CDN域名 (%s) 证书记录并更新", strings.Join(domainList, ", "))
|
|
|
+ logger.Infof("证书已存在, 尝试检测 CDN域名 (%s) 证书记录并更新", collection.Domain2Str())
|
|
|
|
|
|
- for _, domain := range domainList {
|
|
|
- cert, need, err := database.CheckNeedUpdateDomain(certName, domain)
|
|
|
- if err != nil {
|
|
|
- logger.Errorf("在检测 域名 (%s) 是否应该更新时遇到了错误,但不影响后续检查: %s", domain, err.Error())
|
|
|
- } else if need && cert != nil {
|
|
|
- logger.Infof("确认域名 (%s) 需要更新, 证书Subject: %s, 证书名字:%s, 证书ID:%d", domain, cert.Subject, cert.Name, cert.CertID)
|
|
|
- setDomainServerCertificateNotError(domain, cert.CertID, cert.Name)
|
|
|
- err = database.UpdateDomain(cert.CertID, cert.Name, cert.Subject, domain)
|
|
|
+ for _, domain := range collection.Domain {
|
|
|
+ if domain.Type == config.DomainTypeCDN {
|
|
|
+ cert, need, err := database.CheckNeedUpdateCDNDomain(certName, domain.Domain)
|
|
|
+ if err != nil {
|
|
|
+ logger.Errorf("在检测 域名 (%s) 是否应该更新时遇到了错误,但不影响后续检查: %s", domain.Domain, err.Error())
|
|
|
+ } else if cert == nil {
|
|
|
+ logger.Infof("检测到 域名 (%s) 无需更新证书,未能找到证书相关记录", domain.Domain)
|
|
|
+ } else if need {
|
|
|
+ logger.Infof("确认域名 (%s) 需要更新, 证书Subject: %s, 证书名字:%s, 证书ID:%d", domain.Domain, cert.Subject, cert.Name, cert.CertID)
|
|
|
+ err = setCDNServerCertificateNotPanic(domain.Domain, cert.CertID, cert.Name)
|
|
|
+ if err == nil {
|
|
|
+ err = database.UpdateCDNDomain(cert.CertID, cert.Name, cert.Subject, domain.Domain)
|
|
|
+ if err != nil {
|
|
|
+ logger.Errorf("在更新 域名 (%s) 状态到数据库时遇到了错误,但不影响后续检查: %s", domain.Domain, err.Error())
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 无需更新
|
|
|
+ logger.Infof("确认域名 (%s) 无需更新证书,并找到证书,证书Subject: %s, 证书名字:%s, 证书ID:%d", domain.Domain, cert.Subject, cert.Name, cert.CertID)
|
|
|
+ }
|
|
|
+ } else if domain.Type == config.DomainTypeDCDN {
|
|
|
+ cert, need, err := database.CheckNeedUpdateDCDNDomain(certName, domain.Domain)
|
|
|
if err != nil {
|
|
|
- logger.Errorf("在更新 域名 (%s) 状态到数据库时遇到了错误,但不影响后续检查: %s", domain, err.Error())
|
|
|
+ logger.Errorf("在检测 域名 (%s) 是否应该更新时遇到了错误,但不影响后续检查: %s", domain.Domain, err.Error())
|
|
|
+ } else if cert == nil {
|
|
|
+ logger.Infof("检测到 域名 (%s) 无需更新证书,未能找到证书相关记录", domain.Domain)
|
|
|
+ } else if need {
|
|
|
+ logger.Infof("确认域名 (%s) 需要更新, 证书Subject: %s, 证书名字:%s, 证书ID:%d", domain.Domain, cert.Subject, cert.Name, cert.CertID)
|
|
|
+ err = setDCDNServerCertificateNotPanic(domain.Domain, cert.CertID, cert.Name)
|
|
|
+ if err == nil {
|
|
|
+ err := database.UpdateDCDNDomain(cert.CertID, cert.Name, cert.Subject, domain.Domain)
|
|
|
+ if err != nil {
|
|
|
+ logger.Errorf("在更新 域名 (%s) 状态到数据库时遇到了错误,但不影响后续检查: %s", domain.Domain, err.Error())
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 无需更新
|
|
|
+ logger.Infof("确认域名 (%s) 无需更新证书,并找到证书,证书Subject: %s, 证书名字:%s, 证书ID:%d", domain.Domain, cert.Subject, cert.Name, cert.CertID)
|
|
|
}
|
|
|
- } else if !need && cert != nil {
|
|
|
- // 无需更新
|
|
|
- logger.Infof("确认域名 (%s) 无需更新证书,并找到证书,证书Subject: %s, 证书名字:%s, 证书ID:%d", domain, cert.Subject, cert.Name, cert.CertID)
|
|
|
- } else if !need { // cert == nil
|
|
|
- // 无需更新
|
|
|
- logger.Infof("检测到 域名 (%s) 无需更新证书,未能找到证书相关记录", domain)
|
|
|
+ } else {
|
|
|
+ logger.Errorf("域名(%s)未知类型(%s)", domain.Domain, domain.Type)
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -80,18 +98,32 @@ func UpdateCDNHttps(domainList []string, certData []byte, privateKeyData []byte)
|
|
|
} else {
|
|
|
dbcerterr := database.UpdateCert(certID, certName, subject)
|
|
|
if dbcerterr != nil {
|
|
|
- logger.Errorf("保存域名(%s)证书信息到数据库时发生了错误: %s", strings.Join(domainList, ", "), dbcerterr.Error())
|
|
|
+ logger.Errorf("保存域名(%s)证书信息到数据库时发生了错误: %s", collection.Domain2Str(), dbcerterr.Error())
|
|
|
}
|
|
|
|
|
|
- for _, domain := range domainList {
|
|
|
- setDomainServerCertificateNotError(domain, certID, certName)
|
|
|
- if dbcerterr != nil {
|
|
|
- logger.Error("因为证书信息未能写入数据库,所以 域名 (%s) 信息不尝试写入数据库")
|
|
|
- } else {
|
|
|
- err = database.UpdateDomain(certID, certName, subject, domain)
|
|
|
- if err != nil {
|
|
|
- logger.Errorf("保存 域名 (%s) 信息到数据库发生了错误,但不影响后续域名更新: %s", dbcerterr, err.Error())
|
|
|
+ for _, domain := range collection.Domain {
|
|
|
+ if domain.Type == config.DomainTypeCDN {
|
|
|
+ err := setCDNServerCertificateNotPanic(domain.Domain, certID, certName)
|
|
|
+ if dbcerterr != nil {
|
|
|
+ logger.Errorf("因为证书信息未能写入数据库,所以 域名 (%s) 信息不尝试写入数据库", domain.Domain)
|
|
|
+ } else if err == nil {
|
|
|
+ err := database.UpdateCDNDomain(certID, certName, subject, domain.Domain)
|
|
|
+ if err != nil {
|
|
|
+ logger.Errorf("保存 域名 (%s) 信息到数据库发生了错误,但不影响后续域名更新: %s", domain.Domain, err.Error())
|
|
|
+ }
|
|
|
}
|
|
|
+ } else if domain.Type == config.DomainTypeDCDN {
|
|
|
+ err := setDCDNServerCertificateNotPanic(domain.Domain, certID, certName)
|
|
|
+ if dbcerterr != nil {
|
|
|
+ logger.Errorf("因为证书信息未能写入数据库,所以 域名 (%s) 信息不尝试写入数据库", domain.Domain)
|
|
|
+ } else if err == nil {
|
|
|
+ err := database.UpdateCDNDomain(certID, certName, subject, domain.Domain)
|
|
|
+ if err != nil {
|
|
|
+ logger.Errorf("保存 域名 (%s) 信息到数据库发生了错误,但不影响后续域名更新: %s", domain.Domain, err.Error())
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ logger.Errorf("域名(%s)未知类型(%s)", domain.Domain, domain.Type)
|
|
|
}
|
|
|
}
|
|
|
}
|