* add endpoint to fetch managed user from client id * update typings * minor tweaks * custom hook to fetch managed users from client id * add translations for platform onboarding * add isPlatformOrg boolean to figure out which is platform and which is not * set isPlatform hook based on data obtained from org * add limitWidth prop to control component width * add props to shell to make sidebar display different tabs based on if the shell isPlattform or not * platform related pages * fix merge conflicts * fix merge conflicts * platform oauth client form and card * remove everything related to platform from organization * update oauth client card and form * fixup * fix imports and remove logs * fixup * update redirect url * split oauth client form into separate update and create forms * separate forms for create and edit oauth clients * fixup * fixup * dynamic routes for oauth client edit page * fixup fixup * fix to not show error when redirect uri is empty * refactor create handler for org * cleaup comments * add custom hook to check user billing * export managed user type * refactor platform index page * refactor edit and create pages * dashboard component containing oauth client list and managed user * common oauth client form used for create and edit form * platform pricing helper * platform pricing component * fix typing and data response for billing * use custom hook to check team billing info * fix type checks * upgrade conditional rendering for upgrade to org banner * add isLoading prop to check button loading state * pass in button handler * add custom hook to subscribe to stripe and typings * update typings * fix incorrect endpoint * pass in team id as prop * fix type check * update stripe success and cancel redirect url * add and pass redirect url param to custom hook * custom hooks for platform * cleanup * update imports * fix merge conflicts * fixup * fixup fixup * fixup * merge conflicts fixup * merge conlficts battle :( * minor fixes * skip admin checks for a platform client * fix typo * append slug with _platform for a platform user * PR feedback * dashboard refactor * bring back org form to its orginal state * add platform folder to ee * update typings * use new create platform form * fixup * fix typo and update plans * simplifying rendering * remove managed users endpoint since it already exists * url for endpoint * rename tabs * pr feedback * managed users endpoint * update endpoint * remove form --------- Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com> Co-authored-by: exception <erik@erosemberg.com> Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com> Co-authored-by: Keith Williams <keithwillcode@gmail.com> Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Organizations feature
From the Original RFC:
We want to create organisations within Cal.com to enable people to easily and effectively manage multiple teams. An organisation will live above the current teams layer.
App setup
-
Log in as admin and in Settings, turn on Organizations feature flag under Features section. Organizations feature has an operational feature flag in order to turn on the entire feature.
-
Set the following environment variables as described:
CALCOM_LICENSE_KEY: Since Organizations is an EE feature, a license key should be present, either as this environment variable or visiting as an Admin/auth/setup. To get a license key you should visit Cal Console (prod or dev)NEXT_PUBLIC_WEBAPP_URL: In case of local development, this variable should be set tohttps://app.cal.local:3000to be able to handle subdomains correctly in terms of authentication and cookiesNEXTAUTH_URL: Should be equal toNEXT_PUBLIC_WEBAPP_URLwhich ishttps://app.cal.local:3000NEXTAUTH_COOKIE_DOMAIN: In case of local development, this variable should be set to.cal.localto be able to accept session cookies in subdomains as well otherwise it should be set to the corresponding environment such as.cal.dev,.cal.qaor.cal.com. If you choose another subdomain, the value for this should match the apex domain ofNEXT_PUBLIC_WEBAPP_URLwith a leading dot (.)ORGANIZATIONS_ENABLED: Should be set to1ortrueSTRIPE_ORG_MONTHLY_PRICE_ID: For dev and all testing should be set to your own testing key. Or ask for the shared key if you're a core member.ORGANIZATIONS_AUTOLINK: Optional. Set to1ortrueto let new signed-up users using Google external provider join the corresponding organization based on the email domain name.
-
Add
app.cal.localto your host file, either:sudo npx hostile app.cal.local- Add it yourself
-
Add
acme.cal.localto host file given that the org create for it will beacme, otherwise do this for whatever slug will be assigned to the org. This is needed to test org-related public URLs, such as sub-teams, members and event-types. -
Be sure to be logged in with any type of user and visit
/settings/organizations/newand follow setup steps with the slug matching the org slug from step 3 -
Log in as admin and go to Settings and under Organizations you will need to accept the newly created organization in order to be operational
-
After finishing the org creation, you will be automatically logged in as the owner of the organization, and the app will be shown in organization mode
Note
Browsers do not allow camera/mic access on any non-HTTPS hosts except for localhost. To test cal video organization meeting links locally (app.cal.local/video/[uid]). You can access the meeting link by replacing app.cal.local with localhost in the URL.
For eg:- Use http://localhost:3000/video/nAjnkjejuzis99NhN72rGt instead of http://app.cal.local:3000/video/nAjnkjejuzis99NhN72rGt.
To get an HTTPS URL for localhost, you can use a tunneling tool such as ngrok or Tunnelmole . Alternatively, you can generate an SSL certificate for your local domain using mkcert. Turn off any SSL certificate validation in your HTTPS client (be sure to do this for local only, otherwise its a security risk).
Tunnelmole - Open Source Tunnelling Tool:
To install Tunnelmole, execute the command:
curl -O https://install.tunnelmole.com/8dPBw/install && sudo bash install
After a successful installation, you can run Tunnelmole using the following command, replacing 8000 with your actual port number if it is different:
tmole 8000
In the output, you'll see two URLs, one HTTP and an HTTPS URL. For privacy and security reasons, it is recommended to use the HTTPS URL.
View the Tunnelmole README for additional information and other installation methods such as npm or building your own binaries from source.
ngrok - Closed Source Tunnelling Tool:
ngrok is a popular closed source tunneling tool. You can run ngrok using the same port, using the format ngrok http <port> replacing <port> with your actual port number. For example:
ngrok http 8000
This will generate a public URL that you can use to access your localhost server.
DNS setup
When a new organization is created, other than not being verified up until the admin accepts it in settings as explained in step 6, a flag gets created that marks the organization as missing DNS setup. That flag get auto-checked by the system upon organization creation when the Cal instance is deployed in Vercel and the subdomain registration was successful. Logging in as admin and going to Settings > Organizations section, you will see that flag as a badge, designed to give admins a glimpe on what is pending in terms of making an organization work. Alongside the mentioned badge, an email gets sent to admins in order to warn them there is a pending action about setting up DNS for the newly created organization to work.