123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- package aliyun
- import (
- "errors"
- "fmt"
- "github.com/SongZihuan/auto-aliyun-cdn-ssl/src/config"
- "github.com/SongZihuan/auto-aliyun-cdn-ssl/src/database"
- "github.com/SongZihuan/auto-aliyun-cdn-ssl/src/logger"
- "os"
- )
- var international = false
- func Init() error {
- if !config.IsReady() {
- panic("config is not ready")
- }
- international = config.GetConfig().Aliyun.International.ToBool(false)
- key := config.GetConfig().Aliyun.Key
- secret := config.GetConfig().Aliyun.Secret
- err := createClient(key, secret)
- if err != nil {
- return err
- }
- return nil
- }
- 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())
- }
- privateKeyData, err := os.ReadFile(prikey)
- if err != nil {
- return fmt.Errorf("read private key error: %s", err.Error())
- }
- logger.Infof("成功从 %s 读取证书,从 %s 读取密钥,这些证书将被用于域名:%s", cert, prikey, collection.Domain2Str())
- return UpdateDomainHttps(collection, certData, privateKeyData)
- }
- 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) 证书记录并更新", collection.Domain2Str())
- 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.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 {
- logger.Errorf("域名(%s)未知类型(%s)", domain.Domain, domain.Type)
- }
- }
- return nil
- } else if err != nil {
- return fmt.Errorf("aliyun cloud ssl cert/key upload error: %s", err.Error())
- } else {
- dbcerterr := database.UpdateCert(certID, certName, subject)
- if dbcerterr != nil {
- logger.Errorf("保存域名(%s)证书信息到数据库时发生了错误: %s", collection.Domain2Str(), dbcerterr.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)
- }
- }
- }
- return nil
- }
|