Skip to content

Commit c95149a

Browse files
authored
Merge pull request dubinc#2341 from dubinc/program-resource-upload
Add base64 image validation to the program logo upload
2 parents d9a1e66 + a730514 commit c95149a

1 file changed

Lines changed: 16 additions & 7 deletions

File tree

apps/web/lib/actions/partners/program-resources/add-program-resource.ts

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import { createId } from "@/lib/api/create-id";
44
import { storage } from "@/lib/storage";
5+
import { base64ImageSchema } from "@/lib/zod/schemas/misc";
56
import {
67
programResourceColorSchema,
78
programResourceFileSchema,
@@ -19,10 +20,17 @@ const baseResourceSchema = z.object({
1920
name: z.string().min(1, "Name is required"),
2021
});
2122

22-
// Schema for file-based resources (logos and files)
23+
// Schema for logo resources
24+
const logoResourceSchema = baseResourceSchema.extend({
25+
resourceType: z.literal("logo"),
26+
file: base64ImageSchema,
27+
extension: z.string().nullish(),
28+
});
29+
30+
// Schema for file resources
2331
const fileResourceSchema = baseResourceSchema.extend({
24-
resourceType: z.enum(["logo", "file"]),
25-
file: z.string(), // Base64 encoded file
32+
resourceType: z.literal("file"),
33+
file: z.string(),
2634
extension: z.string().nullish(),
2735
});
2836

@@ -34,6 +42,7 @@ const colorResourceSchema = baseResourceSchema.extend({
3442

3543
// Combined schema that can handle any resource type
3644
const addResourceSchema = z.discriminatedUnion("resourceType", [
45+
logoResourceSchema,
3746
fileResourceSchema,
3847
colorResourceSchema,
3948
]);
@@ -69,6 +78,10 @@ export const addProgramResourceAction = authActionClient
6978
if (resourceType === "logo" || resourceType === "file") {
7079
const { file, extension } = parsedInput;
7180

81+
if (!file) {
82+
throw new Error("File is required.");
83+
}
84+
7285
// Upload the file to storage
7386
const fileKey = `programs/${program.id}/${resourceType}s/${slugify(name || resourceType)}-${nanoid(4)}${extension ? `.${extension}` : ""}`;
7487
const uploadResult = await storage.upload(
@@ -136,8 +149,4 @@ export const addProgramResourceAction = authActionClient
136149
resources: updatedResources,
137150
},
138151
});
139-
140-
return {
141-
success: true,
142-
};
143152
});

0 commit comments

Comments
 (0)