* sessionUser in features * update sessionMiddleware * update * format changes * update import paths * fix * fix ts errors * refactor * fix * fix * fix * fix * rename * rename * rename * use error with code objs
42 lines
1.2 KiB
TypeScript
42 lines
1.2 KiB
TypeScript
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 } });
|
|
});
|