Merge origin/main to feat/pki-sync-v2

This commit is contained in:
Carlos Monastyrski
2025-10-29 13:24:37 -03:00
276 changed files with 2996 additions and 2313 deletions
@@ -6,18 +6,17 @@ import {
faEye,
faFileExport,
faLink,
faQuestionCircle,
faRedo,
faTrash
} from "@fortawesome/free-solid-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { format } from "date-fns";
import { CircleQuestionMarkIcon } from "lucide-react";
import { twMerge } from "tailwind-merge";
import { createNotification } from "@app/components/notifications";
import { ProjectPermissionCan } from "@app/components/permissions";
import {
Badge,
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
@@ -34,6 +33,7 @@ import {
Tooltip,
Tr
} from "@app/components/v2";
import { Badge } from "@app/components/v3";
import {
ProjectPermissionCertificateActions,
ProjectPermissionSub,
@@ -60,7 +60,7 @@ const isExpiringWithinOneDay = (notAfter: string): boolean => {
const getAutoRenewalInfo = (certificate: TCertificate) => {
if (certificate.renewedByCertificateId) {
return { text: "Renewed", variant: "instance" as const };
return { text: "Renewed", variant: "neutral" as const };
}
const isRevoked = certificate.status === CertStatus.REVOKED;
@@ -71,7 +71,7 @@ const getAutoRenewalInfo = (certificate: TCertificate) => {
if (isRevoked) {
return {
text: "Not Available",
variant: "instance" as const,
variant: "neutral" as const,
tooltip: "Renewal is not available for revoked certificates"
};
}
@@ -79,7 +79,7 @@ const getAutoRenewalInfo = (certificate: TCertificate) => {
if (isExpired) {
return {
text: "Not Available",
variant: "instance" as const,
variant: "neutral" as const,
tooltip: "Renewal is not available for expired certificates"
};
}
@@ -87,7 +87,7 @@ const getAutoRenewalInfo = (certificate: TCertificate) => {
if (hasNoProfile) {
return {
text: "Not Available",
variant: "instance" as const,
variant: "neutral" as const,
tooltip: "Renewal requires a certificate profile"
};
}
@@ -95,7 +95,7 @@ const getAutoRenewalInfo = (certificate: TCertificate) => {
if (certificate.hasPrivateKey === false) {
return {
text: "Not Available",
variant: "instance" as const,
variant: "neutral" as const,
tooltip: "Renewal is not available for certificates with externally generated private keys"
};
}
@@ -103,7 +103,7 @@ const getAutoRenewalInfo = (certificate: TCertificate) => {
if (isExpiringWithinDay) {
return {
text: "Not Available",
variant: "instance" as const,
variant: "neutral" as const,
tooltip: "Auto-renewal is not available for certificates expiring within 24 hours"
};
}
@@ -117,7 +117,7 @@ const getAutoRenewalInfo = (certificate: TCertificate) => {
}
if (!certificate.renewBeforeDays) {
return { text: "Auto-Renewal Disabled", variant: "primary" as const };
return { text: "Auto-Renewal Disabled", variant: "warning" as const };
}
const notAfterDate = new Date(certificate.notAfter);
@@ -135,11 +135,11 @@ const getAutoRenewalInfo = (certificate: TCertificate) => {
);
if (daysUntilRenewal === 0) {
return { text: "Renews today", variant: "primary" as const };
return { text: "Renews today", variant: "warning" as const };
}
if (daysUntilRenewal <= 7) {
return { text: `Renews in ${daysUntilRenewal}d`, variant: "primary" as const };
return { text: `Renews in ${daysUntilRenewal}d`, variant: "warning" as const };
}
return { text: `Renews in ${daysUntilRenewal}d`, variant: "success" as const };
@@ -282,16 +282,12 @@ export const CertificatesTable = ({ handlePopUpOpen }: Props) => {
{autoRenewalInfo &&
(autoRenewalInfo.tooltip ? (
<div className="flex items-center gap-2">
<Badge variant={autoRenewalInfo.variant}>
{autoRenewalInfo.text}
<Tooltip content={autoRenewalInfo.tooltip}>
<FontAwesomeIcon
icon={faQuestionCircle}
className="ml-1 cursor-help text-red-400 hover:text-red-300"
size="sm"
/>
</Tooltip>
</Badge>
<Tooltip content={autoRenewalInfo.tooltip}>
<Badge variant={autoRenewalInfo.variant}>
{autoRenewalInfo.text}
<CircleQuestionMarkIcon />
</Badge>
</Tooltip>
</div>
) : (
<Badge variant={autoRenewalInfo.variant}>{autoRenewalInfo.text}</Badge>