From 3987785690717fcd33bc1ac958c95fb3e7155014 Mon Sep 17 00:00:00 2001 From: Eric Espie Date: Fri, 21 Aug 2026 10:12:31 +0200 Subject: [PATCH] =?UTF-8?q?N=C2=B09950=20-=20Error=20loading=20structural?= =?UTF-8?q?=20data=20on=20upgrade?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/loginbasic.class.inc.php | 3 ++ .../application/LoginFSM/LoginBasicTest.php | 42 ++++++++++++++++--- 2 files changed, 40 insertions(+), 5 deletions(-) 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'); } }