From 6301ea16f83999e0ba7e6753559cd742d57202bb Mon Sep 17 00:00:00 2001 From: GitStart <1501599+gitstart@users.noreply.github.com> Date: Wed, 3 Aug 2022 00:22:21 +0530 Subject: [PATCH] Avoid duplicating any video credential (#3593) Co-authored-by: gitstart Co-authored-by: alannnc --- .../app-store/tandemvideo/api/callback.ts | 20 ++++++++++++++ packages/app-store/zoomvideo/api/callback.ts | 26 +++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/packages/app-store/tandemvideo/api/callback.ts b/packages/app-store/tandemvideo/api/callback.ts index 66c2a701e8..7bf4fb62b7 100644 --- a/packages/app-store/tandemvideo/api/callback.ts +++ b/packages/app-store/tandemvideo/api/callback.ts @@ -34,6 +34,26 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) const responseBody = await result.json(); + const userId = req.session?.user.id; + if (!userId) { + return res.status(404).json({ message: "No user found" }); + } + + const existingCredentialTandemVideo = await prisma.credential.findMany({ + select: { + id: true, + }, + where: { + type: "tandem_video", + userId: req.session?.user.id, + appId: "tandem", + }, + }); + + const credentialIdsToDelete = existingCredentialTandemVideo.map((item) => item.id); + if (credentialIdsToDelete.length > 0) { + await prisma.credential.deleteMany({ where: { id: { in: credentialIdsToDelete }, userId } }); + } if (result.ok) { responseBody.expiry_date = Math.round(Date.now() + responseBody.expires_in * 1000); delete responseBody.expires_in; diff --git a/packages/app-store/zoomvideo/api/callback.ts b/packages/app-store/zoomvideo/api/callback.ts index add2025081..fbe7b6fd2a 100644 --- a/packages/app-store/zoomvideo/api/callback.ts +++ b/packages/app-store/zoomvideo/api/callback.ts @@ -26,6 +26,32 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) responseBody.expiry_date = Math.round(Date.now() + responseBody.expires_in * 1000); delete responseBody.expires_in; + const userId = req.session?.user.id; + if (!userId) { + return res.status(404).json({ message: "No user found" }); + } + /** + * With this we take care of no duplicate zoom_video key for a single user + * when creating a video room we only do findFirst so the if they have more than 1 + * others get ignored + * */ + const existingCredentialZoomVideo = await prisma.credential.findMany({ + select: { + id: true, + }, + where: { + type: "zoom_video", + userId: req.session?.user.id, + appId: "zoom", + }, + }); + + // Making sure we only delete zoom_video + const credentialIdsToDelete = existingCredentialZoomVideo.map((item) => item.id); + if (credentialIdsToDelete.length > 0) { + await prisma.credential.deleteMany({ where: { id: { in: credentialIdsToDelete }, userId } }); + } + await prisma.user.update({ where: { id: req.session?.user.id,