fix: update meeting token if expired (#17096)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user