diff --git a/src/lib/server/db/client.ts b/src/lib/server/db/client.ts index 6dcf925..0554002 100644 --- a/src/lib/server/db/client.ts +++ b/src/lib/server/db/client.ts @@ -21,12 +21,8 @@ export const createUserClient = async (userId: number, clientId: number) => { await db.insert(userClient).values({ userId, clientId }).execute(); }; -export const getAllValidUserClients = async (userId: number) => { - return await db - .select() - .from(userClient) - .where(and(eq(userClient.userId, userId), eq(userClient.state, "active"))) - .execute(); +export const getAllUserClients = async (userId: number) => { + return await db.select().from(userClient).where(eq(userClient.userId, userId)).execute(); }; export const getUserClient = async (userId: number, clientId: number) => { diff --git a/src/lib/server/services/client.ts b/src/lib/server/services/client.ts index 0d3448b..b2848c6 100644 --- a/src/lib/server/services/client.ts +++ b/src/lib/server/services/client.ts @@ -6,6 +6,7 @@ import { createClient, getClientByPubKey, createUserClient, + getAllUserClients, getUserClient, createUserClientChallenge, getUserClientChallenge, @@ -13,6 +14,16 @@ import { } from "$lib/server/db/client"; import env from "$lib/server/loadenv"; +export const getUserClientList = async (userId: number) => { + const userClients = await getAllUserClients(userId); + return { + userClients: userClients.map(({ clientId, state }) => ({ + id: clientId, + state, + })), + }; +}; + const expiresIn = ms(env.challenge.pubKeyExp); const expiresAt = () => new Date(Date.now() + expiresIn); diff --git a/src/lib/server/services/mek.ts b/src/lib/server/services/mek.ts index d67f52d..71a5b33 100644 --- a/src/lib/server/services/mek.ts +++ b/src/lib/server/services/mek.ts @@ -1,5 +1,5 @@ import { error } from "@sveltejs/kit"; -import { getAllValidUserClients } from "$lib/server/db/client"; +import { getAllUserClients } from "$lib/server/db/client"; import { getAllValidClientMeks, getActiveMek, @@ -23,11 +23,12 @@ export const registerNewActiveMek = async ( createdBy: number, clientMeks: ClientMek[], ) => { - const userClients = await getAllValidUserClients(userId); + const userClients = await getAllUserClients(userId); + const activeUserClients = userClients.filter(({ state }) => state === "active"); if ( - clientMeks.length !== userClients.length || + clientMeks.length !== activeUserClients.length || !clientMeks.every((clientMek) => - userClients.some((userClient) => userClient.clientId === clientMek.clientId), + activeUserClients.some((userClient) => userClient.clientId === clientMek.clientId), ) ) { error(400, "Invalid key list"); diff --git a/src/routes/api/client/list/+server.ts b/src/routes/api/client/list/+server.ts new file mode 100644 index 0000000..7769658 --- /dev/null +++ b/src/routes/api/client/list/+server.ts @@ -0,0 +1,10 @@ +import { json } from "@sveltejs/kit"; +import { authenticate } from "$lib/server/modules/auth"; +import { getUserClientList } from "$lib/server/services/client"; +import type { RequestHandler } from "@sveltejs/kit"; + +export const GET: RequestHandler = async ({ cookies }) => { + const { userId } = authenticate(cookies); + const { userClients } = await getUserClientList(userId); + return json({ clients: userClients }); +};