SPB Git forge

spb/toveli

Public
14commits 1branches 0releases
1.1 MBsize
maindefault branch
5 h agolast push
TypeScript 50.6% JavaScript 46.1% SQL 2.1% Shell 0.6% CSS 0.5%
1.3 KB · 19 lines typescript
Raw Blame History
1import { NextRequest, NextResponse } from "next/server";2import { z } from "zod";3import { requestCode } from "@/lib/auth/otp";4import { assertSameOrigin, clientIp } from "@/lib/auth/session";5import { handle, parseBody } from "@/lib/api";6export const dynamic = "force-dynamic";7const Body = z.object({ email: z.string().min(3).max(254) });8/** Réponse volontairement neutre : ne révèle jamais si l'adresse possède un compte. */9export async function POST(req: NextRequest) {10  try {11    await assertSameOrigin();12    const { email } = await parseBody(req, Body);13    const r = await requestCode(email, await clientIp());14    if (!r.ok && r.reason === "invalid_email") return NextResponse.json({ error: { code: "invalid_email", message: "Adresse courriel invalide" } }, { status: 400 });15    if (!r.ok) return NextResponse.json({ ok: true, sent: false, retryAfterSec: r.retryAfterSec, message: r.reason === "cooldown" ? "Un code vient d'être envoyé. Patientez avant d'en demander un autre." : "Trop de demandes. Réessayez plus tard." }, { status: 429 });16    return NextResponse.json({ ok: true, sent: true, challengeId: r.challengeId, retryAfterSec: r.retryAfterSec, message: "Si cette adresse est valide, un code vient d'être envoyé." });17  } catch (e) { return handle(e); }18}19