source: server/telefunc/ctx.ts@ c4dd17d

main
Last change on this file since c4dd17d was 0d447f6, checked in by Tome <gjorgievtome@…>, 7 months ago

update AuthState

  • Property mode set to 100644
File size: 1.1 KB
Line 
1import { Abort, getContext } from "telefunc";
2import * as drizzleQueries from "../../database/drizzle/queries";
3
4export function ctx() {
5 return getContext();
6}
7
8export function parseSessionUserId(sessionUserId: unknown): number | null {
9 if (typeof sessionUserId !== "string" && typeof sessionUserId !== "number") return null;
10 const n = Number(sessionUserId);
11 return Number.isInteger(n) && n > 0 ? n : null;
12}
13
14export function requireUser() {
15 const c = ctx();
16 const userId = parseSessionUserId(c.session?.user?.id);
17 if (!userId) throw Abort();
18 return { c, userId };
19}
20
21export function getAuthState() {
22 const c = ctx();
23 const userId = parseSessionUserId(c.session?.user?.id);
24 return {
25 isLoggedIn: Boolean(userId),
26 userId: userId ?? null,
27 username: c.session?.user?.name ?? null,
28 session: c.session,
29 db: c.db,
30 };
31}
32
33export async function requireAdmin() {
34 const { c, userId } = requireUser();
35
36 const isAdmin = await drizzleQueries.isAdmin(c.db, userId);
37
38 if (!isAdmin) throw Abort();
39 return { c, userId };
40}
Note: See TracBrowser for help on using the repository browser.