diff --git a/application/loginbasic.class.inc.php b/application/loginbasic.class.inc.php index c14b56c7da..c64efc08c3 100644 --- a/application/loginbasic.class.inc.php +++ b/application/loginbasic.class.inc.php @@ -117,6 +117,9 @@ class LoginBasic extends AbstractLoginFSMExtension } // Decode without Bearer + if (!utils::StartsWith($sAuthorization, 'Basic ')) { + return null; + } $sDecodedAuthorisation = base64_decode(substr($sAuthorization, 6)); if (str_contains($sDecodedAuthorisation, ':')) { return explode(':', $sDecodedAuthorisation); diff --git a/tests/php-unit-tests/unitary-tests/application/LoginFSM/LoginBasicTest.php b/tests/php-unit-tests/unitary-tests/application/LoginFSM/LoginBasicTest.php index b2dfe4fe6f..1318d0db27 100644 --- a/tests/php-unit-tests/unitary-tests/application/LoginFSM/LoginBasicTest.php +++ b/tests/php-unit-tests/unitary-tests/application/LoginFSM/LoginBasicTest.php @@ -38,11 +38,43 @@ class LoginBasicTest extends ItopDataTestCase $sActualRes = $oLoginBasic->LoginAction(LoginWebPage::LOGIN_STATE_MODE_DETECTION, $iErrorCode); // Then - $this->assertTrue(Session::IsSet('login_mode')); - $this->assertEquals(LoginWebPage::LOGIN_FSM_CONTINUE, $sActualRes); + $this->assertEquals('basic', $_SESSION['login_mode'], 'Login mode should have detected basic mode'); + $this->assertEquals(LoginWebPage::LOGIN_FSM_CONTINUE, $sActualRes, 'No Login FSM error should have been detected'); } - public function testOnModeDetectionForToken() + public function testOnModeDetectionForRedirect() + { + // Given + $oLoginBasic = new LoginBasic(); + $_SERVER['REDIRECT_HTTP_AUTHORIZATION'] = 'Basic '.base64_encode('Login:BasicTest'); + + // When + $_SESSION = []; + $iErrorCode = 0; + $sActualRes = $oLoginBasic->LoginAction(LoginWebPage::LOGIN_STATE_MODE_DETECTION, $iErrorCode); + + // Then + $this->assertEquals('basic', $_SESSION['login_mode'], 'Login mode should have detected basic mode'); + $this->assertEquals(LoginWebPage::LOGIN_FSM_CONTINUE, $sActualRes, 'No Login FSM error should have been detected'); + } + + public function testOnModeDetectionForBasicLoginPassword() + { + // Given + $oLoginBasic = new LoginBasic(); + $_SERVER['REDIRECT_HTTP_AUTHORIZATION'] = 'Basic '.base64_encode('Login:BasicTest'); + + // When + $_SESSION = []; + $iErrorCode = 0; + $sActualRes = $oLoginBasic->LoginAction(LoginWebPage::LOGIN_STATE_MODE_DETECTION, $iErrorCode); + + // Then + $this->assertEquals('basic', $_SESSION['login_mode'], 'Login mode should have detected basic mode'); + $this->assertEquals(LoginWebPage::LOGIN_FSM_CONTINUE, $sActualRes, 'No Login FSM error should have been detected'); + } + + public function testOnModeDetectionForBearerToken() { // Given $oLoginBasic = new LoginBasic(); @@ -54,7 +86,7 @@ class LoginBasicTest extends ItopDataTestCase $sActualRes = $oLoginBasic->LoginAction(LoginWebPage::LOGIN_STATE_MODE_DETECTION, $iErrorCode); // Then - $this->assertFalse(Session::IsSet('login_mode')); - $this->assertEquals(LoginWebPage::LOGIN_FSM_CONTINUE, $sActualRes); + $this->assertFalse(Session::IsSet('login_mode'), 'No basic login mode should have been detected'); + $this->assertEquals(LoginWebPage::LOGIN_FSM_CONTINUE, $sActualRes, 'No Login FSM error should have been detected'); } }