From b97db6da407a4bb13bfa1fc9ca923ac6086949f4 Mon Sep 17 00:00:00 2001 From: subhajit Date: Wed, 8 Jul 2026 15:28:17 +0530 Subject: [PATCH] testing --- app/Http/Controllers/LoginController.php | 19 +++++++++++++++---- public/Screenshot_7.png | Bin 0 -> 25315 bytes tests/Feature/SecurityAndAdminTest.php | 21 +++++++++------------ 3 files changed, 24 insertions(+), 16 deletions(-) create mode 100644 public/Screenshot_7.png diff --git a/app/Http/Controllers/LoginController.php b/app/Http/Controllers/LoginController.php index 14373ff..6d832af 100644 --- a/app/Http/Controllers/LoginController.php +++ b/app/Http/Controllers/LoginController.php @@ -148,11 +148,10 @@ public function handleMicrosoftCallback(Request $request) return $this->redirectUserBasedOnRole($user); } - /** - * Log the user out of the application. - */ public function logout(Request $request) { + $user = Auth::user(); + Auth::logout(); $request->session()->invalidate(); @@ -160,7 +159,19 @@ public function logout(Request $request) // Redirect to Microsoft's logout URL to log the user out of Microsoft as well try { - $microsoftLogoutUrl = Socialite::driver('microsoft')->getLogoutUrl(route('login')); + $tenant = config('services.microsoft.tenant', 'common'); + $logoutUrl = "https://login.microsoftonline.com/{$tenant}/oauth2/v2.0/logout"; + + $params = [ + 'post_logout_redirect_uri' => route('login'), + ]; + + if ($user && $user->email) { + // Pass logout_hint to bypass Microsoft's "Pick an account" selection screen + $params['logout_hint'] = $user->email; + } + + $microsoftLogoutUrl = $logoutUrl . '?' . http_build_query($params); return redirect($microsoftLogoutUrl); } catch (\Exception $e) { return redirect()->route('login')->with('success', 'Logged out successfully.'); diff --git a/public/Screenshot_7.png b/public/Screenshot_7.png new file mode 100644 index 0000000000000000000000000000000000000000..5917944a9b208ff2ca7667131d02e8af23ded2d6 GIT binary patch literal 25315 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 zcO`?EapdMassertFalse(auth()->check()); } - /** - * Test local logout redirects to Microsoft global logout endpoint. - */ public function test_user_logout_redirects_to_microsoft_logout_page(): void { $user = User::create([ @@ -200,17 +197,16 @@ public function test_user_logout_redirects_to_microsoft_logout_page(): void 'role' => 'user', ]); - $mockSocialite = \Mockery::mock('Laravel\Socialite\Contracts\Provider'); - $mockSocialite->shouldReceive('getLogoutUrl') - ->with(route('login')) - ->andReturn('https://login.microsoftonline.com/common/oauth2/v2.0/logout?post_logout_redirect_uri=' . urlencode(route('login'))); - - \Laravel\Socialite\Facades\Socialite::shouldReceive('driver')->with('microsoft')->andReturn($mockSocialite); - $response = $this->actingAs($user) ->get('/logout'); // supports GET for testing - $response->assertRedirect('https://login.microsoftonline.com/common/oauth2/v2.0/logout?post_logout_redirect_uri=' . urlencode(route('login'))); + $tenant = config('services.microsoft.tenant', 'common'); + $expectedRedirect = "https://login.microsoftonline.com/{$tenant}/oauth2/v2.0/logout?" . http_build_query([ + 'post_logout_redirect_uri' => route('login'), + 'logout_hint' => 'user@sentientgeeks.com', + ]); + + $response->assertRedirect($expectedRedirect); $this->assertFalse(auth()->check()); } @@ -264,7 +260,8 @@ public function test_sso_launch_redirects_to_microsoft_for_all_services_if_user_ $mockSocialite->shouldReceive('redirectUrl')->with(route('sso.callback'))->andReturnSelf(); $mockSocialite->shouldReceive('with')->with([ 'login_hint' => $user->email, - 'domain_hint' => 'organizations' + 'domain_hint' => 'organizations', + 'prompt' => 'none' ])->andReturnSelf(); $mockSocialite->shouldReceive('redirect') ->andReturn(redirect('https://login.microsoftonline.com/common/oauth2/v2.0/authorize'));