api auth and todo

This commit is contained in:
Timur Ercan
2023-01-20 10:23:40 +01:00
parent 64da658be1
commit 4def9738ea
6 changed files with 47 additions and 33 deletions

View File

@ -4,24 +4,13 @@ import { NextApiRequest, NextApiResponse } from "next";
import { getToken } from "next-auth/jwt"; import { getToken } from "next-auth/jwt";
import { useSession } from "next-auth/react"; import { useSession } from "next-auth/react";
import { buffer } from "stream/consumers"; import { buffer } from "stream/consumers";
import { getUserFromToken } from "@documenso/lib/server";
async function postHandler(req: NextApiRequest, res: NextApiResponse) { async function postHandler(req: NextApiRequest, res: NextApiResponse) {
// todo move token validation to import let user = await getUserFromToken(req, res);
const token = await getToken({ req }); if (!user) return;
const tokenEmail = token?.email?.toString();
if (!token) {
res.status(401).end();
}
let user = await prisma.user.findFirst({ await prisma.document
where: { email: tokenEmail },
});
if (!user) {
res.status(401).end();
} else {
let newDocument: any;
newDocument = await prisma.document
.create({ .create({
data: { data: {
userId: user?.id, userId: user?.id,
@ -30,19 +19,11 @@ async function postHandler(req: NextApiRequest, res: NextApiResponse) {
.then(async () => { .then(async () => {
return res.status(201).end(); return res.status(201).end();
}); });
}
} }
async function getHandler(req: NextApiRequest, res: NextApiResponse) { async function getHandler(req: NextApiRequest, res: NextApiResponse) {
const token = await getToken({ req }); let user = await getUserFromToken(req, res);
const tokenEmail = token?.email?.toString(); if (!user) return;
if (!token) {
res.status(401).end();
}
let user = await prisma.user.findFirst({
where: { email: tokenEmail },
});
return res return res
.status(200) .status(200)

View File

View File

@ -0,0 +1,2 @@
// nodemailer
// sendgrid

View File

@ -0,0 +1,30 @@
import prisma from "@documenso/prisma";
import { User as PrismaUser } from "@prisma/client";
import { NextApiRequest, NextApiResponse } from "next";
import { getToken } from "next-auth/jwt";
export async function getUserFromToken(
req: NextApiRequest,
res: NextApiResponse
): Promise<PrismaUser | null> {
const token = await getToken({ req });
const tokenEmail = token?.email?.toString();
if (!token) {
res.status(401).send("No token found for request.");
return null;
}
if (!tokenEmail) {
res.status(400).send("No email found in token.");
return null;
}
let user = await prisma.user.findFirst({
where: { email: tokenEmail },
});
if (user) return user;
if (!user) res.status(401).send("No user found for token.");
return null;
}

View File

@ -2,3 +2,4 @@ export { defaultHandler } from "./defaultHandler";
export { defaultResponder } from "./defaultResponder"; export { defaultResponder } from "./defaultResponder";
export { HttpError } from "./http-error"; export { HttpError } from "./http-error";
export { getServerErrorFromUnknown } from "./getServerErrorFromUnknown"; export { getServerErrorFromUnknown } from "./getServerErrorFromUnknown";
export { getUserFromToken } from "./getUserFromToken";