mirror of
https://github.com/documenso/documenso.git
synced 2025-11-10 04:22:32 +10:00
70 lines
1.6 KiB
TypeScript
70 lines
1.6 KiB
TypeScript
import { GetServerSidePropsContext, NextApiRequest, NextApiResponse } from 'next';
|
|
import { headers } from 'next/headers';
|
|
import { NextRequest } from 'next/server';
|
|
|
|
import { getServerSession as getNextAuthServerSession } from 'next-auth';
|
|
import { getToken } from 'next-auth/jwt';
|
|
|
|
import { prisma } from '@documenso/prisma';
|
|
|
|
import { NEXT_AUTH_OPTIONS } from './auth-options';
|
|
|
|
export interface GetServerSessionOptions {
|
|
req: NextApiRequest | GetServerSidePropsContext['req'];
|
|
res: NextApiResponse | GetServerSidePropsContext['res'];
|
|
}
|
|
|
|
export const getServerSession = async ({ req, res }: GetServerSessionOptions) => {
|
|
const session = await getNextAuthServerSession(req, res, NEXT_AUTH_OPTIONS);
|
|
|
|
if (!session || !session.user?.email) {
|
|
return null;
|
|
}
|
|
|
|
const user = await prisma.user.findFirstOrThrow({
|
|
where: {
|
|
email: session.user.email,
|
|
},
|
|
});
|
|
|
|
return user;
|
|
};
|
|
|
|
export const getServerComponentToken = async () => {
|
|
const requestHeaders = Object.fromEntries(headers().entries());
|
|
|
|
const req = new NextRequest('http://example.com', {
|
|
headers: requestHeaders,
|
|
});
|
|
|
|
const token = await getToken({
|
|
req,
|
|
});
|
|
};
|
|
|
|
export const getServerComponentSession = async () => {
|
|
const session = await getNextAuthServerSession(NEXT_AUTH_OPTIONS);
|
|
|
|
if (!session || !session.user?.email) {
|
|
return null;
|
|
}
|
|
|
|
const user = await prisma.user.findFirstOrThrow({
|
|
where: {
|
|
email: session.user.email,
|
|
},
|
|
});
|
|
|
|
return user;
|
|
};
|
|
|
|
export const getRequiredServerComponentSession = async () => {
|
|
const session = await getServerComponentSession();
|
|
|
|
if (!session) {
|
|
throw new Error('No session found');
|
|
}
|
|
|
|
return session;
|
|
};
|