Skip to content

Commit d72ec3f

Browse files
committed
fix: corrected Symfony session usage for flash bags
1 parent 8891d57 commit d72ec3f

File tree

4 files changed

+19
-29
lines changed

4 files changed

+19
-29
lines changed

phpmyfaq/src/Bootstrap.php

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@
159159
throw new DatabaseConnectionException(
160160
message: 'Database connection failed: ' . $exception->getMessage(),
161161
code: 500,
162-
previous: $exception
162+
previous: $exception,
163163
);
164164
}
165165

@@ -173,22 +173,16 @@
173173
// We always need a valid, secure session!
174174
//
175175
if (session_status() !== PHP_SESSION_ACTIVE) {
176-
$sessionOptions = [
177-
'use_only_cookies' => 1,
178-
'use_trans_sid' => 0,
179-
'cookie_samesite' => 'Strict',
180-
'cookie_httponly' => true,
181-
'cookie_secure' => $request->isSecure(),
182-
];
176+
ini_set('session.use_only_cookies', '1');
177+
ini_set('session.use_trans_sid', '0');
178+
ini_set('session.cookie_samesite', 'Strict');
179+
ini_set('session.cookie_httponly', '1');
180+
ini_set('session.cookie_secure', '1');
183181

184182
// Start the PHP session
185183
if (defined('PMF_SESSION_SAVE_PATH') && !empty(PMF_SESSION_SAVE_PATH)) {
186-
$sessionOptions['save_path'] = PMF_SESSION_SAVE_PATH;
184+
ini_set('session.save_path', PMF_SESSION_SAVE_PATH);
187185
}
188-
189-
session_start($sessionOptions);
190-
$session = new Session(new PhpBridgeSessionStorage());
191-
$session->start();
192186
}
193187

194188
//
@@ -268,7 +262,7 @@
268262
// do not block bootstrap if a health check fails
269263
}
270264

271-
$client = (new SymfonyClientFactory())->create([
265+
$client = new SymfonyClientFactory()->create([
272266
'base_uri' => $baseUri,
273267
'verify_peer' => false,
274268
]);

phpmyfaq/src/phpMyFAQ/Controller/Frontend/AuthenticationController.php

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@
2121
use phpMyFAQ\Filter;
2222
use phpMyFAQ\Session\Token;
2323
use phpMyFAQ\Translation;
24-
use phpMyFAQ\User\CurrentUser;
25-
use phpMyFAQ\User\TwoFactor;
2624
use phpMyFAQ\User\UserAuthentication;
2725
use phpMyFAQ\User\UserException;
2826
use Symfony\Component\HttpFoundation\RedirectResponse;
@@ -103,7 +101,7 @@ public function forgotPassword(Request $request): Response
103101
* @throws \Exception
104102
*/
105103
#[Route(path: '/logout', name: 'public.auth.logout')]
106-
public function logout(Request $request): \Symfony\Component\HttpFoundation\RedirectResponse
104+
public function logout(Request $request): RedirectResponse
107105
{
108106
$session = $this->container->get('session');
109107
$csrfToken = Filter::filterVar($request->query->get('csrf'), FILTER_SANITIZE_SPECIAL_CHARS);
@@ -112,11 +110,11 @@ public function logout(Request $request): \Symfony\Component\HttpFoundation\Redi
112110

113111
if (!Token::getInstance($this->container->get('session'))->verifyToken('logout', $csrfToken)) {
114112
$session->getFlashBag()->add('error', 'CSRF Problem detected: ' . $csrfToken);
115-
return $redirectResponse->send();
113+
return $redirectResponse;
116114
}
117115

118116
if (!$this->currentUser->isLoggedIn()) {
119-
return $redirectResponse->send();
117+
return $redirectResponse;
120118
}
121119

122120
$this->currentUser->deleteFromSession(true);
@@ -128,7 +126,7 @@ public function logout(Request $request): \Symfony\Component\HttpFoundation\Redi
128126
$ssoLogout = $this->configuration->get('security.ssoLogoutRedirect');
129127
if ($this->configuration->get('security.ssoSupport') && (string) $ssoLogout !== '') {
130128
$redirectResponse->isRedirect($ssoLogout);
131-
$redirectResponse->send();
129+
return $redirectResponse;
132130
}
133131

134132
// Microsoft Azure Logout
@@ -139,7 +137,7 @@ public function logout(Request $request): \Symfony\Component\HttpFoundation\Redi
139137
return new RedirectResponse($this->configuration->getDefaultUrl() . 'services/azure/logout.php');
140138
}
141139

142-
return $redirectResponse->send();
140+
return $redirectResponse;
143141
}
144142

145143
/**
@@ -148,7 +146,7 @@ public function logout(Request $request): \Symfony\Component\HttpFoundation\Redi
148146
* @throws \Exception
149147
*/
150148
#[Route(path: '/authenticate', name: 'public.auth.authenticate', methods: ['POST'])]
151-
public function authenticate(Request $request): \Symfony\Component\HttpFoundation\RedirectResponse
149+
public function authenticate(Request $request): RedirectResponse
152150
{
153151
if ($this->currentUser->isLoggedIn()) {
154152
return new RedirectResponse(url: './');
@@ -183,8 +181,6 @@ public function authenticate(Request $request): \Symfony\Component\HttpFoundatio
183181
return new RedirectResponse(url: './token?user-id=' . $this->currentUser->getUserId());
184182
}
185183

186-
// Successful login without 2FA
187-
$this->container->get('session')->getFlashBag()->add('success', Translation::get('ad_auth_sess'));
188184
return new RedirectResponse('./');
189185
} catch (UserException $e) {
190186
$this->configuration->getLogger()->error('Login-error: ' . $e->getMessage());
@@ -237,7 +233,7 @@ public function token(Request $request): Response
237233
* @throws \Exception
238234
*/
239235
#[Route(path: '/check', name: 'public.twofactor.check', methods: ['POST'])]
240-
public function check(Request $request): \Symfony\Component\HttpFoundation\RedirectResponse
236+
public function check(Request $request): RedirectResponse
241237
{
242238
if ($this->currentUser->isLoggedIn()) {
243239
return new RedirectResponse(url: './');

phpmyfaq/src/phpMyFAQ/User/CurrentUser.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -450,8 +450,8 @@ public function deleteFromSession(bool $deleteCookie = false): bool
450450
$this->userSession->setCookie(UserSession::COOKIE_NAME_REMEMBER_ME, '');
451451
}
452452

453-
session_destroy();
454-
session_start();
453+
// @todo Check if session_destroy() is really needed here
454+
//session_destroy();
455455

456456
return true;
457457
}

phpmyfaq/src/public-routes.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,17 @@
1919

2020
use phpMyFAQ\Controller\Frontend\Api\SetupController;
2121
use phpMyFAQ\Controller\Frontend\AttachmentController;
22+
use phpMyFAQ\Controller\Frontend\AuthenticationController;
2223
use phpMyFAQ\Controller\Frontend\CategoryController;
2324
use phpMyFAQ\Controller\Frontend\ContactController;
2425
use phpMyFAQ\Controller\Frontend\FaqController;
2526
use phpMyFAQ\Controller\Frontend\GlossaryController;
26-
use phpMyFAQ\Controller\Frontend\AuthenticationController;
2727
use phpMyFAQ\Controller\Frontend\NewsController;
28-
use phpMyFAQ\Controller\Frontend\QuestionsController;
2928
use phpMyFAQ\Controller\Frontend\OverviewController;
3029
use phpMyFAQ\Controller\Frontend\PageNotFoundController;
3130
use phpMyFAQ\Controller\Frontend\PdfController;
3231
use phpMyFAQ\Controller\Frontend\PrivacyController;
32+
use phpMyFAQ\Controller\Frontend\QuestionsController;
3333
use phpMyFAQ\Controller\Frontend\SearchController;
3434
use phpMyFAQ\Controller\Frontend\SitemapController as FrontendSitemapController;
3535
use phpMyFAQ\Controller\Frontend\StartpageController;

0 commit comments

Comments
 (0)