11import type { PageProps } from "app/_types" ;
22import { _generateMetadata } from "app/_utils" ;
3+ import { cookies , headers } from "next/headers" ;
4+ import { notFound , redirect } from "next/navigation" ;
35
6+ import { getServerSession } from "@calcom/features/auth/lib/getServerSession" ;
7+ import { PermissionCheckService } from "@calcom/features/pbac/services/permission-check.service" ;
48import { WebhookRepository } from "@calcom/features/webhooks/lib/repository/WebhookRepository" ;
59import { APP_NAME } from "@calcom/lib/constants" ;
10+ import { MembershipRole } from "@calcom/prisma/enums" ;
11+
12+ import { buildLegacyRequest } from "@lib/buildLegacyCtx" ;
613
714import { EditWebhookView } from "~/webhooks/views/webhook-edit-view" ;
815
@@ -16,12 +23,33 @@ export const generateMetadata = async ({ params }: { params: Promise<{ id: strin
1623 ) ;
1724
1825const Page = async ( { params : _params } : PageProps ) => {
26+ const session = await getServerSession ( { req : buildLegacyRequest ( await headers ( ) , await cookies ( ) ) } ) ;
27+ if ( ! session ?. user ?. id ) {
28+ return redirect ( "/auth/login" ) ;
29+ }
30+
1931 const params = await _params ;
2032 const id = typeof params ?. id === "string" ? params . id : undefined ;
2133
2234 const webhookRepository = WebhookRepository . getInstance ( ) ;
2335 const webhook = await webhookRepository . findByWebhookId ( id ) ;
2436
37+ // Ownership check: align with PBAC middleware in webhook/util.ts
38+ if ( webhook . teamId ) {
39+ const permissionService = new PermissionCheckService ( ) ;
40+ const hasPermission = await permissionService . checkPermission ( {
41+ userId : session . user . id ,
42+ teamId : webhook . teamId ,
43+ permission : "webhook.read" ,
44+ fallbackRoles : [ MembershipRole . ADMIN , MembershipRole . OWNER , MembershipRole . MEMBER ] ,
45+ } ) ;
46+ if ( ! hasPermission ) {
47+ notFound ( ) ;
48+ }
49+ } else if ( webhook . userId !== session . user . id ) {
50+ notFound ( ) ;
51+ }
52+
2553 return < EditWebhookView webhook = { webhook } /> ;
2654} ;
2755
0 commit comments