From d1c6cfd3838021a770fec7b07da66f980e9fdcc6 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 2 Apr 2024 15:21:07 +0200 Subject: [PATCH 1/2] Upgrade upstream package version for LSL v2 --- composer.json | 2 +- tests/Http/Controllers/LSLoginControllerTest.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index 6691b73..cc114d8 100644 --- a/composer.json +++ b/composer.json @@ -15,7 +15,7 @@ } ], "require": { - "socialiteproviders/lifesciencelogin": "^5.0" + "socialiteproviders/lifesciencelogin": "^6.0" }, "autoload": { "psr-4": { diff --git a/tests/Http/Controllers/LSLoginControllerTest.php b/tests/Http/Controllers/LSLoginControllerTest.php index 32eeaee..673b4a4 100644 --- a/tests/Http/Controllers/LSLoginControllerTest.php +++ b/tests/Http/Controllers/LSLoginControllerTest.php @@ -15,7 +15,7 @@ class LSLoginControllerTest extends TestCase public function testRedirect() { $this->get('auth/lslogin/redirect') - ->assertRedirectContains('https://proxy.aai.lifescience-ri.eu'); + ->assertRedirectContains('https://login.aai.lifescience-ri.eu'); } public function testCallbackNewUser() From 103d80b2f6ad15bcff1201d9bcf3bba06d0cc27f Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 2 Apr 2024 15:29:26 +0200 Subject: [PATCH 2/2] Handle InvalidStateException Resolves #1 --- src/Http/Controllers/LSLoginController.php | 11 ++++++++- .../Controllers/LSLoginControllerTest.php | 24 ++++++++++++++++++- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/Http/Controllers/LSLoginController.php b/src/Http/Controllers/LSLoginController.php index 8ca69eb..30db019 100644 --- a/src/Http/Controllers/LSLoginController.php +++ b/src/Http/Controllers/LSLoginController.php @@ -7,6 +7,7 @@ use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Laravel\Socialite\Facades\Socialite; +use Laravel\Socialite\Two\InvalidStateException; class LSLoginController extends Controller { @@ -28,7 +29,15 @@ public function redirect() */ public function callback(Request $request) { - $user = Socialite::driver('lifesciencelogin')->user(); + try { + $user = Socialite::driver('lifesciencelogin')->user(); + } catch (InvalidStateException $e) { + $route = $request->user() ? 'settings-authentication' : 'login'; + + return redirect() + ->route($route) + ->withErrors(['lslogin-id' => 'There was an unexpected error. Please try again.']); + } $lslId = LsloginId::with('user')->find($user->id); diff --git a/tests/Http/Controllers/LSLoginControllerTest.php b/tests/Http/Controllers/LSLoginControllerTest.php index 673b4a4..86641c6 100644 --- a/tests/Http/Controllers/LSLoginControllerTest.php +++ b/tests/Http/Controllers/LSLoginControllerTest.php @@ -5,11 +5,11 @@ use Biigle\Modules\AuthLSLogin\LsloginId; use Biigle\User; use Laravel\Socialite\Facades\Socialite; +use Laravel\Socialite\Two\InvalidStateException; use Laravel\Socialite\Two\User as SocialiteUser; use Session; use TestCase; - class LSLoginControllerTest extends TestCase { public function testRedirect() @@ -93,4 +93,26 @@ public function testCallbackConnectAlreadyConnected() $this->get('auth/lslogin/callback')->assertRedirectToRoute('settings-authentication'); $this->assertAuthenticatedAs($id->user); } + + public function testInvalidStateExceptionDuringLogin() + { + config(['biigle.user_registration' => true]); + Socialite::shouldReceive('driver->user')->andThrow(InvalidStateException::class); + + $this->get('auth/lslogin/callback') + ->assertInvalid(['lslogin-id']) + ->assertRedirectToRoute('login'); + } + + public function testInvalidStateExceptionDuringConnect() + { + config(['biigle.user_registration' => true]); + Socialite::shouldReceive('driver->user')->andThrow(InvalidStateException::class); + + $user = User::factory()->create(); + $this->be($user); + $this->get('auth/lslogin/callback') + ->assertInvalid(['lslogin-id']) + ->assertRedirectToRoute('settings-authentication'); + } }