● Zion Boggan
repos/Stepping App/apps/web/src/lib/auth.ts
zionboggan.com ↗
42 lines · typescript
History for this file →
1
import { cookies } from "next/headers";
2
import { getDb } from "@stepping/db";
3
import {
4
  SESSION_COOKIE,
5
  verifyCredentials,
6
  createSession,
7
  destroySession,
8
  validateSession,
9
  type SessionUser,
10
} from "@stepping/api";
11
 
12
export async function getCurrentUser(): Promise<SessionUser | null> {
13
  const token = (await cookies()).get(SESSION_COOKIE)?.value ?? null;
14
  return validateSession(getDb(), token);
15
}
16
 
17
export function isAdmin(u: SessionUser | null): boolean {
18
  return u?.role === "admin" || u?.role === "moderator";
19
}
20
 
21
export async function login(email: string, password: string): Promise<boolean> {
22
  const db = getDb();
23
  const userId = await verifyCredentials(db, email, password);
24
  if (!userId) return false;
25
 
26
  const { token, expiresAt } = await createSession(db, userId);
27
  (await cookies()).set(SESSION_COOKIE, token, {
28
    httpOnly: true,
29
    secure: process.env.STEPPING_SECURE_COOKIES === "1",
30
    sameSite: "lax",
31
    path: "/",
32
    expires: expiresAt,
33
  });
34
  return true;
35
}
36
 
37
export async function logout(): Promise<void> {
38
  const jar = await cookies();
39
  const token = jar.get(SESSION_COOKIE)?.value;
40
  await destroySession(getDb(), token);
41
  jar.delete(SESSION_COOKIE);
42
}