오타 수정

This commit is contained in:
static
2025-01-06 14:12:23 +09:00
parent 6bf40e4ab4
commit bd0dd3343a
12 changed files with 43 additions and 43 deletions

View File

@@ -2,11 +2,11 @@ import { and, eq, isNull } from "drizzle-orm";
import db from "./drizzle"; import db from "./drizzle";
import { directory, file, mek } from "./schema"; import { directory, file, mek } from "./schema";
type DirectroyId = "root" | number; type DirectoryId = "root" | number;
export interface NewDirectroyParams { export interface NewDirectoryParams {
userId: number; userId: number;
parentId: DirectroyId; parentId: DirectoryId;
mekVersion: number; mekVersion: number;
encDek: string; encDek: string;
encName: string; encName: string;
@@ -15,7 +15,7 @@ export interface NewDirectroyParams {
export interface NewFileParams { export interface NewFileParams {
path: string; path: string;
parentId: DirectroyId; parentId: DirectoryId;
userId: number; userId: number;
mekVersion: number; mekVersion: number;
encDek: string; encDek: string;
@@ -24,7 +24,7 @@ export interface NewFileParams {
encNameIv: string; encNameIv: string;
} }
export const registerNewDirectory = async (params: NewDirectroyParams) => { export const registerNewDirectory = async (params: NewDirectoryParams) => {
return await db.transaction(async (tx) => { return await db.transaction(async (tx) => {
const meks = await tx const meks = await tx
.select() .select()
@@ -47,7 +47,7 @@ export const registerNewDirectory = async (params: NewDirectroyParams) => {
}); });
}; };
export const getAllDirectoriesByParent = async (userId: number, directoryId: DirectroyId) => { export const getAllDirectoriesByParent = async (userId: number, directoryId: DirectoryId) => {
return await db return await db
.select() .select()
.from(directory) .from(directory)
@@ -135,7 +135,7 @@ export const registerNewFile = async (params: NewFileParams) => {
}); });
}; };
export const getAllFilesByParent = async (userId: number, parentId: DirectroyId) => { export const getAllFilesByParent = async (userId: number, parentId: DirectoryId) => {
return await db return await db
.select() .select()
.from(file) .from(file)

View File

@@ -6,7 +6,7 @@ export const directoryRenameRequest = z.object({
}); });
export type DirectoryRenameRequest = z.infer<typeof directoryRenameRequest>; export type DirectoryRenameRequest = z.infer<typeof directoryRenameRequest>;
export const directroyInfoResponse = z.object({ export const directoryInfoResponse = z.object({
metadata: z metadata: z
.object({ .object({
createdAt: z.date(), createdAt: z.date(),
@@ -19,7 +19,7 @@ export const directroyInfoResponse = z.object({
subDirectories: z.number().int().positive().array(), subDirectories: z.number().int().positive().array(),
files: z.number().int().positive().array(), files: z.number().int().positive().array(),
}); });
export type DirectroyInfoResponse = z.infer<typeof directroyInfoResponse>; export type DirectoryInfoResponse = z.infer<typeof directoryInfoResponse>;
export const directoryCreateRequest = z.object({ export const directoryCreateRequest = z.object({
parentId: z.union([z.enum(["root"]), z.number().int().positive()]), parentId: z.union([z.enum(["root"]), z.number().int().positive()]),

View File

@@ -7,7 +7,7 @@ import {
setDirectoryEncName, setDirectoryEncName,
unregisterDirectory, unregisterDirectory,
getAllFilesByParent, getAllFilesByParent,
type NewDirectroyParams, type NewDirectoryParams,
} from "$lib/server/db/file"; } from "$lib/server/db/file";
import { getActiveMekVersion } from "$lib/server/db/mek"; import { getActiveMekVersion } from "$lib/server/db/mek";
@@ -35,14 +35,14 @@ export const renameDirectory = async (
await setDirectoryEncName(userId, directoryId, newEncName, newEncNameIv); await setDirectoryEncName(userId, directoryId, newEncName, newEncNameIv);
}; };
export const getDirectroyInformation = async (userId: number, directroyId: "root" | number) => { export const getDirectoryInformation = async (userId: number, directoryId: "root" | number) => {
const directory = directroyId !== "root" ? await getDirectory(userId, directroyId) : undefined; const directory = directoryId !== "root" ? await getDirectory(userId, directoryId) : undefined;
if (directory === null) { if (directory === null) {
error(404, "Invalid directory id"); error(404, "Invalid directory id");
} }
const directories = await getAllDirectoriesByParent(userId, directroyId); const directories = await getAllDirectoriesByParent(userId, directoryId);
const files = await getAllFilesByParent(userId, directroyId); const files = await getAllFilesByParent(userId, directoryId);
return { return {
metadata: directory && { metadata: directory && {
@@ -56,7 +56,7 @@ export const getDirectroyInformation = async (userId: number, directroyId: "root
}; };
}; };
export const createDirectory = async (params: NewDirectroyParams) => { export const createDirectory = async (params: NewDirectoryParams) => {
const activeMekVersion = await getActiveMekVersion(params.userId); const activeMekVersion = await getActiveMekVersion(params.userId);
if (activeMekVersion === null) { if (activeMekVersion === null) {
error(500, "Invalid MEK version"); error(500, "Invalid MEK version");

View File

@@ -38,7 +38,7 @@ export const requestClientRegistration = async (
return res.ok; return res.ok;
}; };
export const requestMasterKeyDownload = async (decryptKey: CryptoKey, verfiyKey: CryptoKey) => { export const requestMasterKeyDownload = async (decryptKey: CryptoKey, verifyKey: CryptoKey) => {
const res = await callGetApi("/api/mek/list"); const res = await callGetApi("/api/mek/list");
if (!res.ok) return false; if (!res.ok) return false;
@@ -55,7 +55,7 @@ export const requestMasterKeyDownload = async (decryptKey: CryptoKey, verfiyKey:
version, version,
masterKeyWrapped, masterKeyWrapped,
masterKeyWrappedSig, masterKeyWrappedSig,
verfiyKey, verifyKey,
), ),
}; };
}, },

View File

@@ -31,7 +31,7 @@
const clientKeysBlob = new Blob([JSON.stringify(clientKeysExported)], { const clientKeysBlob = new Blob([JSON.stringify(clientKeysExported)], {
type: "application/json", type: "application/json",
}); });
saveAs(clientKeysBlob, "arkvalut-clientkey.json"); saveAs(clientKeysBlob, "arkvault-clientkey.json");
if (!isBeforeContinueBottomSheetOpen) { if (!isBeforeContinueBottomSheetOpen) {
setTimeout(() => { setTimeout(() => {

View File

@@ -1,5 +1,5 @@
<script module lang="ts"> <script module lang="ts">
export interface SelectedDiretoryEntry { export interface SelectedDirectoryEntry {
type: "directory" | "file"; type: "directory" | "file";
id: number; id: number;
name: string; name: string;
@@ -18,9 +18,9 @@
import DirectoryEntryMenuBottomSheet from "./DirectoryEntryMenuBottomSheet.svelte"; import DirectoryEntryMenuBottomSheet from "./DirectoryEntryMenuBottomSheet.svelte";
import RenameDirectoryEntryModal from "./RenameDirectoryEntryModal.svelte"; import RenameDirectoryEntryModal from "./RenameDirectoryEntryModal.svelte";
import { import {
decryptDirectroyMetadata, decryptDirectoryMetadata,
decryptFileMetadata, decryptFileMetadata,
requestDirectroyCreation, requestDirectoryCreation,
requestFileUpload, requestFileUpload,
} from "./service"; } from "./service";
@@ -29,7 +29,7 @@
let { data } = $props(); let { data } = $props();
let fileInput: HTMLInputElement | undefined = $state(); let fileInput: HTMLInputElement | undefined = $state();
let selectedEntry: SelectedDiretoryEntry | undefined = $state(); let selectedEntry: SelectedDirectoryEntry | undefined = $state();
let isCreateBottomSheetOpen = $state(false); let isCreateBottomSheetOpen = $state(false);
let isCreateDirectoryModalOpen = $state(false); let isCreateDirectoryModalOpen = $state(false);
@@ -42,7 +42,7 @@
const metadata = $derived.by(() => { const metadata = $derived.by(() => {
const { metadata } = data; const { metadata } = data;
if (metadata && $masterKeyStore) { if (metadata && $masterKeyStore) {
return decryptDirectroyMetadata(metadata, $masterKeyStore.get(metadata.mekVersion)!.key); return decryptDirectoryMetadata(metadata, $masterKeyStore.get(metadata.mekVersion)!.key);
} }
}); });
const subDirectories = $derived.by(() => { const subDirectories = $derived.by(() => {
@@ -52,7 +52,7 @@
subDirectories.map(async (subDirectory) => { subDirectories.map(async (subDirectory) => {
const metadata = subDirectory.metadata!; const metadata = subDirectory.metadata!;
return { return {
...(await decryptDirectroyMetadata( ...(await decryptDirectoryMetadata(
metadata, metadata,
$masterKeyStore.get(metadata.mekVersion)!.key, $masterKeyStore.get(metadata.mekVersion)!.key,
)), )),
@@ -81,7 +81,7 @@
}); });
const createDirectory = async (name: string) => { const createDirectory = async (name: string) => {
await requestDirectroyCreation(name, data.id, $masterKeyStore?.get(1)!); await requestDirectoryCreation(name, data.id, $masterKeyStore?.get(1)!);
isCreateDirectoryModalOpen = false; isCreateDirectoryModalOpen = false;
}; };

View File

@@ -1,7 +1,7 @@
import { error } from "@sveltejs/kit"; import { error } from "@sveltejs/kit";
import { z } from "zod"; import { z } from "zod";
import { callGetApi } from "$lib/hooks"; import { callGetApi } from "$lib/hooks";
import type { DirectroyInfoResponse, FileInfoResponse } from "$lib/server/schemas"; import type { DirectoryInfoResponse, FileInfoResponse } from "$lib/server/schemas";
import type { PageLoad } from "./$types"; import type { PageLoad } from "./$types";
export const load: PageLoad = async ({ params, fetch }) => { export const load: PageLoad = async ({ params, fetch }) => {
@@ -17,13 +17,13 @@ export const load: PageLoad = async ({ params, fetch }) => {
const res = await callGetApi(`/api/directory/${directoryId}`, fetch); const res = await callGetApi(`/api/directory/${directoryId}`, fetch);
if (!res.ok) error(404, "Not found"); if (!res.ok) error(404, "Not found");
const directoryInfo: DirectroyInfoResponse = await res.json(); const directoryInfo: DirectoryInfoResponse = await res.json();
const subDirectoryInfos = await Promise.all( const subDirectoryInfos = await Promise.all(
directoryInfo.subDirectories.map(async (subDirectoryId) => { directoryInfo.subDirectories.map(async (subDirectoryId) => {
const res = await callGetApi(`/api/directory/${subDirectoryId}`, fetch); const res = await callGetApi(`/api/directory/${subDirectoryId}`, fetch);
if (!res.ok) error(500, "Internal server error"); if (!res.ok) error(500, "Internal server error");
return { return {
...((await res.json()) as DirectroyInfoResponse), ...((await res.json()) as DirectoryInfoResponse),
id: subDirectoryId, id: subDirectoryId,
}; };
}), }),

View File

@@ -1,11 +1,11 @@
<script lang="ts"> <script lang="ts">
import { Modal } from "$lib/components"; import { Modal } from "$lib/components";
import { Button } from "$lib/components/buttons"; import { Button } from "$lib/components/buttons";
import type { SelectedDiretoryEntry } from "./+page.svelte"; import type { SelectedDirectoryEntry } from "./+page.svelte";
interface Props { interface Props {
isOpen: boolean; isOpen: boolean;
selectedEntry: SelectedDiretoryEntry | undefined; selectedEntry: SelectedDirectoryEntry | undefined;
} }
let { isOpen = $bindable(), selectedEntry = $bindable() }: Props = $props(); let { isOpen = $bindable(), selectedEntry = $bindable() }: Props = $props();

View File

@@ -1,7 +1,7 @@
<script lang="ts"> <script lang="ts">
import { BottomSheet } from "$lib/components"; import { BottomSheet } from "$lib/components";
import { EntryButton } from "$lib/components/buttons"; import { EntryButton } from "$lib/components/buttons";
import type { SelectedDiretoryEntry } from "./+page.svelte"; import type { SelectedDirectoryEntry } from "./+page.svelte";
import IconFolder from "~icons/material-symbols/folder"; import IconFolder from "~icons/material-symbols/folder";
import IconDraft from "~icons/material-symbols/draft"; import IconDraft from "~icons/material-symbols/draft";
@@ -12,7 +12,7 @@
onRenameClick: () => void; onRenameClick: () => void;
onDeleteClick: () => void; onDeleteClick: () => void;
isOpen: boolean; isOpen: boolean;
selectedEntry: SelectedDiretoryEntry | undefined; selectedEntry: SelectedDirectoryEntry | undefined;
} }
let { let {

View File

@@ -2,11 +2,11 @@
import { Modal } from "$lib/components"; import { Modal } from "$lib/components";
import { Button } from "$lib/components/buttons"; import { Button } from "$lib/components/buttons";
import { TextInput } from "$lib/components/inputs"; import { TextInput } from "$lib/components/inputs";
import type { SelectedDiretoryEntry } from "./+page.svelte"; import type { SelectedDirectoryEntry } from "./+page.svelte";
interface Props { interface Props {
isOpen: boolean; isOpen: boolean;
selectedEntry: SelectedDiretoryEntry | undefined; selectedEntry: SelectedDirectoryEntry | undefined;
} }
let { isOpen = $bindable(), selectedEntry = $bindable() }: Props = $props(); let { isOpen = $bindable(), selectedEntry = $bindable() }: Props = $props();

View File

@@ -9,7 +9,7 @@ import {
decryptString, decryptString,
} from "$lib/modules/crypto"; } from "$lib/modules/crypto";
import type { import type {
DirectroyInfoResponse, DirectoryInfoResponse,
DirectoryCreateRequest, DirectoryCreateRequest,
FileUploadRequest, FileUploadRequest,
} from "$lib/server/schemas"; } from "$lib/server/schemas";
@@ -17,8 +17,8 @@ import type { MasterKey } from "$lib/stores";
export { decryptFileMetadata } from "$lib/services/file"; export { decryptFileMetadata } from "$lib/services/file";
export const decryptDirectroyMetadata = async ( export const decryptDirectoryMetadata = async (
metadata: NonNullable<DirectroyInfoResponse["metadata"]>, metadata: NonNullable<DirectoryInfoResponse["metadata"]>,
masterKey: CryptoKey, masterKey: CryptoKey,
) => { ) => {
const { dataKey } = await unwrapDataKey(metadata.dek, masterKey); const { dataKey } = await unwrapDataKey(metadata.dek, masterKey);
@@ -27,7 +27,7 @@ export const decryptDirectroyMetadata = async (
}; };
}; };
export const requestDirectroyCreation = async ( export const requestDirectoryCreation = async (
name: string, name: string,
parentId: "root" | number, parentId: "root" | number,
masterKey: MasterKey, masterKey: MasterKey,

View File

@@ -1,8 +1,8 @@
import { error, json } from "@sveltejs/kit"; import { error, json } from "@sveltejs/kit";
import { z } from "zod"; import { z } from "zod";
import { authorize } from "$lib/server/modules/auth"; import { authorize } from "$lib/server/modules/auth";
import { directroyInfoResponse, type DirectroyInfoResponse } from "$lib/server/schemas"; import { directoryInfoResponse, type DirectoryInfoResponse } from "$lib/server/schemas";
import { getDirectroyInformation } from "$lib/server/services/directory"; import { getDirectoryInformation } from "$lib/server/services/directory";
import type { RequestHandler } from "./$types"; import type { RequestHandler } from "./$types";
export const GET: RequestHandler = async ({ cookies, params }) => { export const GET: RequestHandler = async ({ cookies, params }) => {
@@ -16,9 +16,9 @@ export const GET: RequestHandler = async ({ cookies, params }) => {
if (!zodRes.success) error(400, "Invalid path parameters"); if (!zodRes.success) error(400, "Invalid path parameters");
const { id } = zodRes.data; const { id } = zodRes.data;
const { metadata, directories, files } = await getDirectroyInformation(userId, id); const { metadata, directories, files } = await getDirectoryInformation(userId, id);
return json( return json(
directroyInfoResponse.parse({ directoryInfoResponse.parse({
metadata: metadata && { metadata: metadata && {
createdAt: metadata.createdAt, createdAt: metadata.createdAt,
mekVersion: metadata.mekVersion, mekVersion: metadata.mekVersion,
@@ -28,6 +28,6 @@ export const GET: RequestHandler = async ({ cookies, params }) => {
}, },
subDirectories: directories, subDirectories: directories,
files, files,
} satisfies DirectroyInfoResponse), } satisfies DirectoryInfoResponse),
); );
}; };