mirror of
https://github.com/kmc7468/arkvault.git
synced 2025-12-12 21:08:46 +00:00
오타 수정
This commit is contained in:
@@ -2,11 +2,11 @@ import { and, eq, isNull } from "drizzle-orm";
|
||||
import db from "./drizzle";
|
||||
import { directory, file, mek } from "./schema";
|
||||
|
||||
type DirectroyId = "root" | number;
|
||||
type DirectoryId = "root" | number;
|
||||
|
||||
export interface NewDirectroyParams {
|
||||
export interface NewDirectoryParams {
|
||||
userId: number;
|
||||
parentId: DirectroyId;
|
||||
parentId: DirectoryId;
|
||||
mekVersion: number;
|
||||
encDek: string;
|
||||
encName: string;
|
||||
@@ -15,7 +15,7 @@ export interface NewDirectroyParams {
|
||||
|
||||
export interface NewFileParams {
|
||||
path: string;
|
||||
parentId: DirectroyId;
|
||||
parentId: DirectoryId;
|
||||
userId: number;
|
||||
mekVersion: number;
|
||||
encDek: string;
|
||||
@@ -24,7 +24,7 @@ export interface NewFileParams {
|
||||
encNameIv: string;
|
||||
}
|
||||
|
||||
export const registerNewDirectory = async (params: NewDirectroyParams) => {
|
||||
export const registerNewDirectory = async (params: NewDirectoryParams) => {
|
||||
return await db.transaction(async (tx) => {
|
||||
const meks = await tx
|
||||
.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
|
||||
.select()
|
||||
.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
|
||||
.select()
|
||||
.from(file)
|
||||
|
||||
@@ -6,7 +6,7 @@ export const directoryRenameRequest = z.object({
|
||||
});
|
||||
export type DirectoryRenameRequest = z.infer<typeof directoryRenameRequest>;
|
||||
|
||||
export const directroyInfoResponse = z.object({
|
||||
export const directoryInfoResponse = z.object({
|
||||
metadata: z
|
||||
.object({
|
||||
createdAt: z.date(),
|
||||
@@ -19,7 +19,7 @@ export const directroyInfoResponse = z.object({
|
||||
subDirectories: 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({
|
||||
parentId: z.union([z.enum(["root"]), z.number().int().positive()]),
|
||||
|
||||
@@ -7,7 +7,7 @@ import {
|
||||
setDirectoryEncName,
|
||||
unregisterDirectory,
|
||||
getAllFilesByParent,
|
||||
type NewDirectroyParams,
|
||||
type NewDirectoryParams,
|
||||
} from "$lib/server/db/file";
|
||||
import { getActiveMekVersion } from "$lib/server/db/mek";
|
||||
|
||||
@@ -35,14 +35,14 @@ export const renameDirectory = async (
|
||||
await setDirectoryEncName(userId, directoryId, newEncName, newEncNameIv);
|
||||
};
|
||||
|
||||
export const getDirectroyInformation = async (userId: number, directroyId: "root" | number) => {
|
||||
const directory = directroyId !== "root" ? await getDirectory(userId, directroyId) : undefined;
|
||||
export const getDirectoryInformation = async (userId: number, directoryId: "root" | number) => {
|
||||
const directory = directoryId !== "root" ? await getDirectory(userId, directoryId) : undefined;
|
||||
if (directory === null) {
|
||||
error(404, "Invalid directory id");
|
||||
}
|
||||
|
||||
const directories = await getAllDirectoriesByParent(userId, directroyId);
|
||||
const files = await getAllFilesByParent(userId, directroyId);
|
||||
const directories = await getAllDirectoriesByParent(userId, directoryId);
|
||||
const files = await getAllFilesByParent(userId, directoryId);
|
||||
|
||||
return {
|
||||
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);
|
||||
if (activeMekVersion === null) {
|
||||
error(500, "Invalid MEK version");
|
||||
|
||||
@@ -38,7 +38,7 @@ export const requestClientRegistration = async (
|
||||
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");
|
||||
if (!res.ok) return false;
|
||||
|
||||
@@ -55,7 +55,7 @@ export const requestMasterKeyDownload = async (decryptKey: CryptoKey, verfiyKey:
|
||||
version,
|
||||
masterKeyWrapped,
|
||||
masterKeyWrappedSig,
|
||||
verfiyKey,
|
||||
verifyKey,
|
||||
),
|
||||
};
|
||||
},
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
const clientKeysBlob = new Blob([JSON.stringify(clientKeysExported)], {
|
||||
type: "application/json",
|
||||
});
|
||||
saveAs(clientKeysBlob, "arkvalut-clientkey.json");
|
||||
saveAs(clientKeysBlob, "arkvault-clientkey.json");
|
||||
|
||||
if (!isBeforeContinueBottomSheetOpen) {
|
||||
setTimeout(() => {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<script module lang="ts">
|
||||
export interface SelectedDiretoryEntry {
|
||||
export interface SelectedDirectoryEntry {
|
||||
type: "directory" | "file";
|
||||
id: number;
|
||||
name: string;
|
||||
@@ -18,9 +18,9 @@
|
||||
import DirectoryEntryMenuBottomSheet from "./DirectoryEntryMenuBottomSheet.svelte";
|
||||
import RenameDirectoryEntryModal from "./RenameDirectoryEntryModal.svelte";
|
||||
import {
|
||||
decryptDirectroyMetadata,
|
||||
decryptDirectoryMetadata,
|
||||
decryptFileMetadata,
|
||||
requestDirectroyCreation,
|
||||
requestDirectoryCreation,
|
||||
requestFileUpload,
|
||||
} from "./service";
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
let { data } = $props();
|
||||
|
||||
let fileInput: HTMLInputElement | undefined = $state();
|
||||
let selectedEntry: SelectedDiretoryEntry | undefined = $state();
|
||||
let selectedEntry: SelectedDirectoryEntry | undefined = $state();
|
||||
|
||||
let isCreateBottomSheetOpen = $state(false);
|
||||
let isCreateDirectoryModalOpen = $state(false);
|
||||
@@ -42,7 +42,7 @@
|
||||
const metadata = $derived.by(() => {
|
||||
const { metadata } = data;
|
||||
if (metadata && $masterKeyStore) {
|
||||
return decryptDirectroyMetadata(metadata, $masterKeyStore.get(metadata.mekVersion)!.key);
|
||||
return decryptDirectoryMetadata(metadata, $masterKeyStore.get(metadata.mekVersion)!.key);
|
||||
}
|
||||
});
|
||||
const subDirectories = $derived.by(() => {
|
||||
@@ -52,7 +52,7 @@
|
||||
subDirectories.map(async (subDirectory) => {
|
||||
const metadata = subDirectory.metadata!;
|
||||
return {
|
||||
...(await decryptDirectroyMetadata(
|
||||
...(await decryptDirectoryMetadata(
|
||||
metadata,
|
||||
$masterKeyStore.get(metadata.mekVersion)!.key,
|
||||
)),
|
||||
@@ -81,7 +81,7 @@
|
||||
});
|
||||
|
||||
const createDirectory = async (name: string) => {
|
||||
await requestDirectroyCreation(name, data.id, $masterKeyStore?.get(1)!);
|
||||
await requestDirectoryCreation(name, data.id, $masterKeyStore?.get(1)!);
|
||||
isCreateDirectoryModalOpen = false;
|
||||
};
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { error } from "@sveltejs/kit";
|
||||
import { z } from "zod";
|
||||
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";
|
||||
|
||||
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);
|
||||
if (!res.ok) error(404, "Not found");
|
||||
|
||||
const directoryInfo: DirectroyInfoResponse = await res.json();
|
||||
const directoryInfo: DirectoryInfoResponse = await res.json();
|
||||
const subDirectoryInfos = await Promise.all(
|
||||
directoryInfo.subDirectories.map(async (subDirectoryId) => {
|
||||
const res = await callGetApi(`/api/directory/${subDirectoryId}`, fetch);
|
||||
if (!res.ok) error(500, "Internal server error");
|
||||
return {
|
||||
...((await res.json()) as DirectroyInfoResponse),
|
||||
...((await res.json()) as DirectoryInfoResponse),
|
||||
id: subDirectoryId,
|
||||
};
|
||||
}),
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
<script lang="ts">
|
||||
import { Modal } from "$lib/components";
|
||||
import { Button } from "$lib/components/buttons";
|
||||
import type { SelectedDiretoryEntry } from "./+page.svelte";
|
||||
import type { SelectedDirectoryEntry } from "./+page.svelte";
|
||||
|
||||
interface Props {
|
||||
isOpen: boolean;
|
||||
selectedEntry: SelectedDiretoryEntry | undefined;
|
||||
selectedEntry: SelectedDirectoryEntry | undefined;
|
||||
}
|
||||
|
||||
let { isOpen = $bindable(), selectedEntry = $bindable() }: Props = $props();
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<script lang="ts">
|
||||
import { BottomSheet } from "$lib/components";
|
||||
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 IconDraft from "~icons/material-symbols/draft";
|
||||
@@ -12,7 +12,7 @@
|
||||
onRenameClick: () => void;
|
||||
onDeleteClick: () => void;
|
||||
isOpen: boolean;
|
||||
selectedEntry: SelectedDiretoryEntry | undefined;
|
||||
selectedEntry: SelectedDirectoryEntry | undefined;
|
||||
}
|
||||
|
||||
let {
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
import { Modal } from "$lib/components";
|
||||
import { Button } from "$lib/components/buttons";
|
||||
import { TextInput } from "$lib/components/inputs";
|
||||
import type { SelectedDiretoryEntry } from "./+page.svelte";
|
||||
import type { SelectedDirectoryEntry } from "./+page.svelte";
|
||||
|
||||
interface Props {
|
||||
isOpen: boolean;
|
||||
selectedEntry: SelectedDiretoryEntry | undefined;
|
||||
selectedEntry: SelectedDirectoryEntry | undefined;
|
||||
}
|
||||
|
||||
let { isOpen = $bindable(), selectedEntry = $bindable() }: Props = $props();
|
||||
|
||||
@@ -9,7 +9,7 @@ import {
|
||||
decryptString,
|
||||
} from "$lib/modules/crypto";
|
||||
import type {
|
||||
DirectroyInfoResponse,
|
||||
DirectoryInfoResponse,
|
||||
DirectoryCreateRequest,
|
||||
FileUploadRequest,
|
||||
} from "$lib/server/schemas";
|
||||
@@ -17,8 +17,8 @@ import type { MasterKey } from "$lib/stores";
|
||||
|
||||
export { decryptFileMetadata } from "$lib/services/file";
|
||||
|
||||
export const decryptDirectroyMetadata = async (
|
||||
metadata: NonNullable<DirectroyInfoResponse["metadata"]>,
|
||||
export const decryptDirectoryMetadata = async (
|
||||
metadata: NonNullable<DirectoryInfoResponse["metadata"]>,
|
||||
masterKey: CryptoKey,
|
||||
) => {
|
||||
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,
|
||||
parentId: "root" | number,
|
||||
masterKey: MasterKey,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { error, json } from "@sveltejs/kit";
|
||||
import { z } from "zod";
|
||||
import { authorize } from "$lib/server/modules/auth";
|
||||
import { directroyInfoResponse, type DirectroyInfoResponse } from "$lib/server/schemas";
|
||||
import { getDirectroyInformation } from "$lib/server/services/directory";
|
||||
import { directoryInfoResponse, type DirectoryInfoResponse } from "$lib/server/schemas";
|
||||
import { getDirectoryInformation } from "$lib/server/services/directory";
|
||||
import type { RequestHandler } from "./$types";
|
||||
|
||||
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");
|
||||
const { id } = zodRes.data;
|
||||
|
||||
const { metadata, directories, files } = await getDirectroyInformation(userId, id);
|
||||
const { metadata, directories, files } = await getDirectoryInformation(userId, id);
|
||||
return json(
|
||||
directroyInfoResponse.parse({
|
||||
directoryInfoResponse.parse({
|
||||
metadata: metadata && {
|
||||
createdAt: metadata.createdAt,
|
||||
mekVersion: metadata.mekVersion,
|
||||
@@ -28,6 +28,6 @@ export const GET: RequestHandler = async ({ cookies, params }) => {
|
||||
},
|
||||
subDirectories: directories,
|
||||
files,
|
||||
} satisfies DirectroyInfoResponse),
|
||||
} satisfies DirectoryInfoResponse),
|
||||
);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user