Services: Admin-Compliance, Backend-Compliance, AI-Compliance-SDK, Consent-SDK, Developer-Portal, PCA-Platform, DSMS Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
310 lines
8.8 KiB
TypeScript
310 lines
8.8 KiB
TypeScript
import { NextRequest, NextResponse } from 'next/server'
|
|
|
|
/**
|
|
* SDK Document Generation API
|
|
*
|
|
* POST /api/sdk/v1/generate - Generate compliance documents
|
|
*
|
|
* Supported document types:
|
|
* - dsfa: Data Protection Impact Assessment
|
|
* - tom: Technical and Organizational Measures
|
|
* - vvt: Processing Register (Art. 30 GDPR)
|
|
* - cookie-banner: Cookie consent banner code
|
|
* - audit-report: Audit report
|
|
*/
|
|
|
|
export async function POST(request: NextRequest) {
|
|
try {
|
|
const body = await request.json()
|
|
const { documentType, context, options } = body
|
|
|
|
if (!documentType) {
|
|
return NextResponse.json(
|
|
{ error: 'documentType is required' },
|
|
{ status: 400 }
|
|
)
|
|
}
|
|
|
|
// Generate document based on type
|
|
let document: unknown = null
|
|
let generationTime = Date.now()
|
|
|
|
switch (documentType) {
|
|
case 'dsfa':
|
|
document = generateDSFA(context, options)
|
|
break
|
|
|
|
case 'tom':
|
|
document = generateTOMs(context, options)
|
|
break
|
|
|
|
case 'vvt':
|
|
document = generateVVT(context, options)
|
|
break
|
|
|
|
case 'cookie-banner':
|
|
document = generateCookieBanner(context, options)
|
|
break
|
|
|
|
case 'audit-report':
|
|
document = generateAuditReport(context, options)
|
|
break
|
|
|
|
default:
|
|
return NextResponse.json(
|
|
{ error: `Unknown document type: ${documentType}` },
|
|
{ status: 400 }
|
|
)
|
|
}
|
|
|
|
generationTime = Date.now() - generationTime
|
|
|
|
return NextResponse.json({
|
|
success: true,
|
|
documentType,
|
|
document,
|
|
generatedAt: new Date().toISOString(),
|
|
generationTimeMs: generationTime,
|
|
})
|
|
} catch (error) {
|
|
console.error('Failed to generate document:', error)
|
|
return NextResponse.json(
|
|
{ error: 'Failed to generate document' },
|
|
{ status: 500 }
|
|
)
|
|
}
|
|
}
|
|
|
|
// =============================================================================
|
|
// DOCUMENT GENERATORS
|
|
// =============================================================================
|
|
|
|
function generateDSFA(context: unknown, options: unknown) {
|
|
return {
|
|
id: `dsfa-${Date.now()}`,
|
|
status: 'DRAFT',
|
|
version: 1,
|
|
sections: [
|
|
{
|
|
id: 'section-1',
|
|
title: '1. Systematische Beschreibung der Verarbeitungsvorgänge',
|
|
content: 'Die geplante Verarbeitung umfasst...',
|
|
status: 'DRAFT',
|
|
order: 1,
|
|
},
|
|
{
|
|
id: 'section-2',
|
|
title: '2. Bewertung der Notwendigkeit und Verhältnismäßigkeit',
|
|
content: 'Die Verarbeitung ist notwendig für...',
|
|
status: 'DRAFT',
|
|
order: 2,
|
|
},
|
|
{
|
|
id: 'section-3',
|
|
title: '3. Bewertung der Risiken für die Rechte und Freiheiten',
|
|
content: 'Identifizierte Risiken:\n- Risiko 1\n- Risiko 2',
|
|
status: 'DRAFT',
|
|
order: 3,
|
|
},
|
|
{
|
|
id: 'section-4',
|
|
title: '4. Abhilfemaßnahmen',
|
|
content: 'Folgende Maßnahmen werden ergriffen...',
|
|
status: 'DRAFT',
|
|
order: 4,
|
|
},
|
|
],
|
|
approvals: [],
|
|
createdAt: new Date().toISOString(),
|
|
updatedAt: new Date().toISOString(),
|
|
}
|
|
}
|
|
|
|
function generateTOMs(context: unknown, options: unknown) {
|
|
return {
|
|
toms: [
|
|
{
|
|
id: 'tom-1',
|
|
category: 'Zutrittskontrolle',
|
|
name: 'Physische Zugangskontrollen',
|
|
description: 'Maßnahmen zur Verhinderung unbefugten Zutritts zu Datenverarbeitungsanlagen',
|
|
type: 'TECHNICAL',
|
|
implementationStatus: 'NOT_IMPLEMENTED',
|
|
priority: 'HIGH',
|
|
},
|
|
{
|
|
id: 'tom-2',
|
|
category: 'Zugangskontrolle',
|
|
name: 'Authentifizierung',
|
|
description: 'Multi-Faktor-Authentifizierung für alle Systeme',
|
|
type: 'TECHNICAL',
|
|
implementationStatus: 'NOT_IMPLEMENTED',
|
|
priority: 'HIGH',
|
|
},
|
|
{
|
|
id: 'tom-3',
|
|
category: 'Zugriffskontrolle',
|
|
name: 'Rollenbasierte Zugriffskontrolle',
|
|
description: 'RBAC-System für granulare Berechtigungsvergabe',
|
|
type: 'ORGANIZATIONAL',
|
|
implementationStatus: 'NOT_IMPLEMENTED',
|
|
priority: 'HIGH',
|
|
},
|
|
{
|
|
id: 'tom-4',
|
|
category: 'Weitergabekontrolle',
|
|
name: 'Verschlüsselung',
|
|
description: 'Ende-zu-Ende-Verschlüsselung für Datenübertragung',
|
|
type: 'TECHNICAL',
|
|
implementationStatus: 'NOT_IMPLEMENTED',
|
|
priority: 'HIGH',
|
|
},
|
|
{
|
|
id: 'tom-5',
|
|
category: 'Eingabekontrolle',
|
|
name: 'Audit Logging',
|
|
description: 'Protokollierung aller Dateneingaben und -änderungen',
|
|
type: 'TECHNICAL',
|
|
implementationStatus: 'NOT_IMPLEMENTED',
|
|
priority: 'MEDIUM',
|
|
},
|
|
],
|
|
generatedAt: new Date().toISOString(),
|
|
}
|
|
}
|
|
|
|
function generateVVT(context: unknown, options: unknown) {
|
|
return {
|
|
processingActivities: [
|
|
{
|
|
id: 'pa-1',
|
|
name: 'Kundenmanagement',
|
|
purpose: 'Verwaltung von Kundenbeziehungen und Aufträgen',
|
|
legalBasis: 'Art. 6 Abs. 1 lit. b DSGVO (Vertrag)',
|
|
dataCategories: ['Name', 'Kontaktdaten', 'Bestellhistorie'],
|
|
dataSubjects: ['Kunden'],
|
|
recipients: ['Interne Mitarbeiter', 'Zahlungsdienstleister'],
|
|
thirdCountryTransfers: false,
|
|
retentionPeriod: '10 Jahre (handelsrechtliche Aufbewahrungspflicht)',
|
|
technicalMeasures: ['Verschlüsselung', 'Zugriffskontrolle'],
|
|
organizationalMeasures: ['Schulungen', 'Vertraulichkeitsverpflichtung'],
|
|
},
|
|
],
|
|
generatedAt: new Date().toISOString(),
|
|
version: '1.0',
|
|
}
|
|
}
|
|
|
|
function generateCookieBanner(context: unknown, options: unknown) {
|
|
return {
|
|
id: `cookie-${Date.now()}`,
|
|
style: 'BANNER',
|
|
position: 'BOTTOM',
|
|
theme: 'LIGHT',
|
|
texts: {
|
|
title: 'Cookie-Einstellungen',
|
|
description: 'Wir verwenden Cookies, um Ihnen die beste Nutzererfahrung zu bieten.',
|
|
acceptAll: 'Alle akzeptieren',
|
|
rejectAll: 'Alle ablehnen',
|
|
settings: 'Einstellungen',
|
|
save: 'Speichern',
|
|
},
|
|
categories: [
|
|
{
|
|
id: 'necessary',
|
|
name: 'Notwendig',
|
|
description: 'Diese Cookies sind für die Grundfunktionen erforderlich.',
|
|
required: true,
|
|
cookies: [],
|
|
},
|
|
{
|
|
id: 'analytics',
|
|
name: 'Analyse',
|
|
description: 'Diese Cookies helfen uns, die Nutzung zu verstehen.',
|
|
required: false,
|
|
cookies: [],
|
|
},
|
|
{
|
|
id: 'marketing',
|
|
name: 'Marketing',
|
|
description: 'Diese Cookies werden für Werbezwecke verwendet.',
|
|
required: false,
|
|
cookies: [],
|
|
},
|
|
],
|
|
generatedCode: {
|
|
html: `<!-- Cookie Banner HTML -->
|
|
<div id="cookie-banner" class="cookie-banner">
|
|
<div class="cookie-content">
|
|
<h3>Cookie-Einstellungen</h3>
|
|
<p>Wir verwenden Cookies, um Ihnen die beste Nutzererfahrung zu bieten.</p>
|
|
<div class="cookie-actions">
|
|
<button onclick="acceptAll()">Alle akzeptieren</button>
|
|
<button onclick="rejectAll()">Alle ablehnen</button>
|
|
<button onclick="showSettings()">Einstellungen</button>
|
|
</div>
|
|
</div>
|
|
</div>`,
|
|
css: `.cookie-banner {
|
|
position: fixed;
|
|
bottom: 0;
|
|
left: 0;
|
|
right: 0;
|
|
background: white;
|
|
box-shadow: 0 -2px 10px rgba(0,0,0,0.1);
|
|
padding: 20px;
|
|
z-index: 9999;
|
|
}
|
|
.cookie-content { max-width: 1200px; margin: 0 auto; }
|
|
.cookie-actions { margin-top: 15px; display: flex; gap: 10px; }
|
|
.cookie-actions button { padding: 10px 20px; border-radius: 5px; cursor: pointer; }`,
|
|
js: `function acceptAll() {
|
|
setCookie('consent', 'all', 365);
|
|
document.getElementById('cookie-banner').style.display = 'none';
|
|
}
|
|
function rejectAll() {
|
|
setCookie('consent', 'necessary', 365);
|
|
document.getElementById('cookie-banner').style.display = 'none';
|
|
}
|
|
function setCookie(name, value, days) {
|
|
const expires = new Date(Date.now() + days * 864e5).toUTCString();
|
|
document.cookie = name + '=' + value + '; expires=' + expires + '; path=/; SameSite=Lax';
|
|
}`,
|
|
},
|
|
generatedAt: new Date().toISOString(),
|
|
}
|
|
}
|
|
|
|
function generateAuditReport(context: unknown, options: unknown) {
|
|
return {
|
|
id: `audit-${Date.now()}`,
|
|
title: 'Compliance Audit Report',
|
|
generatedAt: new Date().toISOString(),
|
|
summary: {
|
|
totalChecks: 50,
|
|
passed: 35,
|
|
failed: 10,
|
|
warnings: 5,
|
|
complianceScore: 70,
|
|
},
|
|
sections: [
|
|
{
|
|
title: 'Executive Summary',
|
|
content: 'Dieser Bericht fasst den aktuellen Compliance-Status zusammen...',
|
|
},
|
|
{
|
|
title: 'Methodik',
|
|
content: 'Die Prüfung wurde gemäß ISO 27001 und DSGVO durchgeführt...',
|
|
},
|
|
{
|
|
title: 'Ergebnisse',
|
|
content: 'Hauptabweichungen: 3\nNebenabweichungen: 7\nEmpfehlungen: 5',
|
|
},
|
|
{
|
|
title: 'Empfehlungen',
|
|
content: '1. Implementierung von MFA\n2. Verbesserung der Dokumentation\n3. Regelmäßige Schulungen',
|
|
},
|
|
],
|
|
}
|
|
}
|