From d7396945df47685dbced67f0f63a86ca4a5764d0 Mon Sep 17 00:00:00 2001 From: static Date: Wed, 8 Jan 2025 22:08:20 +0900 Subject: [PATCH] =?UTF-8?q?Date=20=EA=B4=80=EB=A0=A8=20Zod=20=EC=8A=A4?= =?UTF-8?q?=ED=82=A4=EB=A7=88=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit z.coerce.date()가 아닌 z.string().datetime()을 사용하도록 변경하여, 번거롭더라도 버그를 줄일 수 있는 방향으로 수정하였습니다. --- src/lib/modules/file.ts | 4 ++-- src/lib/server/schemas/directory.ts | 20 +++++++++---------- src/lib/server/schemas/file.ts | 20 +++++++++---------- src/routes/(main)/directory/[[id]]/service.ts | 8 ++++---- src/routes/api/directory/[id]/+server.ts | 4 ++-- .../api/directory/[id]/rename/+server.ts | 2 +- src/routes/api/directory/create/+server.ts | 2 +- src/routes/api/file/[id]/+server.ts | 4 ++-- src/routes/api/file/[id]/rename/+server.ts | 2 +- src/routes/api/file/upload/+server.ts | 2 +- 10 files changed, 34 insertions(+), 34 deletions(-) diff --git a/src/lib/modules/file.ts b/src/lib/modules/file.ts index 9f5f725..e5e71a6 100644 --- a/src/lib/modules/file.ts +++ b/src/lib/modules/file.ts @@ -26,7 +26,7 @@ const fetchDirectoryInfo = async (directoryId: "root" | number, masterKey: Crypt newInfo = { id: directoryId, dataKey, - dataKeyVersion: metadata!.dekVersion, + dataKeyVersion: new Date(metadata!.dekVersion), name: await decryptString(metadata!.name, metadata!.nameIv, dataKey), subDirectoryIds: subDirectories, fileIds: files, @@ -63,7 +63,7 @@ const fetchFileInfo = async (fileId: number, masterKey: CryptoKey) => { const newInfo: FileInfo = { id: fileId, dataKey, - dataKeyVersion: metadata.dekVersion, + dataKeyVersion: new Date(metadata.dekVersion), contentType: metadata.contentType, contentIv: metadata.contentIv, name: await decryptString(metadata.name, metadata.nameIv, dataKey), diff --git a/src/lib/server/schemas/directory.ts b/src/lib/server/schemas/directory.ts index e7012d5..eda0ac3 100644 --- a/src/lib/server/schemas/directory.ts +++ b/src/lib/server/schemas/directory.ts @@ -1,19 +1,12 @@ import { z } from "zod"; -export const directoryRenameRequest = z.object({ - dekVersion: z.coerce.date(), - name: z.string().base64().nonempty(), - nameIv: z.string().base64().nonempty(), -}); -export type DirectoryRenameRequest = z.infer; - export const directoryInfoResponse = z.object({ metadata: z .object({ - createdAt: z.date(), + createdAt: z.string().datetime(), mekVersion: z.number().int().positive(), dek: z.string().base64().nonempty(), - dekVersion: z.date(), + dekVersion: z.string().datetime(), name: z.string().base64().nonempty(), nameIv: z.string().base64().nonempty(), }) @@ -23,11 +16,18 @@ export const directoryInfoResponse = z.object({ }); export type DirectoryInfoResponse = z.infer; +export const directoryRenameRequest = z.object({ + dekVersion: z.string().datetime(), + name: z.string().base64().nonempty(), + nameIv: z.string().base64().nonempty(), +}); +export type DirectoryRenameRequest = z.infer; + export const directoryCreateRequest = z.object({ parentId: z.union([z.enum(["root"]), z.number().int().positive()]), mekVersion: z.number().int().positive(), dek: z.string().base64().nonempty(), - dekVersion: z.coerce.date(), + dekVersion: z.string().datetime(), name: z.string().base64().nonempty(), nameIv: z.string().base64().nonempty(), }); diff --git a/src/lib/server/schemas/file.ts b/src/lib/server/schemas/file.ts index 0df09df..3d3d6f5 100644 --- a/src/lib/server/schemas/file.ts +++ b/src/lib/server/schemas/file.ts @@ -1,18 +1,11 @@ import mime from "mime"; import { z } from "zod"; -export const fileRenameRequest = z.object({ - dekVersion: z.coerce.date(), - name: z.string().base64().nonempty(), - nameIv: z.string().base64().nonempty(), -}); -export type FileRenameRequest = z.infer; - export const fileInfoResponse = z.object({ - createdAt: z.date(), + createdAt: z.string().datetime(), mekVersion: z.number().int().positive(), dek: z.string().base64().nonempty(), - dekVersion: z.date(), + dekVersion: z.string().datetime(), contentType: z .string() .nonempty() @@ -23,11 +16,18 @@ export const fileInfoResponse = z.object({ }); export type FileInfoResponse = z.infer; +export const fileRenameRequest = z.object({ + dekVersion: z.string().datetime(), + name: z.string().base64().nonempty(), + nameIv: z.string().base64().nonempty(), +}); +export type FileRenameRequest = z.infer; + export const fileUploadRequest = z.object({ parentId: z.union([z.enum(["root"]), z.number().int().positive()]), mekVersion: z.number().int().positive(), dek: z.string().base64().nonempty(), - dekVersion: z.coerce.date(), + dekVersion: z.string().datetime(), contentType: z .string() .nonempty() diff --git a/src/routes/(main)/directory/[[id]]/service.ts b/src/routes/(main)/directory/[[id]]/service.ts index 2d5c86a..8f47262 100644 --- a/src/routes/(main)/directory/[[id]]/service.ts +++ b/src/routes/(main)/directory/[[id]]/service.ts @@ -33,7 +33,7 @@ export const requestDirectoryCreation = async ( parentId, mekVersion: masterKey.version, dek: await wrapDataKey(dataKey, masterKey.key), - dekVersion: dataKeyVersion, + dekVersion: dataKeyVersion.toISOString(), name: encodeToBase64(nameEncrypted.ciphertext), nameIv: nameEncrypted.iv, }); @@ -52,7 +52,7 @@ export const requestFileUpload = (file: File, parentId: "root" | number, masterK parentId, mekVersion: masterKey.version, dek: await wrapDataKey(dataKey, masterKey.key), - dekVersion: dataKeyVersion, + dekVersion: dataKeyVersion.toISOString(), contentType: file.type, contentIv: fileEncrypted.iv, name: nameEncrypted.ciphertext, @@ -85,13 +85,13 @@ export const requestDirectoryEntryRename = async ( if (entry.type === "directory") { await callPostApi(`/api/directory/${entry.id}/rename`, { - dekVersion: entry.dataKeyVersion, + dekVersion: entry.dataKeyVersion.toISOString(), name: newNameEncrypted.ciphertext, nameIv: newNameEncrypted.iv, }); } else { await callPostApi(`/api/file/${entry.id}/rename`, { - dekVersion: entry.dataKeyVersion, + dekVersion: entry.dataKeyVersion.toISOString(), name: newNameEncrypted.ciphertext, nameIv: newNameEncrypted.iv, }); diff --git a/src/routes/api/directory/[id]/+server.ts b/src/routes/api/directory/[id]/+server.ts index be47ca6..7cd1d09 100644 --- a/src/routes/api/directory/[id]/+server.ts +++ b/src/routes/api/directory/[id]/+server.ts @@ -20,10 +20,10 @@ export const GET: RequestHandler = async ({ cookies, params }) => { return json( directoryInfoResponse.parse({ metadata: metadata && { - createdAt: metadata.createdAt, + createdAt: metadata.createdAt.toISOString(), mekVersion: metadata.mekVersion, dek: metadata.encDek, - dekVersion: metadata.dekVersion, + dekVersion: metadata.dekVersion.toISOString(), name: metadata.encName.ciphertext, nameIv: metadata.encName.iv, }, diff --git a/src/routes/api/directory/[id]/rename/+server.ts b/src/routes/api/directory/[id]/rename/+server.ts index 13aab5a..c951a9c 100644 --- a/src/routes/api/directory/[id]/rename/+server.ts +++ b/src/routes/api/directory/[id]/rename/+server.ts @@ -20,6 +20,6 @@ export const POST: RequestHandler = async ({ request, cookies, params }) => { if (!bodyZodRes.success) error(400, "Invalid request body"); const { dekVersion, name, nameIv } = bodyZodRes.data; - await renameDirectory(userId, id, dekVersion, name, nameIv); + await renameDirectory(userId, id, new Date(dekVersion), name, nameIv); return text("Directory renamed", { headers: { "Content-Type": "text/plain" } }); }; diff --git a/src/routes/api/directory/create/+server.ts b/src/routes/api/directory/create/+server.ts index 05ab7d6..b31d15f 100644 --- a/src/routes/api/directory/create/+server.ts +++ b/src/routes/api/directory/create/+server.ts @@ -16,7 +16,7 @@ export const POST: RequestHandler = async ({ request, cookies }) => { parentId, mekVersion, encDek: dek, - dekVersion, + dekVersion: new Date(dekVersion), encName: name, encNameIv: nameIv, }); diff --git a/src/routes/api/file/[id]/+server.ts b/src/routes/api/file/[id]/+server.ts index 8eca27b..ceb8a0f 100644 --- a/src/routes/api/file/[id]/+server.ts +++ b/src/routes/api/file/[id]/+server.ts @@ -20,10 +20,10 @@ export const GET: RequestHandler = async ({ cookies, params }) => { await getFileInformation(userId, id); return json( fileInfoResponse.parse({ - createdAt, + createdAt: createdAt.toISOString(), mekVersion, dek: encDek, - dekVersion, + dekVersion: dekVersion.toISOString(), contentType: contentType, contentIv: encContentIv, name: encName.ciphertext, diff --git a/src/routes/api/file/[id]/rename/+server.ts b/src/routes/api/file/[id]/rename/+server.ts index 7331000..46fd4b3 100644 --- a/src/routes/api/file/[id]/rename/+server.ts +++ b/src/routes/api/file/[id]/rename/+server.ts @@ -20,6 +20,6 @@ export const POST: RequestHandler = async ({ request, cookies, params }) => { if (!bodyZodRes.success) error(400, "Invalid request body"); const { dekVersion, name, nameIv } = bodyZodRes.data; - await renameFile(userId, id, dekVersion, name, nameIv); + await renameFile(userId, id, new Date(dekVersion), name, nameIv); return text("File renamed", { headers: { "Content-Type": "text/plain" } }); }; diff --git a/src/routes/api/file/upload/+server.ts b/src/routes/api/file/upload/+server.ts index 1ae598a..2de4c9a 100644 --- a/src/routes/api/file/upload/+server.ts +++ b/src/routes/api/file/upload/+server.ts @@ -25,7 +25,7 @@ export const POST: RequestHandler = async ({ request, cookies }) => { parentId, mekVersion, encDek: dek, - dekVersion, + dekVersion: new Date(dekVersion), contentType, encContentIv: contentIv, encName: name,