From 4d9127b9dae9bb2b59fd55fe189f3da19362f052 Mon Sep 17 00:00:00 2001 From: Sturdy <91910406+apollo-sturdy@users.noreply.github.com> Date: Tue, 23 Jan 2024 18:59:38 +0100 Subject: [PATCH 01/14] feat: add cal.com --- apps/calcom/config.json | 106 +++++ apps/calcom/data/.env | 0 apps/calcom/docker-compose.yml | 56 +++ apps/calcom/metadata/description.md | 609 ++++++++++++++++++++++++++++ apps/calcom/metadata/logo.jpg | Bin 0 -> 19082 bytes 5 files changed, 771 insertions(+) create mode 100644 apps/calcom/config.json create mode 100644 apps/calcom/data/.env create mode 100644 apps/calcom/docker-compose.yml create mode 100644 apps/calcom/metadata/description.md create mode 100644 apps/calcom/metadata/logo.jpg diff --git a/apps/calcom/config.json b/apps/calcom/config.json new file mode 100644 index 00000000..d09732ea --- /dev/null +++ b/apps/calcom/config.json @@ -0,0 +1,106 @@ +{ + "name": "Cal.com", + "available": true, + "port": 8294, + "exposable": true, + "id": "calcom", + "description": "The open source Calendly successor. You are in charge of your own data, workflow, and appearance.\nCalendly and other scheduling tools are awesome. It made our lives massively easier. We're using it for business meetings, seminars, yoga classes, and even calls with our families. However, most tools are very limited in terms of control and customization.\n That's where Cal.com comes in. Self-hosted or hosted by us. White-label by design. API-driven and ready to be deployed on your own domain. Full control of your events and data.", + "tipi_version": 1, + "version": "3.7.6", + "categories": ["calendar", "social"], + "short_desc": "Scheduling infrastructure for absolutely everyone.", + "author": "cal.com", + "source": "https://github.com/calcom/cal.com", + "website": "https://cal.com/", + "supported_architectures": ["amd64"], + "form_fields": [ + { + "type": "password", + "label": "Next.js Auth secret. Generate one with `openssl rand -base64 32`", + "required": true, + "min": 1, + "max": 1024, + "env_variable": "CALCOM_NEXTAUTH_SECRET" + }, + { + "type": "password", + "label": "Calendso Encryption Key. Encryption key that will be used to encrypt CalDAV credentials, choose a random string, for example with `dd if=/dev/urandom bs=1K count=1 | md5sum`", + "required": true, + "min": 1, + "max": 1024, + "env_variable": "CALENDSO_ENCRYPTION_KEY" + }, + { + "type": "text", + "label": "MS Graph Client ID. Used for the Office 365 / Outlook.com Calendar integration", + "required": false, + "min": 1, + "max": 1024, + "env_variable": "MS_GRAPH_CLIENT_ID" + }, + { + "type": "password", + "label": "MS Graph Client Secret. Used for the Office 365 / Outlook.com Calendar integration", + "required": false, + "min": 1, + "max": 1024, + "env_variable": "MS_GRAPH_CLIENT_SECRET" + }, + { + "type": "text", + "label": "Zoom Client ID. Used for the Zoom integration", + "required": false, + "min": 1, + "max": 1024, + "env_variable": "ZOOM_CLIENT_ID" + }, + { + "type": "password", + "label": "Zoom Client Secret. Used for the Zoom integration", + "required": false, + "min": 1, + "max": 1024, + "env_variable": "ZOOM_CLIENT_SECRET" + }, + { + "type": "email", + "label": "Configures the global From: header whilst sending emails.", + "required": true, + "min": 1, + "max": 1024, + "env_variable": "EMAIL_FROM" + }, + { + "type": "fqdn", + "label": "Email server host (SMTP)", + "required": true, + "min": 1, + "max": 1024, + "env_variable": "EMAIL_SERVER_HOST" + }, + { + "type": "number", + "label": "Email server port (SMTP)", + "required": true, + "min": 1, + "max": 8, + "env_variable": "EMAIL_SERVER_PORT" + }, + { + "type": "password", + "label": "Email server password (SMTP)", + "required": true, + "min": 1, + "max": 1024, + "env_variable": "EMAIL_SERVER_PASSWORD" + }, + { + "type": "text", + "label": "Node.js environment type (production, development, test)", + "required": true, + "min": 1, + "max": 1024, + "env_variable": "CALCOM_NODE_ENV" + } + ] +} diff --git a/apps/calcom/data/.env b/apps/calcom/data/.env new file mode 100644 index 00000000..e69de29b diff --git a/apps/calcom/docker-compose.yml b/apps/calcom/docker-compose.yml new file mode 100644 index 00000000..3b8a0747 --- /dev/null +++ b/apps/calcom/docker-compose.yml @@ -0,0 +1,56 @@ +version: '3.8' + +services: + + calcom: + image: calcom/cal.com + restart: always + ports: + - ${APP_PORT}:3000 + networks: + - tipi_main_network + environment: + - DATABASE_HOST=${POSTGRES_HOST} + - DATABASE_URL=postgresql://${POSTGRES_USERNAME}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}/calcom + - POSTGRES_USER=${POSTGRES_USERNAME} + - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} + - POSTGRES_DB=calcom + - LICENSE=agree + - NEXT_PUBLIC_LICENSE_CONSENT=agree + - NEXT_PUBLIC_WEBAPP_URL=http://${APP_DOMAIN} + - NEXTAUTH_SECRET=${CALCOM_NEXTAUTH_SECRET} + - CALENDSO_ENCRYPTION_KEY=${CALENDSO_ENCRYPTION_KEY} + - MS_GRAPH_CLIENT_ID=${MS_GRAPH_CLIENT_ID} + - MS_GRAPH_CLIENT_SECRET=${MS_GRAPH_CLIENT_SECRET} + - ZOOM_CLIENT_ID=${ZOOM_CLIENT_ID} + - ZOOM_CLIENT_SECRET=${ZOOM_CLIENT_SECRET} + - EMAIL_FROM=${EMAIL_FROM} + - EMAIL_SERVER_HOST=${EMAIL_SERVER_HOST} + - EMAIL_SERVER_PORT=${EMAIL_SERVER_PORT} + - EMAIL_SERVER_PASSWORD=${EMAIL_SERVER_PASSWORD} + - NODE_ENV={CALCOM_NODE_ENV} + labels: + # Main + traefik.enable: true + traefik.http.middlewares.calcom-web-redirect.redirectscheme.scheme: https + traefik.http.services.calcom.loadbalancer.server.port: 3000 + # Web + traefik.http.routers.calcom-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.calcom-insecure.entrypoints: web + traefik.http.routers.calcom-insecure.service: calcom + traefik.http.routers.calcom-insecure.middlewares: calcom-web-redirect + # Websecure + traefik.http.routers.calcom.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.calcom.entrypoints: websecure + traefik.http.routers.calcom.service: calcom + traefik.http.routers.calcom.tls.certresolver: myresolver + # Local domain + traefik.http.routers.calcom-local-insecure.rule: Host(`calcom.${LOCAL_DOMAIN}`) + traefik.http.routers.calcom-local-insecure.entrypoints: web + traefik.http.routers.calcom-local-insecure.service: calcom + traefik.http.routers.calcom-local-insecure.middlewares: calcom-web-redirect + # Local domain secure + traefik.http.routers.calcom-local.rule: Host(`calcom.${LOCAL_DOMAIN}`) + traefik.http.routers.calcom-local.entrypoints: websecure + traefik.http.routers.calcom-local.service: calcom + traefik.http.routers.calcom-local.tls: true diff --git a/apps/calcom/metadata/description.md b/apps/calcom/metadata/description.md new file mode 100644 index 00000000..b2809b6d --- /dev/null +++ b/apps/calcom/metadata/description.md @@ -0,0 +1,609 @@ + +

+ + Logo + + +

Cal.com (formerly Calendso)

+ +

+ The open-source Calendly successor. +
+ Learn more » +
+
+ Discord + · + Website + · + Issues + · + Roadmap +

+

+ +

+ Join Cal.com Discord + Product Hunt + Uptime + Github Stars + Hacker News + License + Commits-per-month + Pricing + Jitsu Tracked + Checkly Availability + + + + + + + +

+ + + +## About the Project + +booking-screen + +# Scheduling infrastructure for absolutely everyone + +The open source Calendly successor. You are in charge +of your own data, workflow, and appearance. + +Calendly and other scheduling tools are awesome. It made our lives massively easier. We're using it for business meetings, seminars, yoga classes, and even calls with our families. However, most tools are very limited in terms of control and customization. + +That's where Cal.com comes in. Self-hosted or hosted by us. White-label by design. API-driven and ready to be deployed on your own domain. Full control of your events and data. + +## Recognition + +#### [Hacker News](https://news.ycombinator.com/from?site=cal.com) + + + Featured on Hacker News + + + + Featured on Hacker News + + +#### [Product Hunt](https://producthunt.com/products/cal-com?utm_source=badge-top-post-badge&utm_medium=badge) + +Cal.com - The open source Calendly alternative | Product Hunt Cal.com - The open source Calendly alternative | Product Hunt Cal.com - The open source Calendly alternative | Product Hunt + +### Built With + +- [Next.js](https://nextjs.org/?ref=cal.com) +- [tRPC](https://trpc.io/?ref=cal.com) +- [React.js](https://reactjs.org/?ref=cal.com) +- [Tailwind CSS](https://tailwindcss.com/?ref=cal.com) +- [Prisma.io](https://prisma.io/?ref=cal.com) +- [Daily.co](https://go.cal.com/daily) + +## Contact us + +Meet our sales team for any commercial inquiries. + +Book us with Cal.com + +## Stay Up-to-Date + +Cal.com officially launched as v.1.0 on the 15th of September 2021 and we've come a long way so far. Watch **releases** of this repository to be notified of future updates: + +![cal-star-github](https://user-images.githubusercontent.com/8019099/154853944-a9e3c999-3da3-4048-b149-b4f73893c6fb.gif) + + + +## Getting Started + +To get a local copy up and running, please follow these simple steps. + +### Prerequisites + +Here is what you need to be able to run Cal.com. + +- Node.js (Version: >=18.x) +- PostgreSQL +- Yarn _(recommended)_ + +> If you want to enable any of the available integrations, you may want to obtain additional credentials for each one. More details on this can be found below under the [integrations section](#integrations). + +## Development + +### Setup + +1. Clone the repo into a public GitHub repository (or fork https://github.com/calcom/cal.com/fork). If you plan to distribute the code, keep the source code public to comply with [AGPLv3](https://github.com/calcom/cal.com/blob/main/LICENSE). To clone in a private repository, [acquire a commercial license](https://cal.com/sales) + + ```sh + git clone https://github.com/calcom/cal.com.git + ``` + + > If you are on Windows, run the following command on `gitbash` with admin privileges:
> `git clone -c core.symlinks=true https://github.com/calcom/cal.com.git`
+ > See [docs](https://cal.com/docs/how-to-guides/how-to-troubleshoot-symbolic-link-issues-on-windows#enable-symbolic-links) for more details. + +2. Go to the project folder + + ```sh + cd cal.com + ``` + +3. Install packages with yarn + + ```sh + yarn + ``` + +4. Set up your `.env` file + + - Duplicate `.env.example` to `.env` + - Use `openssl rand -base64 32` to generate a key and add it under `NEXTAUTH_SECRET` in the `.env` file. + - Use `openssl rand -base64 32` to generate a key and add it under `CALENDSO_ENCRYPTION_KEY` in the `.env` file. + +5. Setup Node + If your Node version does not meet the project's requirements as instructed by the docs, "nvm" (Node Version Manager) allows using Node at the version required by the project: + + ```sh + nvm use + ``` + + You first might need to install the specific version and then use it: + + ```sh + nvm install && nvm use + ``` + + You can install nvm from [here](https://github.com/nvm-sh/nvm). + +#### Quick start with `yarn dx` + +> - **Requires Docker and Docker Compose to be installed** +> - Will start a local Postgres instance with a few test users - the credentials will be logged in the console + +```sh +yarn dx +``` + +#### Development tip + +> Add `NEXT_PUBLIC_DEBUG=1` anywhere in your `.env` to get logging information for all the queries and mutations driven by **tRPC**. + +```sh +echo 'NEXT_PUBLIC_DEBUG=1' >> .env +``` + +#### Gitpod Setup + +1. Click the button below to open this project in Gitpod. + +2. This will open a fully configured workspace in your browser with all the necessary dependencies already installed. + +[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/calcom/cal.com) + +#### Manual setup + +1. Configure environment variables in the `.env` file. Replace ``, ``, ``, and `` with their applicable values + + ``` + DATABASE_URL='postgresql://:@:' + ``` + +
+ If you don't know how to configure the DATABASE_URL, then follow the steps here to create a quick local DB + + 1. [Download](https://www.postgresql.org/download/) and install postgres in your local (if you don't have it already). + + 2. Create your own local db by executing `createDB ` + + 3. Now open your psql shell with the DB you created: `psql -h localhost -U postgres -d ` + + 4. Inside the psql shell execute `\conninfo`. And you will get the following info. + ![image](https://user-images.githubusercontent.com/39329182/236612291-51d87f69-6dc1-4a23-bf4d-1ca1754e0a35.png) + + 5. Now extract all the info and add it to your DATABASE_URL. The url would look something like this + `postgresql://postgres:postgres@localhost:5432/Your-DB-Name`. + +
+ + If you don't want to create a local DB. Then you can also consider using services like railway.app or render. + + - [Setup postgres DB with railway.app](https://docs.railway.app/guides/postgresql) + - [Setup postgres DB with render](https://render.com/docs/databases) + +1. Copy and paste your `DATABASE_URL` from `.env` to `.env.appStore`. + +1. Set up the database using the Prisma schema (found in `packages/prisma/schema.prisma`) + + In a development environment, run: + + ```sh + yarn workspace @calcom/prisma db-migrate + ``` + + In a production environment, run: + + ```sh + yarn workspace @calcom/prisma db-deploy + ``` + +1. Run [mailhog](https://github.com/mailhog/MailHog) to view emails sent during development + + > **_NOTE:_** Required when `E2E_TEST_MAILHOG_ENABLED` is "1" + + ```sh + docker pull mailhog/mailhog + docker run -d -p 8025:8025 -p 1025:1025 mailhog/mailhog + ``` + +1. Run (in development mode) + + ```sh + yarn dev + ``` + +#### Setting up your first user + +##### Approach 1 + +1. Open [Prisma Studio](https://prisma.io/studio) to look at or modify the database content: + + ```sh + yarn db-studio + ``` + +1. Click on the `User` model to add a new user record. +1. Fill out the fields `email`, `username`, `password`, and set `metadata` to empty `{}` (remembering to encrypt your password with [BCrypt](https://bcrypt-generator.com/)) and click `Save 1 Record` to create your first user. + > New users are set on a `TRIAL` plan by default. You might want to adjust this behavior to your needs in the `packages/prisma/schema.prisma` file. +1. Open a browser to [http://localhost:3000](http://localhost:3000) and login with your just created, first user. + +##### Approach 2 + +Seed the local db by running + +```sh +cd packages/prisma +yarn db-seed +``` + +The above command will populate the local db with dummy users. + +### E2E-Testing + +Be sure to set the environment variable `NEXTAUTH_URL` to the correct value. If you are running locally, as the documentation within `.env.example` mentions, the value should be `http://localhost:3000`. + +```sh +# In a terminal just run: +yarn test-e2e + +# To open the last HTML report run: +yarn playwright show-report test-results/reports/playwright-html-report +``` + +#### Resolving issues + +##### E2E test browsers not installed + +Run `npx playwright install` to download test browsers and resolve the error below when running `yarn test-e2e`: + +``` +Executable doesn't exist at /Users/alice/Library/Caches/ms-playwright/chromium-1048/chrome-mac/Chromium.app/Contents/MacOS/Chromium +``` + +### Upgrading from earlier versions + +1. Pull the current version: + + ```sh + git pull + ``` + +1. Check if dependencies got added/updated/removed + + ```sh + yarn + ``` + +1. Apply database migrations by running one of the following commands: + + In a development environment, run: + + ```sh + yarn workspace @calcom/prisma db-migrate + ``` + + (This can clear your development database in some cases) + + In a production environment, run: + + ```sh + yarn workspace @calcom/prisma db-deploy + ``` + +1. Check for `.env` variables changes + + ```sh + yarn predev + ``` + +1. Start the server. In a development environment, just do: + + ```sh + yarn dev + ``` + + For a production build, run for example: + + ```sh + yarn build + yarn start + ``` + +1. Enjoy the new version. + + +## Deployment + +### Docker + +The Docker configuration for Cal.com is an effort powered by people within the community. + +If you want to contribute to the Docker repository, [reply here](https://github.com/calcom/docker/discussions/32). + +The Docker configuration can be found [in our docker repository](https://github.com/calcom/docker). + +Issues with Docker? Find your answer or open a new discussion [here](https://github.com/calcom/docker/discussions) to ask the community. + +Cal.com, Inc. does not provide official support for Docker, but we will accept fixes and documentation. Use at your own risk. + +### Railway + +[![Deploy on Railway](https://railway.app/button.svg)](https://railway.app/new/template/cal) + +You can deploy Cal.com on [Railway](https://railway.app) using the button above. The team at Railway also have a [detailed blog post](https://blog.railway.app/p/calendso) on deploying Cal.com on their platform. + +### Vercel + +Currently Vercel Pro Plan is required to be able to Deploy this application with Vercel, due to limitations on the number of serverless functions on the free plan. + +[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fcalcom%2Fcal.com&env=DATABASE_URL,NEXT_PUBLIC_WEBAPP_URL,NEXTAUTH_URL,NEXTAUTH_SECRET,CRON_API_KEY,CALENDSO_ENCRYPTION_KEY&envDescription=See%20all%20available%20env%20vars&envLink=https%3A%2F%2Fgithub.com%2Fcalcom%2Fcal.com%2Fblob%2Fmain%2F.env.example&project-name=cal&repo-name=cal.com&build-command=cd%20../..%20%26%26%20yarn%20build&root-directory=apps%2Fweb%2F) + +### Render + +[![Deploy to Render](https://render.com/images/deploy-to-render-button.svg)](https://render.com/deploy?repo=https://github.com/calcom/docker) + +### Elestio + +[![Deploy on Elestio](https://pub-da36157c854648669813f3f76c526c2b.r2.dev/deploy-on-elestio-black.png)](https://elest.io/open-source/cal.com) + + + +## Roadmap + +Cal.com Roadmap + +See the [roadmap project](https://cal.com/roadmap) for a list of proposed features (and known issues). You can change the view to see planned tagged releases. + + + +## Repo Activity + + + + + +## Contributing + +Please see our [contributing guide](/CONTRIBUTING.md). + +### Good First Issues + +We have a list of [help wanted](https://github.com/calcom/cal.com/issues?q=is:issue+is:open+label:%22%F0%9F%99%8B%F0%9F%8F%BB%E2%80%8D%E2%99%82%EF%B8%8Fhelp+wanted%22) that contain small features and bugs which have a relatively limited scope. This is a great place to get started, gain experience, and get familiar with our contribution process. + + + +### Bounties + + + + + Bounties of cal + + + + + +### Contributors + + + + + + + +### Translations + +Don't code but still want to contribute? Join our [discord](https://go.cal.com/discord) and join the [#Translate channel](https://discord.com/channels/1125390093386010654/1125398231585661040) and let us know what language you want to translate. + +![ar translation](https://img.shields.io/badge/dynamic/json?color=blue&label=ar&style=flat&logo=crowdin&query=%24.progress.0.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![bg translation](https://img.shields.io/badge/dynamic/json?color=blue&label=bg&style=flat&logo=crowdin&query=%24.progress.1.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![cs translation](https://img.shields.io/badge/dynamic/json?color=blue&label=cs&style=flat&logo=crowdin&query=%24.progress.2.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![de translation](https://img.shields.io/badge/dynamic/json?color=blue&label=de&style=flat&logo=crowdin&query=%24.progress.3.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![el translation](https://img.shields.io/badge/dynamic/json?color=blue&label=el&style=flat&logo=crowdin&query=%24.progress.4.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![en translation](https://img.shields.io/badge/dynamic/json?color=blue&label=en&style=flat&logo=crowdin&query=%24.progress.5.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![es translation](https://img.shields.io/badge/dynamic/json?color=blue&label=es&style=flat&logo=crowdin&query=%24.progress.6.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![es-419 translation](https://img.shields.io/badge/dynamic/json?color=blue&label=es-419&style=flat&logo=crowdin&query=%24.progress.7.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![fr translation](https://img.shields.io/badge/dynamic/json?color=blue&label=fr&style=flat&logo=crowdin&query=%24.progress.8.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![he translation](https://img.shields.io/badge/dynamic/json?color=blue&label=he&style=flat&logo=crowdin&query=%24.progress.9.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![hu translation](https://img.shields.io/badge/dynamic/json?color=blue&label=hu&style=flat&logo=crowdin&query=%24.progress.10.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![it translation](https://img.shields.io/badge/dynamic/json?color=blue&label=it&style=flat&logo=crowdin&query=%24.progress.11.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![ja translation](https://img.shields.io/badge/dynamic/json?color=blue&label=ja&style=flat&logo=crowdin&query=%24.progress.12.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![ko translation](https://img.shields.io/badge/dynamic/json?color=blue&label=ko&style=flat&logo=crowdin&query=%24.progress.13.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![nl translation](https://img.shields.io/badge/dynamic/json?color=blue&label=nl&style=flat&logo=crowdin&query=%24.progress.14.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![no translation](https://img.shields.io/badge/dynamic/json?color=blue&label=no&style=flat&logo=crowdin&query=%24.progress.15.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![pl translation](https://img.shields.io/badge/dynamic/json?color=blue&label=pl&style=flat&logo=crowdin&query=%24.progress.16.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![pt translation](https://img.shields.io/badge/dynamic/json?color=blue&label=pt&style=flat&logo=crowdin&query=%24.progress.17.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![pt-BR translation](https://img.shields.io/badge/dynamic/json?color=blue&label=pt-BR&style=flat&logo=crowdin&query=%24.progress.18.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![ro translation](https://img.shields.io/badge/dynamic/json?color=blue&label=ro&style=flat&logo=crowdin&query=%24.progress.19.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![ru translation](https://img.shields.io/badge/dynamic/json?color=blue&label=ru&style=flat&logo=crowdin&query=%24.progress.20.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![sr translation](https://img.shields.io/badge/dynamic/json?color=blue&label=sr&style=flat&logo=crowdin&query=%24.progress.21.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![sv translation](https://img.shields.io/badge/dynamic/json?color=blue&label=sv&style=flat&logo=crowdin&query=%24.progress.22.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![tr translation](https://img.shields.io/badge/dynamic/json?color=blue&label=tr&style=flat&logo=crowdin&query=%24.progress.23.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![uk translation](https://img.shields.io/badge/dynamic/json?color=blue&label=uk&style=flat&logo=crowdin&query=%24.progress.24.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![vi translation](https://img.shields.io/badge/dynamic/json?color=blue&label=vi&style=flat&logo=crowdin&query=%24.progress.25.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![zh-CN translation](https://img.shields.io/badge/dynamic/json?color=blue&label=zh-CN&style=flat&logo=crowdin&query=%24.progress.26.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) ![zh-TW translation](https://img.shields.io/badge/dynamic/json?color=blue&label=zh-TW&style=flat&logo=crowdin&query=%24.progress.27.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-200011276-1.json) + +## Enabling Content Security Policy + +- Set CSP_POLICY="non-strict" env variable, which enables [Strict CSP](https://web.dev/strict-csp/) except for unsafe-inline in style-src . If you have some custom changes in your instance, you might have to make some code change to make your instance CSP compatible. Right now it enables strict CSP only on login page and on other SSR pages it is enabled in Report only mode to detect possible issues. On, SSG pages it is still not supported. + +## Integrations + +### Obtaining the Google API Credentials + +1. Open [Google API Console](https://console.cloud.google.com/apis/dashboard). If you don't have a project in your Google Cloud subscription, you'll need to create one before proceeding further. Under Dashboard pane, select Enable APIS and Services. +2. In the search box, type calendar and select the Google Calendar API search result. +3. Enable the selected API. +4. Next, go to the [OAuth consent screen](https://console.cloud.google.com/apis/credentials/consent) from the side pane. Select the app type (Internal or External) and enter the basic app details on the first page. +5. In the second page on Scopes, select Add or Remove Scopes. Search for Calendar.event and select the scope with scope value `.../auth/calendar.events`, `.../auth/calendar.readonly` and select Update. +6. In the third page (Test Users), add the Google account(s) you'll be using. Make sure the details are correct on the last page of the wizard and your consent screen will be configured. +7. Now select [Credentials](https://console.cloud.google.com/apis/credentials) from the side pane and then select Create Credentials. Select the OAuth Client ID option. +8. Select Web Application as the Application Type. +9. Under Authorized redirect URI's, select Add URI and then add the URI `/api/integrations/googlecalendar/callback` and `/api/auth/callback/google` replacing Cal.com URL with the URI at which your application runs. +10. The key will be created and you will be redirected back to the Credentials page. Select the newly generated client ID under OAuth 2.0 Client IDs. +11. Select Download JSON. Copy the contents of this file and paste the entire JSON string in the `.env` file as the value for `GOOGLE_API_CREDENTIALS` key. + +#### _Adding google calendar to Cal.com App Store_ + +After adding Google credentials, you can now Google Calendar App to the app store. +You can repopulate the App store by running + +``` +cd packages/prisma +yarn seed-app-store +``` + +You will need to complete a few more steps to activate Google Calendar App. +Make sure to complete section "Obtaining the Google API Credentials". After that do the +following + +1. Add extra redirect URL `/api/auth/callback/google` +1. Under 'OAuth consent screen', click "PUBLISH APP" + +### Obtaining Microsoft Graph Client ID and Secret + +1. Open [Azure App Registration](https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredApps) and select New registration +2. Name your application +3. Set **Who can use this application or access this API?** to **Accounts in any organizational directory (Any Azure AD directory - Multitenant)** +4. Set the **Web** redirect URI to `/api/integrations/office365calendar/callback` replacing Cal.com URL with the URI at which your application runs. +5. Use **Application (client) ID** as the **MS_GRAPH_CLIENT_ID** attribute value in .env +6. Click **Certificates & secrets** create a new client secret and use the value as the **MS_GRAPH_CLIENT_SECRET** attribute + +### Obtaining Zoom Client ID and Secret + +1. Open [Zoom Marketplace](https://marketplace.zoom.us/) and sign in with your Zoom account. +2. On the upper right, click "Develop" => "Build App". +3. On "OAuth", select "Create". +4. Name your App. +5. Choose "User-managed app" as the app type. +6. De-select the option to publish the app on the Zoom App Marketplace. +7. Click "Create". +8. Now copy the Client ID and Client Secret to your `.env` file into the `ZOOM_CLIENT_ID` and `ZOOM_CLIENT_SECRET` fields. +9. Set the Redirect URL for OAuth `/api/integrations/zoomvideo/callback` replacing Cal.com URL with the URI at which your application runs. +10. Also add the redirect URL given above as an allow list URL and enable "Subdomain check". Make sure, it says "saved" below the form. +11. You don't need to provide basic information about your app. Instead click on "Scopes" and then on "+ Add Scopes". On the left, click the category "Meeting" and check the scope `meeting:write`. +12. Click "Done". +13. You're good to go. Now you can easily add your Zoom integration in the Cal.com settings. + +### Obtaining Daily API Credentials + +1. Visit our [Daily.co Partnership Form](https://go.cal.com/daily) and enter your information +2. From within your dashboard, go to the [developers](https://dashboard.daily.co/developers) tab. +3. Copy your API key. +4. Now paste the API key to your `.env` file into the `DAILY_API_KEY` field in your `.env` file. +5. If you have the [Daily Scale Plan](https://daily.co/pricing) set the `DAILY_SCALE_PLAN` variable to `true` in order to use features like video recording. + +### Obtaining Basecamp Client ID and Secret + +1. Visit the [37 Signals Integrations Dashboard](launchpad.37signals.com/integrations) and sign in. +2. Register a new application by clicking the Register one now link. +3. Fill in your company details. +4. Select Basecamp 4 as the product to integrate with. +5. Set the Redirect URL for OAuth `/api/integrations/basecamp3/callback` replacing Cal.com URL with the URI at which your application runs. +6. Click on done and copy the Client ID and secret into the `BASECAMP3_CLIENT_ID` and `BASECAMP3_CLIENT_SECRET` fields. +7. Set the `BASECAMP3_CLIENT_SECRET` env variable to `{your_domain} ({support_email})`. + For example, `Cal.com (support@cal.com)`. + +### Obtaining HubSpot Client ID and Secret + +1. Open [HubSpot Developer](https://developer.hubspot.com/) and sign into your account, or create a new one. +2. From within the home of the Developer account page, go to "Manage apps". +3. Click "Create app" button top right. +4. Fill in any information you want in the "App info" tab +5. Go to tab "Auth" +6. Now copy the Client ID and Client Secret to your `.env` file into the `HUBSPOT_CLIENT_ID` and `HUBSPOT_CLIENT_SECRET` fields. +7. Set the Redirect URL for OAuth `/api/integrations/hubspot/callback` replacing Cal.com URL with the URI at which your application runs. +8. In the "Scopes" section at the bottom of the page, make sure you select "Read" and "Write" for scope called `crm.objects.contacts` +9. Click the "Save" button at the bottom footer. +10. You're good to go. Now you can see any booking in Cal.com created as a meeting in HubSpot for your contacts. + +### Obtaining Webex Client ID and Secret + +[See Webex Readme](./packages/app-store/webex/) + +### Obtaining ZohoCRM Client ID and Secret + +1. Open [Zoho API Console](https://api-console.zoho.com/) and sign into your account, or create a new one. +2. From within the API console page, go to "Applications". +3. Click "ADD CLIENT" button top right and select "Server-based Applications". +4. Fill in any information you want in the "Client Details" tab +5. Go to tab "Client Secret" tab. +6. Now copy the Client ID and Client Secret to your `.env` file into the `ZOHOCRM_CLIENT_ID` and `ZOHOCRM_CLIENT_SECRET` fields. +7. Set the Redirect URL for OAuth `/api/integrations/zohocrm/callback` replacing Cal.com URL with the URI at which your application runs. +8. In the "Settings" section check the "Multi-DC" option if you wish to use the same OAuth credentials for all data centers. +9. Click the "Save"/ "UPDATE" button at the bottom footer. +10. You're good to go. Now you can easily add your ZohoCRM integration in the Cal.com settings. + +### Obtaining Zoho Calendar Client ID and Secret + +[Follow these steps](./packages/app-store/zohocalendar/) + +### Obtaining Zoho Bigin Client ID and Secret + +[Follow these steps](./packages/app-store/zoho-bigin/) + +### Obtaining Pipedrive Client ID and Secret + +[Follow these steps](./packages/app-store/pipedrive-crm/) + +## Workflows + +### Setting up SendGrid for Email reminders + +1. Create a SendGrid account (https://signup.sendgrid.com/) +2. Go to Settings -> API keys and create an API key +3. Copy API key to your `.env` file into the `SENDGRID_API_KEY` field +4. Go to Settings -> Sender Authentication and verify a single sender +5. Copy the verified E-Mail to your `.env` file into the `SENDGRID_EMAIL` field +6. Add your custom sender name to the `.env` file into the `NEXT_PUBLIC_SENDGRID_SENDER_NAME` field (fallback is Cal.com) + +### Setting up Twilio for SMS reminders + +1. Create a Twilio account (https://twilio.com/try-twilio) +2. Click ‘Get a Twilio phone number’ +3. Copy Account SID to your `.env` file into the `TWILIO_SID` field +4. Copy Auth Token to your `.env` file into the `TWILIO_TOKEN` field +5. Copy your Twilio phone number to your `.env` file into the `TWILIO_PHONE_NUMBER` field +6. Add your own sender ID to the `.env` file into the `NEXT_PUBLIC_SENDER_ID` field (fallback is Cal.com) +7. Create a messaging service (Develop -> Messaging -> Services) +8. Choose any name for the messaging service +9. Click 'Add Senders' +10. Choose phone number as sender type +11. Add the listed phone number +12. Leave all other fields as they are +13. Complete setup and click ‘View my new Messaging Service’ +14. Copy Messaging Service SID to your `.env` file into the `TWILIO_MESSAGING_SID` field +15. Create a verify service +16. Copy Verify Service SID to your `.env` file into the `TWILIO_VERIFY_SID` field + + + +## License + +Distributed under the [AGPLv3 License](https://github.com/calcom/cal.com/blob/main/LICENSE). See `LICENSE` for more information. + + + +## Acknowledgements + +Special thanks to these amazing projects which help power Cal.com: + +- [Vercel](https://vercel.com/?utm_source=calend-so&utm_campaign=oss) +- [Next.js](https://nextjs.org/) +- [Day.js](https://day.js.org/) +- [Tailwind CSS](https://tailwindcss.com/) +- [Prisma](https://prisma.io/) + +Cal.com is an [open startup](https://cal.com/open) and [Jitsu](https://github.com/jitsucom/jitsu) (an open-source Segment alternative) helps us to track most of the usage metrics. diff --git a/apps/calcom/metadata/logo.jpg b/apps/calcom/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e773e1d42cb811af9c749d7ec8aad18bd2c67b87 GIT binary patch literal 19082 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 Date: Mon, 29 Jan 2024 14:42:16 +0100 Subject: [PATCH 02/14] feat: update version --- apps/calcom/config.json | 2 +- apps/calcom/docker-compose.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/calcom/config.json b/apps/calcom/config.json index d09732ea..dfa59696 100644 --- a/apps/calcom/config.json +++ b/apps/calcom/config.json @@ -6,7 +6,7 @@ "id": "calcom", "description": "The open source Calendly successor. You are in charge of your own data, workflow, and appearance.\nCalendly and other scheduling tools are awesome. It made our lives massively easier. We're using it for business meetings, seminars, yoga classes, and even calls with our families. However, most tools are very limited in terms of control and customization.\n That's where Cal.com comes in. Self-hosted or hosted by us. White-label by design. API-driven and ready to be deployed on your own domain. Full control of your events and data.", "tipi_version": 1, - "version": "3.7.6", + "version": "3.7.9", "categories": ["calendar", "social"], "short_desc": "Scheduling infrastructure for absolutely everyone.", "author": "cal.com", diff --git a/apps/calcom/docker-compose.yml b/apps/calcom/docker-compose.yml index 3b8a0747..614a59f1 100644 --- a/apps/calcom/docker-compose.yml +++ b/apps/calcom/docker-compose.yml @@ -3,7 +3,7 @@ version: '3.8' services: calcom: - image: calcom/cal.com + image: calcom/cal.com:v3.7.9 restart: always ports: - ${APP_PORT}:3000 From bc70013ff06ab0896c1c51bb9d8d60bc4d3190c7 Mon Sep 17 00:00:00 2001 From: Sturdy <91910406+apollo-sturdy@users.noreply.github.com> Date: Mon, 29 Jan 2024 14:46:46 +0100 Subject: [PATCH 03/14] fix: restart only unless-stopped and add container_name --- apps/calcom/docker-compose.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/calcom/docker-compose.yml b/apps/calcom/docker-compose.yml index 614a59f1..5089c665 100644 --- a/apps/calcom/docker-compose.yml +++ b/apps/calcom/docker-compose.yml @@ -3,8 +3,9 @@ version: '3.8' services: calcom: + container_name: calcom image: calcom/cal.com:v3.7.9 - restart: always + restart: unless-stopped ports: - ${APP_PORT}:3000 networks: From d18be4b8d751841767b7af0901ba38845d348d6e Mon Sep 17 00:00:00 2001 From: Sturdy <91910406+apollo-sturdy@users.noreply.github.com> Date: Wed, 31 Jan 2024 13:54:58 +0100 Subject: [PATCH 04/14] fix: hardcode NODE_ENV to production --- apps/calcom/config.json | 8 -------- apps/calcom/docker-compose.yml | 2 +- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/apps/calcom/config.json b/apps/calcom/config.json index dfa59696..42bfe571 100644 --- a/apps/calcom/config.json +++ b/apps/calcom/config.json @@ -93,14 +93,6 @@ "min": 1, "max": 1024, "env_variable": "EMAIL_SERVER_PASSWORD" - }, - { - "type": "text", - "label": "Node.js environment type (production, development, test)", - "required": true, - "min": 1, - "max": 1024, - "env_variable": "CALCOM_NODE_ENV" } ] } diff --git a/apps/calcom/docker-compose.yml b/apps/calcom/docker-compose.yml index 5089c665..3a285201 100644 --- a/apps/calcom/docker-compose.yml +++ b/apps/calcom/docker-compose.yml @@ -29,7 +29,7 @@ services: - EMAIL_SERVER_HOST=${EMAIL_SERVER_HOST} - EMAIL_SERVER_PORT=${EMAIL_SERVER_PORT} - EMAIL_SERVER_PASSWORD=${EMAIL_SERVER_PASSWORD} - - NODE_ENV={CALCOM_NODE_ENV} + - NODE_ENV=production labels: # Main traefik.enable: true From 0fc5dd5872e0c4854635a037504f149b1aac52b0 Mon Sep 17 00:00:00 2001 From: Sturdy <91910406+apollo-sturdy@users.noreply.github.com> Date: Wed, 31 Jan 2024 13:55:46 +0100 Subject: [PATCH 05/14] fix: Set max value for port to 65535 --- apps/calcom/config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/calcom/config.json b/apps/calcom/config.json index 42bfe571..589a404f 100644 --- a/apps/calcom/config.json +++ b/apps/calcom/config.json @@ -83,7 +83,7 @@ "label": "Email server port (SMTP)", "required": true, "min": 1, - "max": 8, + "max": 65535, "env_variable": "EMAIL_SERVER_PORT" }, { From 88de8f459553399fc22eec2b10d338441cbcccf2 Mon Sep 17 00:00:00 2001 From: Sturdy <91910406+apollo-sturdy@users.noreply.github.com> Date: Wed, 31 Jan 2024 13:57:04 +0100 Subject: [PATCH 06/14] feat: use random value for auth secret --- apps/calcom/config.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/calcom/config.json b/apps/calcom/config.json index 589a404f..0b2f9a83 100644 --- a/apps/calcom/config.json +++ b/apps/calcom/config.json @@ -15,10 +15,10 @@ "supported_architectures": ["amd64"], "form_fields": [ { - "type": "password", - "label": "Next.js Auth secret. Generate one with `openssl rand -base64 32`", + "type": "random", + "label": "Next.js Auth secret", "required": true, - "min": 1, + "min": 50, "max": 1024, "env_variable": "CALCOM_NEXTAUTH_SECRET" }, From 8923e085b1d41ae06a5198b3d9fc768ceefcd867 Mon Sep 17 00:00:00 2001 From: Sturdy <91910406+apollo-sturdy@users.noreply.github.com> Date: Wed, 31 Jan 2024 13:57:24 +0100 Subject: [PATCH 07/14] fix: delete unused .env --- apps/calcom/data/.env | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 apps/calcom/data/.env diff --git a/apps/calcom/data/.env b/apps/calcom/data/.env deleted file mode 100644 index e69de29b..00000000 From f31b83e84a222857ad36e4c9d3a6c1cc96d086f1 Mon Sep 17 00:00:00 2001 From: Sturdy <91910406+apollo-sturdy@users.noreply.github.com> Date: Wed, 31 Jan 2024 14:03:33 +0100 Subject: [PATCH 08/14] feat: add separate postgres instance to calcom --- apps/calcom/docker-compose.yml | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/apps/calcom/docker-compose.yml b/apps/calcom/docker-compose.yml index 3a285201..2c16786d 100644 --- a/apps/calcom/docker-compose.yml +++ b/apps/calcom/docker-compose.yml @@ -10,9 +10,11 @@ services: - ${APP_PORT}:3000 networks: - tipi_main_network + depends_on: + - db-calcom environment: - - DATABASE_HOST=${POSTGRES_HOST} - - DATABASE_URL=postgresql://${POSTGRES_USERNAME}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}/calcom + - DATABASE_HOST=db-calcom + - DATABASE_URL=postgresql://${POSTGRES_USERNAME}:${POSTGRES_PASSWORD}@db-calcom/calcom - POSTGRES_USER=${POSTGRES_USERNAME} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} - POSTGRES_DB=calcom @@ -55,3 +57,16 @@ services: traefik.http.routers.calcom-local.entrypoints: websecure traefik.http.routers.calcom-local.service: calcom traefik.http.routers.calcom-local.tls: true + + db-calcom: + container_name: db-calcom + image: postgres:16.1 + restart: on-failure + volumes: + - ${APP_DATA_DIR}/data/db:/var/lib/postgresql/data + environment: + - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} + - POSTGRES_USER=${POSTGRES_USERNAME} + - POSTGRES_DB=calcom + networks: + - tipi_main_network From a27e0f2ca90eb58ebd269f063d3127126a7e85a4 Mon Sep 17 00:00:00 2001 From: Sturdy <91910406+apollo-sturdy@users.noreply.github.com> Date: Wed, 31 Jan 2024 15:08:51 +0100 Subject: [PATCH 09/14] feat: make calcom encryption key random generated --- apps/calcom/config.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/calcom/config.json b/apps/calcom/config.json index 0b2f9a83..42826579 100644 --- a/apps/calcom/config.json +++ b/apps/calcom/config.json @@ -23,10 +23,10 @@ "env_variable": "CALCOM_NEXTAUTH_SECRET" }, { - "type": "password", + "type": "random", "label": "Calendso Encryption Key. Encryption key that will be used to encrypt CalDAV credentials, choose a random string, for example with `dd if=/dev/urandom bs=1K count=1 | md5sum`", "required": true, - "min": 1, + "min": 32, "max": 1024, "env_variable": "CALENDSO_ENCRYPTION_KEY" }, From 6f6fa54348889bbc1168c2107018776381002568 Mon Sep 17 00:00:00 2001 From: Sturdy <91910406+apollo-sturdy@users.noreply.github.com> Date: Wed, 31 Jan 2024 16:40:42 +0100 Subject: [PATCH 10/14] Revert "feat: make calcom encryption key random generated" This reverts commit f4e1148dadc65379c56c9ce3cde4afe7e7f380de. --- apps/calcom/config.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/calcom/config.json b/apps/calcom/config.json index 42826579..0b2f9a83 100644 --- a/apps/calcom/config.json +++ b/apps/calcom/config.json @@ -23,10 +23,10 @@ "env_variable": "CALCOM_NEXTAUTH_SECRET" }, { - "type": "random", + "type": "password", "label": "Calendso Encryption Key. Encryption key that will be used to encrypt CalDAV credentials, choose a random string, for example with `dd if=/dev/urandom bs=1K count=1 | md5sum`", "required": true, - "min": 32, + "min": 1, "max": 1024, "env_variable": "CALENDSO_ENCRYPTION_KEY" }, From 74d21f7ee135bb132349198350d65a23ced5fd85 Mon Sep 17 00:00:00 2001 From: Sturdy <91910406+apollo-sturdy@users.noreply.github.com> Date: Wed, 31 Jan 2024 16:40:54 +0100 Subject: [PATCH 11/14] Revert "feat: use random value for auth secret" This reverts commit ba6e098ead8b647d6670771df3c3aaf939b3b25d. --- apps/calcom/config.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/calcom/config.json b/apps/calcom/config.json index 0b2f9a83..589a404f 100644 --- a/apps/calcom/config.json +++ b/apps/calcom/config.json @@ -15,10 +15,10 @@ "supported_architectures": ["amd64"], "form_fields": [ { - "type": "random", - "label": "Next.js Auth secret", + "type": "password", + "label": "Next.js Auth secret. Generate one with `openssl rand -base64 32`", "required": true, - "min": 50, + "min": 1, "max": 1024, "env_variable": "CALCOM_NEXTAUTH_SECRET" }, From 83698e7b3b8556c23673b68a80e1190ccae16a33 Mon Sep 17 00:00:00 2001 From: Sturdy <91910406+apollo-sturdy@users.noreply.github.com> Date: Tue, 6 Feb 2024 18:45:37 +0100 Subject: [PATCH 12/14] feat: Add form field for google api credentials --- apps/calcom/config.json | 6 ++++++ apps/calcom/docker-compose.yml | 1 + 2 files changed, 7 insertions(+) diff --git a/apps/calcom/config.json b/apps/calcom/config.json index 589a404f..8fcf2d83 100644 --- a/apps/calcom/config.json +++ b/apps/calcom/config.json @@ -62,6 +62,12 @@ "max": 1024, "env_variable": "ZOOM_CLIENT_SECRET" }, + { + "text": "text", + "label": "Google API Credentials in JSON form. Used for the Google Calendar integration. See https://github.com/calcom/cal.com?tab=readme-ov-file#obtaining-the-google-api-credentials", + "required": false, + "env_variable": "CALCOM_GOOGLE_API_CREDENTIALS" + }, { "type": "email", "label": "Configures the global From: header whilst sending emails.", diff --git a/apps/calcom/docker-compose.yml b/apps/calcom/docker-compose.yml index 2c16786d..57a3d3b3 100644 --- a/apps/calcom/docker-compose.yml +++ b/apps/calcom/docker-compose.yml @@ -27,6 +27,7 @@ services: - MS_GRAPH_CLIENT_SECRET=${MS_GRAPH_CLIENT_SECRET} - ZOOM_CLIENT_ID=${ZOOM_CLIENT_ID} - ZOOM_CLIENT_SECRET=${ZOOM_CLIENT_SECRET} + - GOOGLE_API_CREDENTIALS=${CALCOM_GOOGLE_API_CREDENTIALS} - EMAIL_FROM=${EMAIL_FROM} - EMAIL_SERVER_HOST=${EMAIL_SERVER_HOST} - EMAIL_SERVER_PORT=${EMAIL_SERVER_PORT} From 2f047a834f58ef7cc165411693e82c7b2c382e07 Mon Sep 17 00:00:00 2001 From: Sturdy <91910406+apollo-sturdy@users.noreply.github.com> Date: Tue, 6 Feb 2024 19:14:56 +0100 Subject: [PATCH 13/14] feat: bump calcom version to 3.7.11 --- apps/calcom/config.json | 4 ++-- apps/calcom/docker-compose.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/calcom/config.json b/apps/calcom/config.json index 8fcf2d83..29286311 100644 --- a/apps/calcom/config.json +++ b/apps/calcom/config.json @@ -5,8 +5,8 @@ "exposable": true, "id": "calcom", "description": "The open source Calendly successor. You are in charge of your own data, workflow, and appearance.\nCalendly and other scheduling tools are awesome. It made our lives massively easier. We're using it for business meetings, seminars, yoga classes, and even calls with our families. However, most tools are very limited in terms of control and customization.\n That's where Cal.com comes in. Self-hosted or hosted by us. White-label by design. API-driven and ready to be deployed on your own domain. Full control of your events and data.", - "tipi_version": 1, - "version": "3.7.9", + "tipi_version": 2, + "version": "3.7.11", "categories": ["calendar", "social"], "short_desc": "Scheduling infrastructure for absolutely everyone.", "author": "cal.com", diff --git a/apps/calcom/docker-compose.yml b/apps/calcom/docker-compose.yml index 57a3d3b3..05183e6d 100644 --- a/apps/calcom/docker-compose.yml +++ b/apps/calcom/docker-compose.yml @@ -4,7 +4,7 @@ services: calcom: container_name: calcom - image: calcom/cal.com:v3.7.9 + image: calcom/cal.com:v3.7.11 restart: unless-stopped ports: - ${APP_PORT}:3000 From eec48b79760f073a84539922a1100c42e79f2a53 Mon Sep 17 00:00:00 2001 From: Sturdy <91910406+apollo-sturdy@users.noreply.github.com> Date: Wed, 7 Feb 2024 09:58:59 +0100 Subject: [PATCH 14/14] fix: use https for env var to make google integration work --- apps/calcom/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/calcom/docker-compose.yml b/apps/calcom/docker-compose.yml index 05183e6d..c3be3693 100644 --- a/apps/calcom/docker-compose.yml +++ b/apps/calcom/docker-compose.yml @@ -20,7 +20,7 @@ services: - POSTGRES_DB=calcom - LICENSE=agree - NEXT_PUBLIC_LICENSE_CONSENT=agree - - NEXT_PUBLIC_WEBAPP_URL=http://${APP_DOMAIN} + - NEXT_PUBLIC_WEBAPP_URL=https://${APP_DOMAIN} - NEXTAUTH_SECRET=${CALCOM_NEXTAUTH_SECRET} - CALENDSO_ENCRYPTION_KEY=${CALENDSO_ENCRYPTION_KEY} - MS_GRAPH_CLIENT_ID=${MS_GRAPH_CLIENT_ID}