This commit is contained in:
2026-07-20 10:26:58 +08:00
parent 9658015972
commit 1d8fe97a49
10 changed files with 105 additions and 45 deletions
+21 -12
View File
@@ -346,6 +346,7 @@ async def list_logs(status: str | None = None, db: AsyncSession = Depends(get_db
"id": log.id,
"domain": log.domain.domain if log.domain else None,
"server": log.domain.server.name if log.domain and log.domain.server else None,
"hostname": log.hostname,
"status": log.status,
"message": log.message,
"created_at": log.created_at.isoformat(),
@@ -488,19 +489,22 @@ async def issue_cert(domain_id: int, db: AsyncSession = Depends(get_db), _: bool
await db.flush()
try:
success, msg = service.issue_certificate(domain.domain)
success, msg, cert_info, raw_output = service.issue_certificate(domain.domain)
log.status = "success" if success else "failed"
log.message = msg
log.detail = raw_output[-5000:] if raw_output else None # 截断防止过大
if success:
info = service.get_cert_info(domain.domain)
if info:
domain.cert_not_after = datetime.fromisoformat(info["not_after"])
if cert_info.get("not_after"):
domain.cert_not_after = datetime.fromisoformat(cert_info["not_after"])
domain.version = str(int(domain.version or "0") + 1)
logger.info(f"证书信息已更新: {domain.domain}, 过期时间: {info['not_after']}")
log.cert_not_after = domain.cert_not_after
log.cert_serial = cert_info.get("serial_number", "")
log.cert_san = ", ".join(cert_info.get("san", []))
logger.info(f"证书信息已更新: {domain.domain}, 过期时间: {cert_info['not_after']}")
else:
logger.warning(f"无法获取证书信息: {domain.domain}")
domain.version = str(int(domain.version or "0") + 1)
logger.warning(f"无法获取证书信息: {domain.domain}")
await db.flush()
return {"success": success, "message": msg}
@@ -550,15 +554,17 @@ async def auto_renew_all(db: AsyncSession = Depends(get_db), _: bool = Depends(r
db.add(log)
await db.flush()
success, msg = service.renew_certificate(d.domain)
success, msg, cert_info, raw_output = service.renew_certificate(d.domain)
log.status = "success" if success else "failed"
log.message = msg
log.detail = raw_output[-5000:] if raw_output else None
if success:
info = service.get_cert_info(d.domain)
if info:
d.cert_not_after = datetime.fromisoformat(info["not_after"])
d.version = str(int(d.version or "0") + 1)
if success and cert_info.get("not_after"):
d.cert_not_after = datetime.fromisoformat(cert_info["not_after"])
d.version = str(int(d.version or "0") + 1)
log.cert_not_after = d.cert_not_after
log.cert_serial = cert_info.get("serial_number", "")
log.cert_san = ", ".join(cert_info.get("san", []))
results.append({"domain": d.domain, "success": success, "message": msg, "days_left": days_left})
else:
@@ -589,6 +595,9 @@ async def list_acme_logs(status: str | None = None, db: AsyncSession = Depends(g
"status": log.status,
"message": log.message,
"detail": log.detail,
"cert_not_after": log.cert_not_after.isoformat() if log.cert_not_after else None,
"cert_serial": log.cert_serial,
"cert_san": log.cert_san,
"created_at": log.created_at.isoformat(),
}
for log in logs