mirror of
https://github.com/kmc7468/arkvault.git
synced 2026-11-04 08:10:28 +09:00
42 lines
1.1 KiB
TypeScript
42 lines
1.1 KiB
TypeScript
import { TRPCError } from "@trpc/server";
|
|
import { z } from "zod";
|
|
import { HskRepo, IntegrityError } from "#lib/server/db/index.js";
|
|
import { router, roleProcedure } from "../init.server";
|
|
|
|
const hskRouter = router({
|
|
list: roleProcedure["activeClient"].query(async ({ ctx }) => {
|
|
const hsks = await HskRepo.getAllValidHsks(ctx.session.userId);
|
|
return hsks.map(({ version, state, mekVersion, encHsk }) => ({
|
|
version,
|
|
state,
|
|
mekVersion,
|
|
hsk: encHsk,
|
|
}));
|
|
}),
|
|
|
|
registerInitial: roleProcedure["activeClient"]
|
|
.input(
|
|
z.object({
|
|
mekVersion: z.int().positive(),
|
|
hsk: z.base64().nonempty(),
|
|
}),
|
|
)
|
|
.mutation(async ({ ctx, input }) => {
|
|
try {
|
|
await HskRepo.registerInitialHsk(
|
|
ctx.session.userId,
|
|
ctx.session.clientId,
|
|
input.mekVersion,
|
|
input.hsk,
|
|
);
|
|
} catch (e) {
|
|
if (e instanceof IntegrityError && e.message === "HSK already registered") {
|
|
throw new TRPCError({ code: "CONFLICT", message: "Initial HSK already registered" });
|
|
}
|
|
throw e;
|
|
}
|
|
}),
|
|
});
|
|
|
|
export default hskRouter;
|