This commit is contained in:
Carlos Monastyrski
2025-10-16 12:49:34 -03:00
parent a79047e357
commit 87a91ce423
4 changed files with 65 additions and 66 deletions
@@ -597,8 +597,8 @@ export const CertificateIssuanceModal = ({ popUp, handlePopUpToggle, profileId }
> >
<div className="space-y-2"> <div className="space-y-2">
{value.map((san, index) => ( {value.map((san, index) => (
// eslint-disable-next-line react/no-array-index-key
<div <div
// eslint-disable-next-line react/no-array-index-key
key={`subject-alt-name-${index}`} key={`subject-alt-name-${index}`}
className="flex items-center gap-2" className="flex items-center gap-2"
> >
@@ -746,80 +746,80 @@ export const CertificateIssuanceModal = ({ popUp, handlePopUpToggle, profileId }
<AccordionItem value="key-usages"> <AccordionItem value="key-usages">
<AccordionTrigger>Key Usages</AccordionTrigger> <AccordionTrigger>Key Usages</AccordionTrigger>
<AccordionContent> <AccordionContent>
<div className="grid grid-cols-2 gap-2 pl-2"> <div className="grid grid-cols-2 gap-2 pl-2">
{filteredKeyUsages.map(({ label, value }) => { {filteredKeyUsages.map(({ label, value }) => {
const isRequired = requiredKeyUsages.includes(value); const isRequired = requiredKeyUsages.includes(value);
return ( return (
<Controller <Controller
key={label} key={label}
control={control} control={control}
name={`keyUsages.${value}` as any} name={`keyUsages.${value}` as any}
render={({ field }) => ( render={({ field }) => (
<div className="flex items-center space-x-3"> <div className="flex items-center space-x-3">
<Checkbox <Checkbox
id={`key-usage-${value}`} id={`key-usage-${value}`}
isChecked={field.value || false} isChecked={field.value || false}
onCheckedChange={(checked) => { onCheckedChange={(checked) => {
if (!isRequired) { if (!isRequired) {
field.onChange(checked); field.onChange(checked);
} }
}} }}
isDisabled={isRequired} isDisabled={isRequired}
/>
<div className="flex items-center gap-2">
<FormLabel
id={`key-usage-${value}`}
className={`text-sm ${isRequired ? "text-mineshaft-200" : "cursor-pointer text-mineshaft-300"}`}
label={label}
/> />
<div className="flex items-center gap-2"> {isRequired && <span className="text-xs">(Required)</span>}
<FormLabel
id={`key-usage-${value}`}
className={`text-sm ${isRequired ? "text-mineshaft-200" : "cursor-pointer text-mineshaft-300"}`}
label={label}
/>
{isRequired && <span className="text-xs">(Required)</span>}
</div>
</div> </div>
)} </div>
/> )}
); />
})} );
</div> })}
</div>
</AccordionContent> </AccordionContent>
</AccordionItem> </AccordionItem>
<AccordionItem value="extended-key-usages"> <AccordionItem value="extended-key-usages">
<AccordionTrigger>Extended Key Usages</AccordionTrigger> <AccordionTrigger>Extended Key Usages</AccordionTrigger>
<AccordionContent> <AccordionContent>
<div className="grid grid-cols-2 gap-2 pl-2"> <div className="grid grid-cols-2 gap-2 pl-2">
{filteredExtendedKeyUsages.map(({ label, value }) => { {filteredExtendedKeyUsages.map(({ label, value }) => {
const isRequired = requiredExtendedKeyUsages.includes(value); const isRequired = requiredExtendedKeyUsages.includes(value);
return ( return (
<Controller <Controller
key={label} key={label}
control={control} control={control}
name={`extendedKeyUsages.${value}` as any} name={`extendedKeyUsages.${value}` as any}
render={({ field }) => ( render={({ field }) => (
<div className="flex items-center space-x-3"> <div className="flex items-center space-x-3">
<Checkbox <Checkbox
id={`ext-key-usage-${value}`} id={`ext-key-usage-${value}`}
isChecked={field.value || false} isChecked={field.value || false}
onCheckedChange={(checked) => { onCheckedChange={(checked) => {
if (!isRequired) { if (!isRequired) {
field.onChange(checked); field.onChange(checked);
} }
}} }}
isDisabled={isRequired} isDisabled={isRequired}
/>
<div className="flex items-center gap-2">
<FormLabel
id={`ext-key-usage-${value}`}
className={`text-sm ${isRequired ? "text-mineshaft-200" : "cursor-pointer text-mineshaft-300"}`}
label={label}
/> />
<div className="flex items-center gap-2"> {isRequired && <span className="text-xs">(Required)</span>}
<FormLabel
id={`ext-key-usage-${value}`}
className={`text-sm ${isRequired ? "text-mineshaft-200" : "cursor-pointer text-mineshaft-300"}`}
label={label}
/>
{isRequired && <span className="text-xs">(Required)</span>}
</div>
</div> </div>
)} </div>
/> )}
); />
})} );
</div> })}
</div>
</AccordionContent> </AccordionContent>
</AccordionItem> </AccordionItem>
</Accordion> </Accordion>
@@ -29,6 +29,7 @@ export const PoliciesPage = () => {
</Helmet> </Helmet>
<div className="mx-auto mb-6 w-full max-w-7xl"> <div className="mx-auto mb-6 w-full max-w-7xl">
<PageHeader <PageHeader
scope="project"
title="Certificate Policies" title="Certificate Policies"
description="Manage certificate templates and profiles for unified certificate issuance" description="Manage certificate templates and profiles for unified certificate issuance"
/> />
@@ -148,7 +148,6 @@ export const formatSanEffect = (effect: CertSanEffect): string => {
} }
}; };
export const SAN_TYPE_OPTIONS = Object.values(CertSubjectAlternativeNameType); export const SAN_TYPE_OPTIONS = Object.values(CertSubjectAlternativeNameType);
export const KEY_USAGE_OPTIONS = Object.values(CertKeyUsageType); export const KEY_USAGE_OPTIONS = Object.values(CertKeyUsageType);
export const EXTENDED_KEY_USAGE_OPTIONS = Object.values(CertExtendedKeyUsageType); export const EXTENDED_KEY_USAGE_OPTIONS = Object.values(CertExtendedKeyUsageType);
@@ -165,7 +164,7 @@ export const USAGE_STATES = {
OPTIONAL: "optional" OPTIONAL: "optional"
} as const; } as const;
export type UsageState = typeof USAGE_STATES[keyof typeof USAGE_STATES] | undefined; export type UsageState = (typeof USAGE_STATES)[keyof typeof USAGE_STATES] | undefined;
export const TEMPLATE_SIGNATURE_ALGORITHMS = [ export const TEMPLATE_SIGNATURE_ALGORITHMS = [
"SHA256-RSA", "SHA256-RSA",
@@ -225,4 +224,3 @@ export const mapTemplateKeyAlgorithmToApi = (templateFormat: string): string =>
}; };
return mapping[templateFormat] || templateFormat; return mapping[templateFormat] || templateFormat;
}; };
@@ -6,8 +6,8 @@ import {
CertKeyUsageType, CertKeyUsageType,
CertSubjectAlternativeNameType, CertSubjectAlternativeNameType,
CertSubjectAttributeType, CertSubjectAttributeType,
SUBJECT_ATTRIBUTE_INCLUDE_OPTIONS, SAN_INCLUDE_OPTIONS,
SAN_INCLUDE_OPTIONS SUBJECT_ATTRIBUTE_INCLUDE_OPTIONS
} from "./certificate-constants"; } from "./certificate-constants";
export const uiAttributeSchema = z.object({ export const uiAttributeSchema = z.object({