0d0e705117
New 3-tab structure: Website-Scan, Compliance-Check, Banner-Check. Compliance-Check Tab (replaces Dokumenten-Pruefung + Impressum-Check): - 8 document rows: DSI, Impressum, Social Media, Cookie, AGB, Nutzungsbedingungen, Widerruf, DSB-Kontakt - Each row: URL input + "Text laden" + file upload + manual text - "Text laden" extracts via consent-tester, shows in editable textarea - User verifies/corrects text before checking - Empty fields = "not present" → own finding Business Profiler (business_profiler.py): - Detects B2B/B2C/B2G from all documents together - Recognizes regulated professions, online shops, editorial content - Context-aware: INFO checks become PASS/FAIL based on profile Backend: /compliance-check + /extract-text endpoints Frontend: ComplianceCheckTab.tsx + DocumentRow.tsx API proxies: compliance-check/route.ts + extract-text/route.ts Also: Impressum regex fixes (Telefon, AG, Geschaeftsfuehrung) and INFO severity for context-dependent checks. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
28 lines
884 B
TypeScript
28 lines
884 B
TypeScript
/**
|
|
* Text Extraction Proxy — extract text from a URL via consent-tester
|
|
* POST: { url: string } -> { text, word_count, title, error }
|
|
*/
|
|
|
|
import { NextRequest, NextResponse } from 'next/server'
|
|
|
|
const BACKEND_URL = process.env.BACKEND_API_URL || 'http://backend-compliance:8002'
|
|
|
|
export async function POST(request: NextRequest) {
|
|
try {
|
|
const body = await request.text()
|
|
const response = await fetch(`${BACKEND_URL}/api/compliance/agent/extract-text`, {
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body,
|
|
signal: AbortSignal.timeout(120000),
|
|
})
|
|
const data = await response.json()
|
|
return NextResponse.json(data, { status: response.status })
|
|
} catch (error) {
|
|
return NextResponse.json(
|
|
{ text: '', word_count: 0, title: '', error: 'Text-Extraktion fehlgeschlagen' },
|
|
{ status: 503 },
|
|
)
|
|
}
|
|
}
|