From 7a6349b4c06bc34fd752bc3fe1da625d145c1a6c Mon Sep 17 00:00:00 2001 From: Leo Giovanetti Date: Tue, 20 Dec 2022 20:00:33 -0300 Subject: [PATCH] [Hotfix] Fixing direct link encoding (#6131) --- apps/web/package.json | 1 + apps/web/pages/booking/direct/[...link].tsx | 8 ++++---- packages/emails/src/components/CallToAction.tsx | 2 +- packages/emails/src/templates/OrganizerRequestEmail.tsx | 8 +++++--- yarn.lock | 5 +++++ 5 files changed, 16 insertions(+), 8 deletions(-) diff --git a/apps/web/package.json b/apps/web/package.json index e02c5a7a05..60d6b96f1c 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -64,6 +64,7 @@ "@vercel/og": "^0.0.21", "accept-language-parser": "^1.5.0", "async": "^3.2.4", + "base64url": "^3.0.1", "bcryptjs": "^2.4.3", "classnames": "^2.3.1", "dotenv-cli": "^6.0.0", diff --git a/apps/web/pages/booking/direct/[...link].tsx b/apps/web/pages/booking/direct/[...link].tsx index 7c6707c8bb..5069c43e32 100644 --- a/apps/web/pages/booking/direct/[...link].tsx +++ b/apps/web/pages/booking/direct/[...link].tsx @@ -1,6 +1,6 @@ import { BookingStatus } from "@prisma/client"; +import base64url from "base64url"; import { createHmac } from "crypto"; -import { instance } from "gaxios"; import { GetServerSidePropsContext } from "next"; import { useRouter } from "next/router"; import { useState } from "react"; @@ -46,13 +46,13 @@ const requestSchema = z.object({ .superRefine((data, ctx) => { refineParse(actionSchema.safeParse(data[0]), ctx); const signedData = `${data[1]}/${data[2]}`; - const sig = createHmac("sha1", CALENDSO_ENCRYPTION_KEY).update(signedData).digest("base64"); + const sha1 = createHmac("sha1", CALENDSO_ENCRYPTION_KEY).update(signedData).digest(); + const sig = base64url(sha1); if (data[3] !== sig) { ctx.addIssue({ message: pageErrors.signature_mismatch, code: "custom", }); - console.log(signedData, data, data[3], "==", sig); } }), reason: z.string().optional(), @@ -175,7 +175,7 @@ export default function Directlink({ booking, reason, status }: inferSSRProps {getRecipientStart("h:mma")} - {getRecipientEnd("h:mma")}{" "} - ({booking.attendees[0].timeZone}) + ({booking?.user?.timeZone}) {(booking?.user || booking?.attendees) && ( <> diff --git a/packages/emails/src/components/CallToAction.tsx b/packages/emails/src/components/CallToAction.tsx index 335bdf5284..31276d89f3 100644 --- a/packages/emails/src/components/CallToAction.tsx +++ b/packages/emails/src/components/CallToAction.tsx @@ -27,7 +27,7 @@ export const CallToAction = (props: { label: string; href: string; secondary?: b target="_blank" rel="noreferrer"> {props.label} - +

); diff --git a/packages/emails/src/templates/OrganizerRequestEmail.tsx b/packages/emails/src/templates/OrganizerRequestEmail.tsx index 87ca96c69b..15ade39ed6 100644 --- a/packages/emails/src/templates/OrganizerRequestEmail.tsx +++ b/packages/emails/src/templates/OrganizerRequestEmail.tsx @@ -1,3 +1,4 @@ +import base64url from "base64url"; import { createHmac } from "crypto"; import { CallToAction, CallToActionTable, Separator } from "../components"; @@ -7,7 +8,8 @@ const CALENDSO_ENCRYPTION_KEY = process.env.CALENDSO_ENCRYPTION_KEY || ""; export const OrganizerRequestEmail = (props: React.ComponentProps) => { const signedData = `${props.attendee.email}/${props.calEvent.uid}`; - const signature = createHmac("sha1", CALENDSO_ENCRYPTION_KEY).update(signedData).digest("base64"); + const sha1 = createHmac("sha1", CALENDSO_ENCRYPTION_KEY).update(signedData).digest(); + const signature = base64url(sha1); return ( } diff --git a/yarn.lock b/yarn.lock index ea42e5ac62..6b5eac8474 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10237,6 +10237,11 @@ base64-url@^2.2.0: resolved "https://registry.yarnpkg.com/base64-url/-/base64-url-2.3.3.tgz#645b71455c75109511f27d98450327e455f488ec" integrity sha512-dLMhIsK7OplcDauDH/tZLvK7JmUZK3A7KiQpjNzsBrM6Etw7hzNI1tLEywqJk9NnwkgWuFKSlx/IUO7vF6Mo8Q== +base64url@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/base64url/-/base64url-3.0.1.tgz#6399d572e2bc3f90a9a8b22d5dbb0a32d33f788d" + integrity sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A== + base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"