mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-09 23:28:31 +00:00
misc: updated renewal unit UI
This commit is contained in:
@@ -44,3 +44,25 @@ export const timeAgo = (inputDate: Date, currentDate: Date): string => {
|
|||||||
elapsedMilliseconds >= 0 ? "ago" : "from now"
|
elapsedMilliseconds >= 0 ? "ago" : "from now"
|
||||||
}`;
|
}`;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export enum TimeUnit {
|
||||||
|
DAY = "days",
|
||||||
|
WEEK = "weeks",
|
||||||
|
MONTH = "months",
|
||||||
|
YEAR = "years"
|
||||||
|
}
|
||||||
|
|
||||||
|
export const convertTimeUnitValueToDays = (unit: TimeUnit, value: number) => {
|
||||||
|
switch (unit) {
|
||||||
|
case TimeUnit.DAY:
|
||||||
|
return value;
|
||||||
|
case TimeUnit.WEEK:
|
||||||
|
return value * 7;
|
||||||
|
case TimeUnit.MONTH:
|
||||||
|
return value * 30;
|
||||||
|
case TimeUnit.YEAR:
|
||||||
|
return value * 365;
|
||||||
|
default:
|
||||||
|
throw new Error(`Unknown time unit: ${unit}`);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|||||||
+57
-21
@@ -37,6 +37,7 @@ import {
|
|||||||
} from "@app/hooks/api/certificates/constants";
|
} from "@app/hooks/api/certificates/constants";
|
||||||
import { CertExtendedKeyUsage, CertKeyUsage } from "@app/hooks/api/certificates/enums";
|
import { CertExtendedKeyUsage, CertKeyUsage } from "@app/hooks/api/certificates/enums";
|
||||||
import { UsePopUpState } from "@app/hooks/usePopUp";
|
import { UsePopUpState } from "@app/hooks/usePopUp";
|
||||||
|
import { convertTimeUnitValueToDays, TimeUnit } from "@app/lib/fn/date";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
popUp: UsePopUpState<["pkiSubscriber"]>;
|
popUp: UsePopUpState<["pkiSubscriber"]>;
|
||||||
@@ -75,7 +76,8 @@ const schema = z
|
|||||||
[CertExtendedKeyUsage.TIMESTAMPING]: z.boolean().optional()
|
[CertExtendedKeyUsage.TIMESTAMPING]: z.boolean().optional()
|
||||||
}),
|
}),
|
||||||
enableAutoRenewal: z.boolean().optional().default(false),
|
enableAutoRenewal: z.boolean().optional().default(false),
|
||||||
autoRenewalPeriodInDays: z.number().min(1).optional()
|
renewalBefore: z.number().min(1).optional(),
|
||||||
|
renewalUnit: z.nativeEnum(TimeUnit).optional()
|
||||||
})
|
})
|
||||||
.required();
|
.required();
|
||||||
|
|
||||||
@@ -118,7 +120,8 @@ export const PkiSubscriberModal = ({ popUp, handlePopUpToggle }: Props) => {
|
|||||||
},
|
},
|
||||||
extendedKeyUsages: {},
|
extendedKeyUsages: {},
|
||||||
enableAutoRenewal: false,
|
enableAutoRenewal: false,
|
||||||
autoRenewalPeriodInDays: 7
|
renewalBefore: 7,
|
||||||
|
renewalUnit: TimeUnit.DAY
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -139,7 +142,8 @@ export const PkiSubscriberModal = ({ popUp, handlePopUpToggle }: Props) => {
|
|||||||
(pkiSubscriber.extendedKeyUsages || []).map((name) => [name, true])
|
(pkiSubscriber.extendedKeyUsages || []).map((name) => [name, true])
|
||||||
),
|
),
|
||||||
enableAutoRenewal: pkiSubscriber.enableAutoRenewal || false,
|
enableAutoRenewal: pkiSubscriber.enableAutoRenewal || false,
|
||||||
autoRenewalPeriodInDays: pkiSubscriber.autoRenewalPeriodInDays || 7
|
renewalBefore: pkiSubscriber.autoRenewalPeriodInDays || 7,
|
||||||
|
renewalUnit: TimeUnit.DAY
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
reset({
|
reset({
|
||||||
@@ -154,7 +158,8 @@ export const PkiSubscriberModal = ({ popUp, handlePopUpToggle }: Props) => {
|
|||||||
},
|
},
|
||||||
extendedKeyUsages: {},
|
extendedKeyUsages: {},
|
||||||
enableAutoRenewal: false,
|
enableAutoRenewal: false,
|
||||||
autoRenewalPeriodInDays: 7
|
renewalBefore: 7,
|
||||||
|
renewalUnit: TimeUnit.DAY
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}, [pkiSubscriber, reset]);
|
}, [pkiSubscriber, reset]);
|
||||||
@@ -174,7 +179,8 @@ export const PkiSubscriberModal = ({ popUp, handlePopUpToggle }: Props) => {
|
|||||||
keyUsages,
|
keyUsages,
|
||||||
extendedKeyUsages,
|
extendedKeyUsages,
|
||||||
enableAutoRenewal,
|
enableAutoRenewal,
|
||||||
autoRenewalPeriodInDays
|
renewalBefore,
|
||||||
|
renewalUnit
|
||||||
}: FormData) => {
|
}: FormData) => {
|
||||||
try {
|
try {
|
||||||
if (!projectId) return;
|
if (!projectId) return;
|
||||||
@@ -212,6 +218,10 @@ export const PkiSubscriberModal = ({ popUp, handlePopUpToggle }: Props) => {
|
|||||||
.map((san) => san.trim())
|
.map((san) => san.trim())
|
||||||
.filter(Boolean);
|
.filter(Boolean);
|
||||||
|
|
||||||
|
const autoRenewalPeriodInDays = enableAutoRenewal
|
||||||
|
? convertTimeUnitValueToDays(renewalUnit, renewalBefore)
|
||||||
|
: undefined;
|
||||||
|
|
||||||
if (pkiSubscriber) {
|
if (pkiSubscriber) {
|
||||||
await updateMutateAsync({
|
await updateMutateAsync({
|
||||||
subscriberName: pkiSubscriber.name,
|
subscriberName: pkiSubscriber.name,
|
||||||
@@ -473,35 +483,61 @@ export const PkiSubscriberModal = ({ popUp, handlePopUpToggle }: Props) => {
|
|||||||
onCheckedChange={onChange}
|
onCheckedChange={onChange}
|
||||||
className="data-[state=checked]:bg-primary"
|
className="data-[state=checked]:bg-primary"
|
||||||
>
|
>
|
||||||
Enable Auto Renewal
|
Enable Certificate Auto Renewal
|
||||||
</Checkbox>
|
</Checkbox>
|
||||||
</FormControl>
|
</FormControl>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
{selectedAutoRenewalState && (
|
{selectedAutoRenewalState && (
|
||||||
<Controller
|
<div className="flex items-center">
|
||||||
control={control}
|
<Controller
|
||||||
name="autoRenewalPeriodInDays"
|
control={control}
|
||||||
render={({ field: { onChange, value }, fieldState: { error } }) => {
|
defaultValue={7}
|
||||||
return (
|
name="renewalBefore"
|
||||||
|
render={({ field: { onChange, ...field }, fieldState: { error } }) => (
|
||||||
<FormControl
|
<FormControl
|
||||||
label="Renew X days before expiry"
|
label="Renewal Before"
|
||||||
isError={Boolean(error)}
|
isError={Boolean(error)}
|
||||||
errorText={error?.message}
|
errorText={error?.message}
|
||||||
tooltipText="A new certificate will be issued this many days before the current certificate expires."
|
className="w-full"
|
||||||
|
isRequired
|
||||||
>
|
>
|
||||||
<Input
|
<Input
|
||||||
value={value}
|
{...field}
|
||||||
onChange={(e) => onChange(Number(e.target.value))}
|
placeholder="5"
|
||||||
type="number"
|
type="number"
|
||||||
min="1"
|
min={1}
|
||||||
step="1"
|
onChange={(e) => onChange(Number(e.target.value))}
|
||||||
placeholder="7"
|
|
||||||
/>
|
/>
|
||||||
</FormControl>
|
</FormControl>
|
||||||
);
|
)}
|
||||||
}}
|
/>
|
||||||
/>
|
<Controller
|
||||||
|
control={control}
|
||||||
|
name="renewalUnit"
|
||||||
|
defaultValue={TimeUnit.DAY}
|
||||||
|
render={({ field: { onChange, ...field }, fieldState: { error } }) => (
|
||||||
|
<FormControl
|
||||||
|
className="ml-4"
|
||||||
|
label="Unit"
|
||||||
|
errorText={error?.message}
|
||||||
|
isError={Boolean(error)}
|
||||||
|
>
|
||||||
|
<Select
|
||||||
|
defaultValue={field.value}
|
||||||
|
{...field}
|
||||||
|
onValueChange={(e) => onChange(e)}
|
||||||
|
className="w-48"
|
||||||
|
>
|
||||||
|
<SelectItem value={TimeUnit.DAY}>Days</SelectItem>
|
||||||
|
<SelectItem value={TimeUnit.WEEK}>Weeks</SelectItem>
|
||||||
|
<SelectItem value={TimeUnit.MONTH}>Months</SelectItem>
|
||||||
|
<SelectItem value={TimeUnit.YEAR}>Years</SelectItem>
|
||||||
|
</Select>
|
||||||
|
</FormControl>
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
)}
|
)}
|
||||||
</TabPanel>
|
</TabPanel>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|||||||
Reference in New Issue
Block a user