import { getUserSession } from "@calcom/features/auth/lib/userFromSessionUtils"; import logger from "@calcom/lib/logger"; import { setUser as SentrySetUser } from "@sentry/nextjs"; import { TRPCError } from "@trpc/server"; import { middleware } from "../trpc"; export const isAuthed = middleware(async ({ ctx, next }) => { const middlewareStart = performance.now(); const { user, session } = await getUserSession(ctx); const middlewareEnd = performance.now(); logger.debug("Perf:t.isAuthed", middlewareEnd - middlewareStart); if (!user || !session) { throw new TRPCError({ code: "UNAUTHORIZED" }); } SentrySetUser({ id: user.id }); return next({ ctx: { user, session }, }); }); export const isAdminMiddleware = isAuthed.unstable_pipe(({ ctx, next }) => { const { user } = ctx; if (user?.role !== "ADMIN") { throw new TRPCError({ code: "UNAUTHORIZED" }); } return next({ ctx: { user: user } }); }); // Org admins can be admins or owners export const isOrgAdminMiddleware = isAuthed.unstable_pipe(({ ctx, next }) => { const { user } = ctx; if (!user?.organization?.isOrgAdmin) { throw new TRPCError({ code: "UNAUTHORIZED" }); } return next({ ctx: { user: user } }); });