{
"event": "PreToolUse",
"tool_name": "Read",
"tool_input": {
"file_path": "\/var\/www\/dev.campus.systemische-tools.de\/src\/Framework\/Controller.php",
"limit": 80
}
}
{
"tool_response": {
"type": "text",
"file": {
"filePath": "\/var\/www\/dev.campus.systemische-tools.de\/src\/Framework\/Controller.php",
"content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Framework;\n\n\/\/ @responsibility: Basis-Controller mit CSRF, JSON-Response, View-Rendering\n\nuse Domain\\Constants;\n\nabstract class Controller\n{\n protected function csrfToken(): string\n {\n return CsrfService::getToken();\n }\n\n protected function csrfField(): string\n {\n return CsrfService::getTokenField();\n }\n\n protected function validateCsrf(): bool\n {\n $token = $_POST['_csrf_token'] ?? $_SERVER['HTTP_X_CSRF_TOKEN'] ?? null;\n\n return CsrfService::validateToken($token);\n }\n\n protected function requireCsrf(): void\n {\n if (!$this->validateCsrf()) {\n if ($this->isJsonRequest()) {\n $this->json(['error' => 'CSRF token invalid'], 403);\n } else {\n $this->text('CSRF token invalid', 403);\n }\n exit;\n }\n }\n\n private function isJsonRequest(): bool\n {\n $accept = $_SERVER['HTTP_ACCEPT'] ?? '';\n $contentType = $_SERVER['CONTENT_TYPE'] ?? '';\n\n return str_contains($accept, 'application\/json') || str_contains($contentType, 'application\/json');\n }\n\n protected function view(string $name, array $data = []): void\n {\n $data['csrfField'] = $this->csrfField();\n $data['csrfToken'] = $this->csrfToken();\n $data['flashSuccess'] = $this->consumeFlash('success');\n $data['flashError'] = $this->consumeFlash('error');\n $__viewPath = VIEW_PATH . '\/' . str_replace('.', '\/', $name) . '.php';\n extract($data);\n\n if (file_exists($__viewPath)) {\n require $__viewPath;\n } else {\n throw new \\Exception(\"View not found: {$name}\");\n }\n }\n\n protected function json(mixed $data, int $status = 200): void\n {\n http_response_code($status);\n header('Content-Type: application\/json');\n echo json_encode($data, JSON_UNESCAPED_UNICODE);\n }\n\n protected function redirect(string $url, int $status = 302): never\n {\n http_response_code($status);\n header(\"Location: {$url}\");\n exit;\n }\n\n \/**",
"numLines": 80,
"startLine": 1,
"totalLines": 330
}
}
}