45 lines
1.1 KiB
TypeScript
45 lines
1.1 KiB
TypeScript
import { z } from "zod/v4";
|
|
|
|
import { createCustomErrorParams } from "./form/i18n";
|
|
|
|
export const certificateValidFileNameSchema = z.string().regex(/^[\w\-. ]+$/);
|
|
|
|
export const checkCertificateFile: z.core.CheckFn<File> = (context) => {
|
|
const result = certificateValidFileNameSchema.safeParse(context.value.name);
|
|
if (!result.success) {
|
|
context.issues.push({
|
|
code: "custom",
|
|
params: createCustomErrorParams({
|
|
key: "invalidFileName",
|
|
params: {},
|
|
}),
|
|
input: context.value.name,
|
|
});
|
|
return;
|
|
}
|
|
|
|
if (!context.value.name.endsWith(".crt") && !context.value.name.endsWith(".pem")) {
|
|
context.issues.push({
|
|
code: "custom",
|
|
params: createCustomErrorParams({
|
|
key: "invalidFileType",
|
|
params: { expected: ".crt" },
|
|
}),
|
|
input: context.value.name,
|
|
});
|
|
return;
|
|
}
|
|
|
|
if (context.value.size > 1024 * 1024) {
|
|
context.issues.push({
|
|
code: "custom",
|
|
params: createCustomErrorParams({
|
|
key: "fileTooLarge",
|
|
params: { maxSize: "1 MiB" },
|
|
}),
|
|
input: context.value.size,
|
|
});
|
|
return;
|
|
}
|
|
};
|