From 74315c34238e8e43763b3f9a0f8edda29f0ac4ba Mon Sep 17 00:00:00 2001 From: Matthew Zalewski Date: Sun, 20 Oct 2024 01:41:53 +1300 Subject: [PATCH] Add Catch All handler (#25) --- app/Http/Controllers/CatchAllController.php | 67 +++++++++++++++++++++ routes/web.php | 3 + 2 files changed, 70 insertions(+) create mode 100644 app/Http/Controllers/CatchAllController.php diff --git a/app/Http/Controllers/CatchAllController.php b/app/Http/Controllers/CatchAllController.php new file mode 100644 index 0000000..f4e3198 --- /dev/null +++ b/app/Http/Controllers/CatchAllController.php @@ -0,0 +1,67 @@ +all(); + $ua = $request->header('User-Agent'); + $path = $request->path(); + $queryParams = $request->query(); + + // If path is root, return a 200 OK empty response + if ($path === '/') { + return response()->noContent(200); + } + + try { + $response = Http::withHeaders([ + 'User-Agent' => $ua, + 'Accept' => '*/*' + ])->asForm()->send($request->getMethod(), 'https://api.wordpress.org/' . $path, [ + 'query' => $queryParams, + 'form_params' => $requestData + ]); + + } catch (RequestException $e) { + $statusCode = $e->response ? $e->response->status() : 500; + return response()->noContent($statusCode); + } + + // Get content type and status code + $contentType = $response->header('Content-Type'); + $statusCode = $response->status(); + $content = $response->body(); + + // Log request and response in DB + $this->saveData($request, $response, $content); + + // Forward response through + return response($content, $statusCode)->header('Content-Type', $contentType); + } + + private function saveData(Request $request, $response, string $content): void + { + DB::table('request_data')->insert([ + 'id' => Str::uuid()->toString(), + 'request_path' => $request->path(), + 'request_query_params' => json_encode($request->query()), + 'request_body' => json_encode($request->all()), + 'request_headers' => json_encode($request->headers->all()), + 'response_code' => $response->status(), + 'response_body' => $content, + 'response_headers' => json_encode($response->headers()), + 'created_at' => Carbon::now(), + ]); + } +} diff --git a/routes/web.php b/routes/web.php index 86a06c5..30142ed 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,7 +1,10 @@ where('path', '.*');