SPB Git forge

spb/spb-cloud

Public
10commits 1branches 0releases
3.2 MBsize
maindefault branch
4 h agolast push
JavaScript 56.7% TypeScript 42.6%
1.8 KB · 37 lines typescript
Raw Blame History
1import { NextRequest, NextResponse } from "next/server";2import { getIronSession } from "iron-session";3import { SessionData, sessionOptions } from "@/lib/session";4import { prisma } from "@/lib/prisma";5import { hashPassword, requireAdmin } from "@/lib/auth";67export async function GET(request: NextRequest) {8  const response = NextResponse.next();9  const session = await getIronSession<SessionData>(request, response, sessionOptions);10  if (!session.userId || !(await requireAdmin(session.userId))) return NextResponse.json({ error: "Forbidden" }, { status: 403 });1112  const users = await prisma.user.findMany({13    select: { id: true, username: true, email: true, name: true, role: true, twoFactorEnabled: true, createdAt: true, _count: { select: { files: true, folders: true } } },14    orderBy: { createdAt: "asc" },15  });16  return NextResponse.json(users);17}1819export async function POST(request: NextRequest) {20  const response = NextResponse.next();21  const session = await getIronSession<SessionData>(request, response, sessionOptions);22  if (!session.userId || !(await requireAdmin(session.userId))) return NextResponse.json({ error: "Forbidden" }, { status: 403 });2324  const body = await request.json();25  const { username, name, password, role } = body;26  if (!username || !password) return NextResponse.json({ error: "Nom d'utilisateur et mot de passe requis" }, { status: 400 });2728  const existing = await prisma.user.findUnique({ where: { username } });29  if (existing) return NextResponse.json({ error: "Nom d'utilisateur déjà utilisé" }, { status: 409 });3031  const user = await prisma.user.create({32    data: { username, name: name || null, passwordHash: await hashPassword(password), role: role || "user" },33    select: { id: true, username: true, name: true, role: true, createdAt: true },34  });35  return NextResponse.json(user, { status: 201 });36}37