chore: 统一本地服务器与远程仓库源码

- 合并 main 与 master 历史并以服务器结构为基线
- 保留迁移、数据保留、AWS 账单与部署安全能力
- 建立 SDD 规格和 CI 验证闭环
This commit is contained in:
Logan.Li committed 2026-08-05 20:03:25 +08:00
commit fd60361d93
460 files changed
+37492 -23871

No files matched your search

+37
View File
@@ -7,6 +7,7 @@ import (
"time"
"ezops/model"
"ezops/pkg/siteprobe"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
@@ -228,3 +229,39 @@ func (h *DomainHandler) UpdateDomain(c *gin.Context) {
})
}
// CheckDomainSSL 复用站点拨测 TLS 能力检测并回写域名证书到期日。 // Logan.Li
func (h *DomainHandler) CheckDomainSSL(c *gin.Context) {
var domain model.Domain
if err := h.db.Take(&domain, c.Param("id")).Error; err != nil {
c.JSON(http.StatusNotFound, model.Response{Code: 404, Message: "域名不存在"})
return
}
outcome := siteprobe.Execute(c.Request.Context(), model.SiteTask{
Name: "域名证书检测",
URL: domain.Name,
TaskType: model.SiteTaskTypeSSL,
Timeout: 10,
VerifySSL: false,
})
if outcome.Status != model.SiteResultSuccess || outcome.SSLCertExpiry == nil {
message := outcome.ErrorMessage
if message == "" {
message = "未获取到证书"
}
c.JSON(http.StatusBadGateway, model.Response{Code: 502, Message: message})
return
}
if err := h.db.Model(&domain).Updates(map[string]interface{}{
"ssl_enabled": true,
"ssl_expire_date": outcome.SSLCertExpiry,
}).Error; err != nil {
c.JSON(http.StatusInternalServerError, model.Response{Code: 500, Message: "保存证书信息失败"})
return
}
domain.SSLEnabled = true
domain.SSLExpireDate = outcome.SSLCertExpiry
c.JSON(http.StatusOK, model.Response{Code: 200, Message: "证书检测完成", Data: gin.H{
"domain": domain, "ssl_expire_date": outcome.SSLCertExpiry, "ssl_days_remaining": outcome.SSLDaysRemaining,
"ssl_issuer": outcome.SSLCertIssuer, "ssl_subject": outcome.SSLCertSubject,
}})
}