fix: update meeting token if expired (#17096)

This commit is contained in:
Udit Takkar
2024-10-15 10:41:18 -07:00
committed by GitHub
parent a48d190af3
commit 0b914bef79
3 changed files with 55 additions and 3 deletions
+14 -2
View File
@@ -4,6 +4,7 @@ import type { GetServerSidePropsContext } from "next";
import {
generateGuestMeetingTokenFromOwnerMeetingToken,
setEnableRecordingUIAndUserIdForOrganizer,
updateMeetingTokenIfExpired,
} from "@calcom/app-store/dailyvideo/lib/VideoApiAdapter";
import { getServerSession } from "@calcom/features/auth/lib/getServerSession";
import { getCalVideoReference } from "@calcom/features/get-cal-video-reference";
@@ -78,10 +79,21 @@ export async function getServerSideProps(context: GetServerSidePropsContext) {
const oldVideoReference = getCalVideoReference(bookingObj.references);
const endTime = new Date(booking.endTime);
const fourteenDaysAfter = new Date(endTime.getTime() + 14 * 24 * 60 * 60 * 1000);
const epochTimeFourteenDaysAfter = Math.floor(fourteenDaysAfter.getTime() / 1000);
const videoReferencePassword = await updateMeetingTokenIfExpired({
bookingReferenceId: oldVideoReference.id,
roomName: oldVideoReference.uid,
meetingToken: oldVideoReference.meetingPassword,
exp: epochTimeFourteenDaysAfter,
});
// set meetingPassword for guests
if (session?.user.id !== bookingObj.user?.id) {
const guestMeetingPassword = await generateGuestMeetingTokenFromOwnerMeetingToken(
oldVideoReference.meetingPassword,
videoReferencePassword,
session?.user.id
);
@@ -93,7 +105,7 @@ export async function getServerSideProps(context: GetServerSidePropsContext) {
else {
const meetingPassword = await setEnableRecordingUIAndUserIdForOrganizer(
oldVideoReference.id,
oldVideoReference.meetingPassword,
videoReferencePassword,
session?.user.id
);
if (!!meetingPassword) {
@@ -98,6 +98,46 @@ async function processTranscriptsInBatches(transcriptIds: Array<string>) {
return allTranscriptsAccessLinks;
}
export const updateMeetingTokenIfExpired = async ({
bookingReferenceId,
meetingToken,
roomName,
exp,
}: {
bookingReferenceId: number;
meetingToken: string | null;
roomName: string;
exp: number;
}) => {
if (!meetingToken) return null;
try {
await fetcher(`/meeting-tokens/${meetingToken}`).then(ZGetMeetingTokenResponseSchema.parse);
} catch (err) {
const organizerMeetingToken = await postToDailyAPI("/meeting-tokens", {
properties: {
room_name: roomName,
exp: exp,
enable_recording_ui: false,
is_owner: true,
},
}).then(meetingTokenSchema.parse);
await prisma.bookingReference.update({
where: {
id: bookingReferenceId,
},
data: {
meetingPassword: organizerMeetingToken.token,
},
});
return organizerMeetingToken.token;
}
return meetingToken;
};
export const generateGuestMeetingTokenFromOwnerMeetingToken = async (
meetingToken: string | null,
userId?: number
+1 -1
View File
@@ -65,6 +65,6 @@ export const ZGetMeetingTokenResponseSchema = z
room_name: z.string(),
exp: z.number(),
enable_recording_ui: z.boolean().optional(),
user_id: z.number().optional(),
user_id: z.number().nullable().optional(),
})
.passthrough();