diff --git a/.dockerignore b/.dockerignore index 23674ef..ed4c8e5 100644 --- a/.dockerignore +++ b/.dockerignore @@ -27,6 +27,3 @@ Thumbs.db # Vite vite.config.js.timestamp-* vite.config.ts.timestamp-* - -# SQLite -*.db diff --git a/.gitignore b/.gitignore index 1dbbe60..aac77c6 100644 --- a/.gitignore +++ b/.gitignore @@ -26,6 +26,3 @@ Thumbs.db # Vite vite.config.js.timestamp-* vite.config.ts.timestamp-* - -# SQLite -*.db diff --git a/src/lib/components/atoms/BottomSheet.svelte b/src/lib/components/atoms/BottomSheet.svelte index ac6042c..6378322 100644 --- a/src/lib/components/atoms/BottomSheet.svelte +++ b/src/lib/components/atoms/BottomSheet.svelte @@ -25,18 +25,16 @@ class="absolute inset-0 bg-black bg-opacity-50" transition:fade|global={{ duration: 100 }} > -
- -
e.stopPropagation()} - class="flex max-h-[70vh] min-h-[30vh] flex-col rounded-t-2xl bg-white" - transition:fly|global={{ y: 100, duration: 200 }} - > -
- {@render children()} -
+ +
e.stopPropagation()} + class="flex max-h-[70vh] min-h-[30vh] flex-col rounded-t-2xl bg-white" + transition:fly|global={{ y: 100, duration: 200 }} + > +
+ {@render children()}
- -
+
+
{/if} diff --git a/src/lib/components/atoms/Modal.svelte b/src/lib/components/atoms/Modal.svelte index 0864477..679e756 100644 --- a/src/lib/components/atoms/Modal.svelte +++ b/src/lib/components/atoms/Modal.svelte @@ -22,11 +22,9 @@ class="fixed inset-0 z-10 bg-black bg-opacity-50" transition:fade|global={{ duration: 100 }} > - -
-
e.stopPropagation()} class={["rounded-2xl bg-white p-4", className]}> - {@render children()} -
+ +
e.stopPropagation()} class={["rounded-2xl bg-white p-4", className]}> + {@render children()}
diff --git a/src/lib/server/db/schema/util.ts b/src/lib/server/db/schema/util.ts index d7f7350..74f92de 100644 --- a/src/lib/server/db/schema/util.ts +++ b/src/lib/server/db/schema/util.ts @@ -1,4 +1,4 @@ -export type Ciphertext = { +export interface Ciphertext { ciphertext: string; // Base64 iv: string; // Base64 -}; +} diff --git a/src/lib/server/schemas/auth.ts b/src/lib/server/schemas/auth.ts index eae349f..e3d6264 100644 --- a/src/lib/server/schemas/auth.ts +++ b/src/lib/server/schemas/auth.ts @@ -7,7 +7,7 @@ export const passwordChangeRequest = z.object({ export type PasswordChangeRequest = z.infer; export const loginRequest = z.object({ - email: z.string().email().nonempty(), + email: z.string().email(), password: z.string().trim().nonempty(), }); export type LoginRequest = z.infer; diff --git a/src/lib/server/schemas/category.ts b/src/lib/server/schemas/category.ts index a11d525..d02fa4f 100644 --- a/src/lib/server/schemas/category.ts +++ b/src/lib/server/schemas/category.ts @@ -1,6 +1,6 @@ import { z } from "zod"; -export const categoryIdSchema = z.union([z.enum(["root"]), z.number().int().positive()]); +export const categoryIdSchema = z.union([z.literal("root"), z.number().int().positive()]); export const categoryInfoResponse = z.object({ metadata: z diff --git a/src/lib/server/schemas/directory.ts b/src/lib/server/schemas/directory.ts index 473d696..016cfe8 100644 --- a/src/lib/server/schemas/directory.ts +++ b/src/lib/server/schemas/directory.ts @@ -1,6 +1,6 @@ import { z } from "zod"; -export const directoryIdSchema = z.union([z.enum(["root"]), z.number().int().positive()]); +export const directoryIdSchema = z.union([z.literal("root"), z.number().int().positive()]); export const directoryInfoResponse = z.object({ metadata: z diff --git a/src/lib/server/schemas/file.ts b/src/lib/server/schemas/file.ts index cb6af28..b6aa648 100644 --- a/src/lib/server/schemas/file.ts +++ b/src/lib/server/schemas/file.ts @@ -9,6 +9,7 @@ export const fileInfoResponse = z.object({ dekVersion: z.string().datetime(), contentType: z .string() + .trim() .nonempty() .refine((value) => mime.getExtension(value) !== null), // MIME type contentIv: z.string().base64().nonempty(), @@ -49,6 +50,7 @@ export const fileUploadRequest = z.object({ contentHmac: z.string().base64().nonempty(), contentType: z .string() + .trim() .nonempty() .refine((value) => mime.getExtension(value) !== null), // MIME type contentIv: z.string().base64().nonempty(), diff --git a/src/lib/server/schemas/user.ts b/src/lib/server/schemas/user.ts index b359467..e5cc8c1 100644 --- a/src/lib/server/schemas/user.ts +++ b/src/lib/server/schemas/user.ts @@ -1,12 +1,12 @@ import { z } from "zod"; export const userInfoResponse = z.object({ - email: z.string().email().nonempty(), + email: z.string().email(), nickname: z.string().nonempty(), }); export type UserInfoResponse = z.infer; export const nicknameChangeRequest = z.object({ - newNickname: z.string().min(2).max(8), + newNickname: z.string().trim().min(2).max(8), }); export type NicknameChangeRequest = z.infer; diff --git a/src/routes/api/category/[id]/file/list/+server.ts b/src/routes/api/category/[id]/file/list/+server.ts index c93c963..e354d8b 100644 --- a/src/routes/api/category/[id]/file/list/+server.ts +++ b/src/routes/api/category/[id]/file/list/+server.ts @@ -31,6 +31,6 @@ export const GET: RequestHandler = async ({ locals, url, params }) => { return json( categoryFileListResponse.parse({ files: files.map(({ id, isRecursive }) => ({ file: id, isRecursive })), - }) satisfies CategoryFileListResponse, + } satisfies CategoryFileListResponse), ); }; diff --git a/src/routes/api/file/upload/+server.ts b/src/routes/api/file/upload/+server.ts index 55db93f..f9cbd53 100644 --- a/src/routes/api/file/upload/+server.ts +++ b/src/routes/api/file/upload/+server.ts @@ -73,12 +73,13 @@ export const POST: RequestHandler = async ({ locals, request }) => { "field", handler(async (fieldname, val) => { if (fieldname === "metadata") { + // Ignore subsequent metadata fields if (!metadata) { - // Ignore subsequent metadata fields metadata = parseFileMetadata(userId, val); } } else if (fieldname === "checksum") { - resolveChecksum(val); // Ignore subsequent checksum fields + // Ignore subsequent checksum fields + resolveChecksum(val); } else { error(400, "Invalid request body"); }