Merge pull request #797 from usual2970/hotfix/cer_expire

fix: correct certificate expiration check logic
This commit is contained in:
RHQYZ 2025-06-15 20:41:08 +08:00 committed by GitHub
commit 94a0292fad
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 14 additions and 4 deletions

View File

@ -13,6 +13,7 @@
"certificate.props.subject_alt_names": "Name",
"certificate.props.validity": "Expiry",
"certificate.props.validity.left_days": "{{left}} / {{total}} days left",
"certificate.props.validity.less_than_day": "Expire soon ({{hours}} hours left)",
"certificate.props.validity.expired": "Expired",
"certificate.props.validity.expiration": "Expire on {{date}}",
"certificate.props.validity.filter.expire_soon": "Expire soon",

View File

@ -13,6 +13,7 @@
"certificate.props.subject_alt_names": "名称",
"certificate.props.validity": "有效期限",
"certificate.props.validity.left_days": "{{left}} / {{total}} 天",
"certificate.props.validity.less_than_day": "即将过期(剩余 {{hours}} 小时)",
"certificate.props.validity.expired": "已到期",
"certificate.props.validity.expiration": "{{date}} 到期",
"certificate.props.validity.filter.expire_soon": "即将到期",

View File

@ -109,11 +109,19 @@ const CertificateList = () => {
},
render: (_, record) => {
const total = dayjs(record.expireAt).diff(dayjs(record.created), "d") + 1;
const left = dayjs(record.expireAt).diff(dayjs(), "d");
// 使用 isAfter 更精确地判断是否过期
const isExpired = dayjs().isAfter(dayjs(record.expireAt));
const leftDays = dayjs(record.expireAt).diff(dayjs(), "d");
const leftHours = dayjs(record.expireAt).diff(dayjs(), "h");
return (
<Space className="max-w-full" direction="vertical" size={4}>
{left > 0 ? (
<Typography.Text type="success">{t("certificate.props.validity.left_days", { left, total })}</Typography.Text>
{!isExpired ? (
leftDays > 0 ? (
<Typography.Text type="success">{t("certificate.props.validity.left_days", { left: leftDays, total })}</Typography.Text>
) : (
<Typography.Text type="warning">{t("certificate.props.validity.less_than_day", { hours: leftHours > 0 ? leftHours : 1 })}</Typography.Text>
)
) : (
<Typography.Text type="danger">{t("certificate.props.validity.expired")}</Typography.Text>
)}

View File

@ -18,7 +18,7 @@ export const list = async (request: ListRequest) => {
filters.push(pb.filter("(subjectAltNames~{:keyword} || serialNumber={:keyword})", { keyword: request.keyword }));
}
if (request.state === "expireSoon") {
filters.push(pb.filter("expireAt<{:expiredAt}", { expiredAt: dayjs().add(20, "d").toDate() }));
filters.push(pb.filter("expireAt<{:expiredAt} && expireAt>@now", { expiredAt: dayjs().add(20, "d").toDate() }));
} else if (request.state === "expired") {
filters.push(pb.filter("expireAt<={:expiredAt}", { expiredAt: new Date() }));
}