mirror of
https://github.com/kmc7468/arkvault.git
synced 2026-11-04 08:10:28 +09:00
86 lines
2.1 KiB
TypeScript
86 lines
2.1 KiB
TypeScript
import { z } from "zod";
|
|
import { DirectoryService } from "#lib/server/services/index.js";
|
|
import { toDirectoryDto, toFileDto } from "#trpc/dto.js";
|
|
import { router, roleProcedure } from "#trpc/init.server.js";
|
|
import {
|
|
Base64Schema,
|
|
DirectoryIdSchema,
|
|
EncryptedNameSchema,
|
|
IdSchema,
|
|
toCiphertext,
|
|
} from "#trpc/schemas.js";
|
|
|
|
const directoryRouter = router({
|
|
get: roleProcedure["activeClient"]
|
|
.input(
|
|
z.object({
|
|
id: DirectoryIdSchema,
|
|
}),
|
|
)
|
|
.query(async ({ ctx, input }) => {
|
|
const { directory, subDirectories, files } = await DirectoryService.getDirectory(
|
|
ctx.session.userId,
|
|
input.id,
|
|
);
|
|
return {
|
|
metadata: directory && toDirectoryDto(directory),
|
|
subDirectories: subDirectories.map(toDirectoryDto),
|
|
files: files.map(toFileDto),
|
|
};
|
|
}),
|
|
|
|
create: roleProcedure["activeClient"]
|
|
.input(
|
|
z.object({
|
|
parent: DirectoryIdSchema,
|
|
mekVersion: IdSchema,
|
|
dek: Base64Schema,
|
|
dekVersion: z.date(),
|
|
...EncryptedNameSchema,
|
|
}),
|
|
)
|
|
.mutation(async ({ ctx, input }) => {
|
|
await DirectoryService.createDirectory({
|
|
userId: ctx.session.userId,
|
|
parentId: input.parent,
|
|
mekVersion: input.mekVersion,
|
|
encDek: input.dek,
|
|
dekVersion: input.dekVersion,
|
|
encName: toCiphertext(input.name, input.nameIv),
|
|
});
|
|
}),
|
|
|
|
rename: roleProcedure["activeClient"]
|
|
.input(
|
|
z.object({
|
|
id: IdSchema,
|
|
dekVersion: z.date(),
|
|
...EncryptedNameSchema,
|
|
}),
|
|
)
|
|
.mutation(async ({ ctx, input }) => {
|
|
await DirectoryService.renameDirectory(
|
|
ctx.session.userId,
|
|
input.id,
|
|
input.dekVersion,
|
|
toCiphertext(input.name, input.nameIv),
|
|
);
|
|
}),
|
|
|
|
delete: roleProcedure["activeClient"]
|
|
.input(
|
|
z.object({
|
|
id: IdSchema,
|
|
}),
|
|
)
|
|
.mutation(async ({ ctx, input }) => {
|
|
const { deletedFileIds } = await DirectoryService.deleteDirectory(
|
|
ctx.session.userId,
|
|
input.id,
|
|
);
|
|
return { deletedFiles: deletedFileIds };
|
|
}),
|
|
});
|
|
|
|
export default directoryRouter;
|