mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-19 00:30:56 +00:00
76 lines
2.1 KiB
TypeScript
76 lines
2.1 KiB
TypeScript
import { z } from "zod";
|
|
|
|
import { isValidIp } from "@app/lib/ip";
|
|
import { isFQDN } from "@app/lib/validator/validate-url";
|
|
import { TAltNameMapping, TAltNameType } from "@app/services/certificate/certificate-types";
|
|
|
|
const isValidDate = (dateString: string) => {
|
|
const date = new Date(dateString);
|
|
return !Number.isNaN(date.getTime());
|
|
};
|
|
|
|
export const validateCaDateField = z.string().trim().refine(isValidDate, { message: "Invalid date format" });
|
|
|
|
export const validateAltNameField = z
|
|
.string()
|
|
.trim()
|
|
.refine(
|
|
(name) => {
|
|
return (
|
|
isFQDN(name, { allow_wildcard: true, require_tld: false }) ||
|
|
z.string().url().safeParse(name).success ||
|
|
z.string().email().safeParse(name).success ||
|
|
isValidIp(name)
|
|
);
|
|
},
|
|
{
|
|
message: "SAN must be a valid hostname, email address, IP address or URL"
|
|
}
|
|
);
|
|
|
|
export const validateAltNamesField = z
|
|
.string()
|
|
.trim()
|
|
.default("")
|
|
.transform((data) => {
|
|
if (data === "") return "";
|
|
// Trim each alt name and join with ', ' to ensure formatting
|
|
return data
|
|
.split(",")
|
|
.map((id) => id.trim())
|
|
.join(", ");
|
|
})
|
|
.refine(
|
|
(data) => {
|
|
if (data === "") return true;
|
|
// Split and validate each alt name
|
|
return data.split(", ").every((name) => {
|
|
return (
|
|
isFQDN(name, { allow_wildcard: true, require_tld: false }) ||
|
|
z.string().url().safeParse(name).success ||
|
|
z.string().email().safeParse(name).success ||
|
|
isValidIp(name)
|
|
);
|
|
});
|
|
},
|
|
{
|
|
message: "Each alt name must be a valid hostname, email address, IP address or URL"
|
|
}
|
|
);
|
|
|
|
export const validateAndMapAltNameType = (name: string): TAltNameMapping | null => {
|
|
if (isFQDN(name, { allow_wildcard: true, require_tld: false })) {
|
|
return { type: TAltNameType.DNS, value: name };
|
|
}
|
|
if (z.string().url().safeParse(name).success) {
|
|
return { type: TAltNameType.URL, value: name };
|
|
}
|
|
if (z.string().email().safeParse(name).success) {
|
|
return { type: TAltNameType.EMAIL, value: name };
|
|
}
|
|
if (isValidIp(name)) {
|
|
return { type: TAltNameType.IP, value: name };
|
|
}
|
|
return null;
|
|
};
|