diff --git a/packages/app-store/office365video/api/callback.ts b/packages/app-store/office365video/api/callback.ts index d64b55a443..52cc927611 100644 --- a/packages/app-store/office365video/api/callback.ts +++ b/packages/app-store/office365video/api/callback.ts @@ -65,11 +65,38 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) responseBody.expiry_date = Math.round(+new Date() / 1000 + responseBody.expires_in); // set expiry date in seconds 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 office365_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 existingCredentialOfficeVideo = await prisma.credential.findMany({ + select: { + id: true, + }, + where: { + type: "office365_video", + userId: req.session?.user.id, + appId: "msteams", + }, + }); + + // Making sure we only delete office365_video + const credentialIdsToDelete = existingCredentialOfficeVideo.map((item) => item.id); + if (credentialIdsToDelete.length > 0) { + await prisma.credential.deleteMany({ where: { id: { in: credentialIdsToDelete }, userId } }); + } + await prisma.credential.create({ data: { type: "office365_video", key: responseBody, - userId: req.session?.user.id, + userId, appId: "msteams", }, }); diff --git a/packages/app-store/office365video/lib/VideoApiAdapter.ts b/packages/app-store/office365video/lib/VideoApiAdapter.ts index a70bd03919..b94f3d1514 100644 --- a/packages/app-store/office365video/lib/VideoApiAdapter.ts +++ b/packages/app-store/office365video/lib/VideoApiAdapter.ts @@ -49,7 +49,7 @@ const o365Auth = async (credential: Credential) => { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded" }, body: new URLSearchParams({ - scope: "User.Read Calendars.Read Calendars.ReadWrite", + scope: "User.Read OnlineMeetings.ReadWrite", client_id, refresh_token: refreshToken, grant_type: "refresh_token",