feat: add extensive test suite
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
export type AdminUser = {
|
||||
email: string;
|
||||
name: string;
|
||||
role?: string | null;
|
||||
};
|
||||
|
||||
type AdminCheckDependencies<SessionUser extends AdminUser> = {
|
||||
noAuthCheck: string | undefined;
|
||||
bypassUser: AdminUser;
|
||||
internalUser: AdminUser;
|
||||
getInternalAuth: () => Promise<string | null>;
|
||||
getInternalToken: (token: string) => Promise<unknown>;
|
||||
getSession: () => Promise<{ user: SessionUser } | null>;
|
||||
};
|
||||
|
||||
export async function checkAdmin<SessionUser extends AdminUser>({
|
||||
noAuthCheck,
|
||||
bypassUser,
|
||||
internalUser,
|
||||
getInternalAuth,
|
||||
getInternalToken,
|
||||
getSession,
|
||||
}: AdminCheckDependencies<SessionUser>): Promise<
|
||||
SessionUser | AdminUser | null
|
||||
> {
|
||||
if (noAuthCheck === "true") return bypassUser;
|
||||
|
||||
const internalAuth = await getInternalAuth();
|
||||
if (internalAuth) {
|
||||
try {
|
||||
if (await getInternalToken(internalAuth)) return internalUser;
|
||||
} catch {
|
||||
// Redis is optional for session authentication.
|
||||
}
|
||||
}
|
||||
|
||||
const session = await getSession();
|
||||
return session?.user.role === "admin" ? session.user : null;
|
||||
}
|
||||
Reference in New Issue
Block a user