el.xwx.moe/lib/api/isAuthenticatedRequest.ts

48 lines
825 B
TypeScript
Raw Normal View History

import { NextApiRequest } from "next";
import { getToken } from "next-auth/jwt";
import { prisma } from "./db";
type Props = {
req: NextApiRequest;
};
export default async function isAuthenticatedRequest({ req }: Props) {
const token = await getToken({ req });
const userId = token?.id;
if (!userId) {
return null;
}
if (token.exp < Date.now() / 1000) {
return null;
}
// check if token is revoked
const revoked = await prisma.accessToken.findFirst({
where: {
token: token.jti,
revoked: true,
},
});
if (revoked) {
return null;
}
const findUser = await prisma.user.findFirst({
where: {
id: userId,
},
include: {
subscriptions: true,
},
});
if (findUser && !findUser?.subscriptions) {
return null;
}
return findUser;
}