-
Notifications
You must be signed in to change notification settings - Fork 2
/
SessionHelper.php
65 lines (57 loc) · 2.16 KB
/
SessionHelper.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php
// This file is part of Bileto.
// Copyright 2022-2024 Probesys
// SPDX-License-Identifier: AGPL-3.0-or-later
namespace App\Tests;
use Symfony\Bundle\FrameworkBundle\KernelBrowser;
use Symfony\Component\BrowserKit\Cookie;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\HttpFoundation\Session\SessionFactory;
use Symfony\Component\HttpFoundation\Session\Storage\MockFileSessionStorage;
use Symfony\Component\Security\Csrf\TokenGenerator\TokenGeneratorInterface;
use Symfony\Component\Security\Csrf\TokenStorage\SessionTokenStorage;
trait SessionHelper
{
public function getSession(KernelBrowser $client): SessionInterface
{
$cookie = $client->getCookieJar()->get('MOCKSESSID');
if ($cookie) {
/** @var SessionFactory */
$sessionFactory = static::getContainer()->get('session.factory');
$session = $sessionFactory->createSession();
$session->setId($cookie->getValue());
$session->start();
return $session;
} else {
return self::createSession($client);
}
}
public function createSession(KernelBrowser $client): SessionInterface
{
/** @var SessionFactory */
$sessionFactory = static::getContainer()->get('session.factory');
$session = $sessionFactory->createSession();
$session->start();
$session->save();
$sessionCookie = new Cookie(
$session->getName(),
$session->getId(),
null,
null,
'localhost',
);
$client->getCookieJar()->set($sessionCookie);
return $session;
}
public function generateCsrfToken(KernelBrowser $client, string $tokenId): string
{
$session = $this->getSession($client);
$container = static::getContainer();
/** @var TokenGeneratorInterface $tokenGenerator */
$tokenGenerator = $container->get('security.csrf.token_generator');
$csrfToken = $tokenGenerator->generateToken();
$session->set(SessionTokenStorage::SESSION_NAMESPACE . "/{$tokenId}", $csrfToken);
$session->save();
return $csrfToken;
}
}