From bc8623edb8e5633e13cdb457b04f794947afac80 Mon Sep 17 00:00:00 2001 From: Agusti Fernandez Pardo Date: Mon, 5 Sep 2022 21:01:55 +0200 Subject: [PATCH 1/3] feat: adds me endpoint that returns session info --- pages/api/me.ts | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 pages/api/me.ts diff --git a/pages/api/me.ts b/pages/api/me.ts new file mode 100644 index 0000000000..c66f6919ec --- /dev/null +++ b/pages/api/me.ts @@ -0,0 +1,21 @@ +import type { NextApiRequest, NextApiResponse } from "next"; + +import { ensureSession } from "@calcom/lib/auth"; +import { defaultHandler, defaultResponder } from "@calcom/lib/server"; + +import { User } from ".prisma/client"; + +async function handler( + req: NextApiRequest, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + _res: NextApiResponse +): Promise<{ error?: string; user?: Partial }> { + const session = await ensureSession({ req }); + /* Only admins can opt-in to V2 for now */ + if (!session) return { error: "You need to be logged in" }; + return { user: { ...session.user, email: session.user.email || "" } }; +} + +export default defaultHandler({ + GET: Promise.resolve({ default: defaultResponder(handler) }), +}); From 4d74a6c896bde9ba226b4be6849c8902c230c148 Mon Sep 17 00:00:00 2001 From: Agusti Fernandez Pardo Date: Mon, 5 Sep 2022 21:16:45 +0200 Subject: [PATCH 2/3] feat: dont use ensureSession, but userId from req --- pages/api/me.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/pages/api/me.ts b/pages/api/me.ts index c66f6919ec..e6b1130b63 100644 --- a/pages/api/me.ts +++ b/pages/api/me.ts @@ -1,6 +1,5 @@ import type { NextApiRequest, NextApiResponse } from "next"; -import { ensureSession } from "@calcom/lib/auth"; import { defaultHandler, defaultResponder } from "@calcom/lib/server"; import { User } from ".prisma/client"; @@ -10,10 +9,10 @@ async function handler( // eslint-disable-next-line @typescript-eslint/no-unused-vars _res: NextApiResponse ): Promise<{ error?: string; user?: Partial }> { - const session = await ensureSession({ req }); - /* Only admins can opt-in to V2 for now */ - if (!session) return { error: "You need to be logged in" }; - return { user: { ...session.user, email: session.user.email || "" } }; + if (!prisma) return { error: "Cant connect to database" }; + const user = await prisma.user.findUniqueOrThrow({ where: { id: req.userId } }); + if (!user) return { error: "You need to pass apiKey" }; + return { user }; } export default defaultHandler({ From 731288bcb6d298f7638be46b1a8be967206e55ba Mon Sep 17 00:00:00 2001 From: Agusti Fernandez Pardo Date: Mon, 5 Sep 2022 21:31:12 +0200 Subject: [PATCH 3/3] fix: use middleware, refactor into _get --- pages/api/me.ts | 20 -------------------- pages/api/me/_get.ts | 21 +++++++++++++++++++++ pages/api/me/index.ts | 9 +++++++++ 3 files changed, 30 insertions(+), 20 deletions(-) delete mode 100644 pages/api/me.ts create mode 100644 pages/api/me/_get.ts create mode 100644 pages/api/me/index.ts diff --git a/pages/api/me.ts b/pages/api/me.ts deleted file mode 100644 index e6b1130b63..0000000000 --- a/pages/api/me.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { NextApiRequest, NextApiResponse } from "next"; - -import { defaultHandler, defaultResponder } from "@calcom/lib/server"; - -import { User } from ".prisma/client"; - -async function handler( - req: NextApiRequest, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - _res: NextApiResponse -): Promise<{ error?: string; user?: Partial }> { - if (!prisma) return { error: "Cant connect to database" }; - const user = await prisma.user.findUniqueOrThrow({ where: { id: req.userId } }); - if (!user) return { error: "You need to pass apiKey" }; - return { user }; -} - -export default defaultHandler({ - GET: Promise.resolve({ default: defaultResponder(handler) }), -}); diff --git a/pages/api/me/_get.ts b/pages/api/me/_get.ts new file mode 100644 index 0000000000..7fe25139a8 --- /dev/null +++ b/pages/api/me/_get.ts @@ -0,0 +1,21 @@ +import type { NextApiRequest } from "next"; + +import { defaultHandler, defaultResponder } from "@calcom/lib/server"; + +import { schemaUserReadPublic } from "@lib/validations/user"; + +import { User } from ".prisma/client"; + +async function handler(req: NextApiRequest): Promise<{ error?: string; user?: Partial }> { + if (!prisma) return { error: "Cant connect to database" }; + console.log(req); + if (!req.userId) return { error: "No user id found" }; + const data = await prisma.user.findUniqueOrThrow({ where: { id: req.userId } }); + if (!data) return { error: "You need to pass apiKey" }; + const user = schemaUserReadPublic.parse(data); + return { user }; +} + +export default defaultHandler({ + GET: Promise.resolve({ default: defaultResponder(handler) }), +}); diff --git a/pages/api/me/index.ts b/pages/api/me/index.ts new file mode 100644 index 0000000000..fe6357f6bc --- /dev/null +++ b/pages/api/me/index.ts @@ -0,0 +1,9 @@ +import { defaultHandler } from "@calcom/lib/server"; + +import { withMiddleware } from "@lib/helpers/withMiddleware"; + +export default withMiddleware("HTTP_GET")( + defaultHandler({ + GET: import("./_get"), + }) +);