diff --git a/laravel/app/Http/Controllers/ShortlinkController.php b/laravel/app/Http/Controllers/ShortlinkController.php index cf2b632..132e94b 100644 --- a/laravel/app/Http/Controllers/ShortlinkController.php +++ b/laravel/app/Http/Controllers/ShortlinkController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Shortlink; +use GuzzleHttp\Client; class ShortlinkController extends Controller { @@ -18,6 +19,21 @@ class ShortlinkController extends Controller ]); //check if url returns 200 at its final redirect + $guzzle = new Client([ + 'timeout' => 5 + ]); + try { + $response = $guzzle->get($request->url, ['allow_redirects' => ['track_redirects' => true]]); + if ($response->getStatusCode() != 200) { + return back()->withErrors([ + 'error' => 'The URL provided did not return a valid response' + ]); + } + } catch (\Exception $e) { + return back()->withErrors([ + 'error' => 'The URL provided did not return a valid response' + ]); + } $shortlink = new Shortlink(); $shortlink->create($request->url, auth()->id()); @@ -27,7 +43,6 @@ class ShortlinkController extends Controller 'error' => $e->getMessage() ]); } - } public function goto(Request $request, $id) { diff --git a/laravel/composer.json b/laravel/composer.json index 4b7e183..2e83355 100644 --- a/laravel/composer.json +++ b/laravel/composer.json @@ -6,6 +6,7 @@ "license": "MIT", "require": { "php": "^8.2", + "guzzlehttp/guzzle": "^7.8", "laravel/framework": "^11.9", "laravel/tinker": "^2.9" }, diff --git a/laravel/composer.lock b/laravel/composer.lock index 974116e..1d44cca 100644 --- a/laravel/composer.lock +++ b/laravel/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "7e8c3c14ff33b199b4a0838993eb8423", + "content-hash": "55d18cb1b7b1ab5b14edeb92768c4021", "packages": [ { "name": "brick/math",