Fixed files: - competitions-view.tsx: 10 strings (placeholders, labels) - subjects-view.tsx: 11 strings (types, actions, placeholders) - professional-calendar.tsx: 5 strings (event type labels) - illness-reporting-view.tsx: 3 strings (status badges) - student-detail-view.tsx: 4 strings (health form placeholders) - data-table.tsx: 2 strings (search, empty state) - compliance-wizard.tsx: 2 strings (name, state) - settings-view.tsx: 1 string (Skipped) - competence-flower-view.tsx: 1 string (Active) - disciplinary-view.tsx: 1 string (All clear) - district-management-view.tsx: 1 string (No recent activity) - competitions-view.tsx: 1 string (Stock) - ui/pagination.tsx: 3 strings (Previous, Next, More pages) - ui/breadcrumb.tsx: 1 string (More) - ui/carousel.tsx: 2 strings (Previous/Next slide) - ui/sidebar.tsx: 1 string (Sidebar title) Total: 44 hardcoded English strings replaced with German
15 lines
445 B
TypeScript
Executable File
15 lines
445 B
TypeScript
Executable File
import { NextResponse, type NextRequest } from 'next/server';
|
|
import { isCsrfProtectedRequest, isTrustedRequestOrigin } from '@/lib/csrf';
|
|
|
|
export function middleware(request: NextRequest) {
|
|
if (isCsrfProtectedRequest(request) && !isTrustedRequestOrigin(request)) {
|
|
return NextResponse.json({ error: 'Invalid request origin' }, { status: 403 });
|
|
}
|
|
|
|
return NextResponse.next();
|
|
}
|
|
|
|
export const config = {
|
|
matcher: ['/api/:path*'],
|
|
};
|