-
Notifications
You must be signed in to change notification settings - Fork 8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: add BigBlueButton integration #10803
Conversation
@nicktrn is attempting to deploy a commit to the cal Team on Vercel. A member of the Team first needs to authorize it. |
The latest updates on your projects. Learn more about Vercel for Git ↗︎
|
Thank you for following the naming conventions! 🙏 Feel free to join our discord and post your PR link to collect XP and win prizes! |
📦 Next.js Bundle Analysis for @calcom/webThis analysis was generated by the Next.js Bundle Analysis action. 🤖 New Pages AddedThe following pages were added to the bundle from the code in this PR:
|
type: appConfig.type, | ||
id: event.uid, | ||
password: "", | ||
url: `${WEBAPP_URL}/booking/${event.uid}/join/{ATTENDEE_HASH}`, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not a typo. This is a template. Links need to be unique per attendee so we can link their details to the respective BBB session. Otherwise the same session will be joined and other participants with the same link removed from the call.
For organizers, the Cal.com session details are used. Links without the hash will be sent and displayed.
import logger from "@calcom/lib/logger"; | ||
|
||
const xmlParser = new XMLParser({ | ||
ignoreDeclaration: true, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Cleaner output for zod parsing.
}); | ||
|
||
const instance = axios.create({ | ||
timeout: 10_000, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Got a timeout with 5s during dev, maybe slow test server, but best to be safe. Anything is better than no timeout by default.
], | ||
}); | ||
instance.interceptors.request.use((config) => { | ||
logger.debug(`[${config.method?.toUpperCase()}] ${config.url}`); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Useful for debugging.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let's use a child logger here instead which has a prefix of BBB app. Would be useful in knowing where the log came from.
.object({ | ||
url: z.string().url(), | ||
secret: z.string(), | ||
hash: z.enum(["sha1", "sha256", "sha384", "sha512"]), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would love to enforce sha512
here but this is up to the respective BBB server admins.
} | ||
} | ||
|
||
getSignedJoinMeetingUrl(meetingId: string, fullName: string, role: MeetingRole, redirect = true) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This returns a signed request, ready to be sent to the BBB server. The idea is for user clients to send this themselves. They will then get redirected to the meeting (after a session cookie is set in the response).
redirect: String(redirect), | ||
role, | ||
// disables cookie requirement - anyone can join with just the url we get in the reponse | ||
allowRequestsWithoutSession: "true", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is not currently used anywhere, but a good option to have if we ever want to redirect users directly and make the join request for them.
@@ -20,7 +20,7 @@ export const BaseScheduledEmail = ( | |||
calEvent: CalendarEvent; | |||
attendee: Person; | |||
timeZone: string; | |||
includeAppsStatus?: boolean; | |||
isOrganizer?: boolean; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
App status is only included for organizers. Seemed unnecessary to add another prop.
edit: Thought of renaming as also includes team members, but this is only set to true
for "Organizer" emails.
This is Fred Dixon, Product Manager for BigBlueButton and Co-founder of BigBlueButton Inc. Let us know if there is any assistance we can provide. Regards,... Fred |
Thanks @ffdixon! I think everything is fine from the BigBlueButton side. The holdup here was mainly re Cal.com internals and integration security. @hariombalhara's review comments from #10803 (comment) and my reply with some ideas #10803 (comment) still hold. Sadly, I don't currently have time to carry on, but this could easily be taken up by a keen contributor. |
hello guys it would be really appreciated if this work continue. having big blue button in cal.com is amazing |
Hello guys, I would like to work on this issue, should I start building asap or is there something which I should beforehand ? |
@giteshsarvaiya feel free to pick up where @nicktrn left off 🙏🏼 |
What does this PR do?
As much a new integration as a POC for templated meeting links and redirects.
/booking/<uid>/join/<hash>
Todo:
Fixes #1985
/claim #1985
Demo
bbb-install.webm
bbb-demo.webm
Type of change
How should this be tested?
Credentials for testing
endpoint:
https://test-install.blindsidenetworks.com/bigbluebutton/api
secret:
8cd8ef52e8e101574e400365b55e11a6
hash:
sha1
Mandatory Tasks
Checklist