← back to Norma

app/api/settings/api-keys/[id]/route.ts

33 lines

import { NextRequest, NextResponse } from 'next/server';
import { requireRole } from '@/lib/require-role';
import { revokeApiKey } from '@/lib/credentials';
import { auditLog } from '@/lib/audit';

/**
 * DELETE /api/settings/api-keys/:id
 * Revoke (soft-delete) a Norma API key.
 */
export async function DELETE(
  request: NextRequest,
  { params }: { params: Promise<{ id: string }> },
) {
  const auth = requireRole(request, 'admin');
  if (auth instanceof NextResponse) return auth;

  const { id } = await params;
  if (!id) {
    return NextResponse.json({ error: 'id is required' }, { status: 400 });
  }

  const revoked = await revokeApiKey(id);
  if (!revoked) {
    return NextResponse.json({ error: 'Key not found or already revoked' }, { status: 404 });
  }

  await auditLog('apikey.revoked', 'norma_api_key', id, {
    revokedBy: auth.username,
  });

  return NextResponse.json({ success: true });
}