From 994a36d039f98cd25100de0990de4daa85a0900b Mon Sep 17 00:00:00 2001 From: Alex van Andel Date: Thu, 14 Aug 2025 15:50:56 +0100 Subject: [PATCH] fix: add authentication guard to /apps/installed routes (#23092) * fix: add authentication guard to /apps/installed routes - Add session validation before making tRPC calls in server component - Redirect unauthenticated users to /auth/login instead of throwing 500 errors - Follows existing authentication patterns used throughout the codebase - Fixes 500 error when accessing /apps/installed/calendar and other categories Co-Authored-By: alex@cal.com * fix: Missing return; was that so hard, DevinAI? --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- .../apps/installed/[category]/page.tsx | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/apps/web/app/(use-page-wrapper)/apps/installed/[category]/page.tsx b/apps/web/app/(use-page-wrapper)/apps/installed/[category]/page.tsx index 11a44be760..5777947bd9 100644 --- a/apps/web/app/(use-page-wrapper)/apps/installed/[category]/page.tsx +++ b/apps/web/app/(use-page-wrapper)/apps/installed/[category]/page.tsx @@ -1,13 +1,17 @@ import { createRouterCaller } from "app/_trpc/context"; import type { PageProps } from "app/_types"; import { _generateMetadata } from "app/_utils"; +import { cookies, headers } from "next/headers"; import { redirect } from "next/navigation"; import { z } from "zod"; +import { getServerSession } from "@calcom/features/auth/lib/getServerSession"; import { AppCategories } from "@calcom/prisma/enums"; import { appsRouter } from "@calcom/trpc/server/routers/viewer/apps/_router"; import { calendarsRouter } from "@calcom/trpc/server/routers/viewer/calendars/_router"; +import { buildLegacyRequest } from "@lib/buildLegacyCtx"; + import InstalledApps from "~/apps/installed/[category]/installed-category-view"; const querySchema = z.object({ @@ -31,6 +35,11 @@ const InstalledAppsWrapper = async ({ params }: PageProps) => { redirect("/apps/installed/calendar"); } + const session = await getServerSession({ req: buildLegacyRequest(await headers(), await cookies()) }); + if (!session?.user?.id) { + return redirect("/auth/login"); + } + const [calendarsCaller, appsCaller] = await Promise.all([ createRouterCaller(calendarsRouter), createRouterCaller(appsRouter),