Benutzer hinterlegen ihre öffentlichen Schlüssel einmal, Admins zusätzlich Team-Schlüssel. Sie kommen in jeden Gast: im Assistenten vorausgewählt und abwählbar, per API und CLI automatisch, wenn die Anfrage keine nennt. Die Schlüssel kommen über die Schnittstelle SchluesselQuelle – dort lässt sich später eine externe Verwaltung anbinden. Vorgezogen aus #015 auf die Frage, ob Schlüssel ins Template gehören: nein, in die Verwaltung. Refs #015 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
21 lines
921 B
TypeScript
21 lines
921 B
TypeScript
import { NextResponse } from "next/server";
|
||
import { aufruferAdresse } from "@/lib/adressen";
|
||
import { api, jsonLesen } from "@/server/api";
|
||
import { rechtErforderlich } from "@/server/auth/zugang";
|
||
import { schluesselAnlegen, schluesselFuer } from "@/server/services/schluessel";
|
||
|
||
/** Die eigenen und die Team-Schlüssel – das, was ohne Angabe in jeden Gast kommt. */
|
||
export const GET = api(async (anfrage: Request) => {
|
||
const { benutzer } = await rechtErforderlich(anfrage, "eigeneZugaenge");
|
||
return NextResponse.json(await schluesselFuer(benutzer));
|
||
});
|
||
|
||
/** `{ name, oeffentlich, team? }` – Team-Schlüssel nur für Admins. */
|
||
export const POST = api(async (anfrage: Request) => {
|
||
const aufrufer = await rechtErforderlich(anfrage, "eigeneZugaenge");
|
||
return NextResponse.json(
|
||
await schluesselAnlegen(await jsonLesen(anfrage), aufrufer, aufruferAdresse(anfrage.headers)),
|
||
{ status: 201 },
|
||
);
|
||
});
|