pangolin/server/auth/checkValidInvite.ts
2024-12-25 15:54:32 -05:00

42 lines
1 KiB
TypeScript

import db from "@server/db";
import { UserInvite, userInvites } from "@server/db/schema";
import { isWithinExpirationDate } from "oslo";
import { verifyPassword } from "./password";
import { eq } from "drizzle-orm";
export async function checkValidInvite({
inviteId,
token
}: {
inviteId: string;
token: string;
}): Promise<{ error?: string; existingInvite?: UserInvite }> {
const existingInvite = await db
.select()
.from(userInvites)
.where(eq(userInvites.inviteId, inviteId))
.limit(1);
if (!existingInvite.length) {
return {
error: "Invite ID or token is invalid"
};
}
if (!isWithinExpirationDate(new Date(existingInvite[0].expiresAt))) {
return {
error: "Invite has expired"
};
}
const validToken = await verifyPassword(token, existingInvite[0].tokenHash);
if (!validToken) {
return {
error: "Invite ID or token is invalid"
};
}
return {
existingInvite: existingInvite[0]
};
}