export const runtime = "nodejs"; import { NextResponse } from "next/server"; import { z } from "zod"; import { requireAdminSession } from "@/lib/auth/require"; import { getLdapSettings } from "@/lib/auth/ldap-config"; import { searchLdapDirectory } from "@/lib/ldap/client"; import { findOrCreateUserFromLdap } from "@/lib/auth/users"; const importSchema = z.object({ emails: z.array(z.string().email()).min(1) }); export async function POST(request: Request) { const { session, response } = await requireAdminSession(); if (!session) return response; const settings = await getLdapSettings(); if (!settings) { return NextResponse.json({ error: "LDAP не настроен" }, { status: 400 }); } const body = await request.json().catch(() => null); const parsed = importSchema.safeParse(body); if (!parsed.success) { return NextResponse.json({ error: "Invalid input" }, { status: 400 }); } try { const entries = await searchLdapDirectory(); const wanted = new Set(parsed.data.emails.map((e) => e.toLowerCase())); const toImport = entries.filter((e) => wanted.has(e.email.toLowerCase())); const imported = []; for (const entry of toImport) { const user = await findOrCreateUserFromLdap({ email: entry.email, name: entry.name, defaultRole: settings.defaultRole, }); imported.push(user.email); } return NextResponse.json({ ok: true, imported }); } catch (err) { const message = err instanceof Error ? err.message : "Unknown error"; return NextResponse.json({ error: `Не удалось импортировать: ${message}` }, { status: 502 }); } }