AuraSession   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 82
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Importance

Changes 0
Metric Value
wmc 7
lcom 1
cbo 5
dl 0
loc 82
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A getSession() 0 4 1
A __construct() 0 4 2
A name() 0 6 1
A __invoke() 0 19 3
1
<?php
2
3
namespace Psr7Middlewares\Middleware;
4
5
use Psr7Middlewares\Utils;
6
use Aura\Session\SessionFactory;
7
use Aura\Session\Session;
8
use Psr\Http\Message\ServerRequestInterface;
9
use Psr\Http\Message\ResponseInterface;
10
11
class AuraSession
12
{
13
    use Utils\StorageTrait;
14
15
    const KEY = 'AURA_SESSION';
16
    const STORAGE_KEY = 'AURA_SESSION_STORAGE';
17
18
    /**
19
     * @var SessionFactory
20
     */
21
    private $factory;
22
23
    /**
24
     * @var string|null The session name
25
     */
26
    private $name;
27
28
    /**
29
     * Returns the session instance.
30
     *
31
     * @param ServerRequestInterface $request
32
     *
33
     * @return Session|null
34
     */
35
    public static function getSession(ServerRequestInterface $request)
36
    {
37
        return self::getAttribute($request, self::KEY);
38
    }
39
40
    /**
41
     * Set the session factory.
42
     *
43
     * @param SessionFactory|null $factory
44
     */
45
    public function __construct(SessionFactory $factory = null)
46
    {
47
        $this->factory = $factory ?: new SessionFactory();
48
    }
49
50
    /**
51
     * Set the session name.
52
     *
53
     * @param string $name
54
     *
55
     * @return self
56
     */
57
    public function name($name)
58
    {
59
        $this->name = $name;
60
61
        return $this;
62
    }
63
64
    /**
65
     * Execute the middleware.
66
     *
67
     * @param ServerRequestInterface $request
68
     * @param ResponseInterface      $response
69
     * @param callable               $next
70
     *
71
     * @return ResponseInterface
72
     */
73
    public function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $next)
74
    {
75
        $session = $this->factory->newInstance($request->getCookieParams());
76
77
        if ($this->name !== null) {
78
            $session->setName($this->name);
79
        }
80
81
        $fragment = $session->getSegment(self::STORAGE_KEY);
82
83
        $request = self::setAttribute($request, self::KEY, $session);
84
        $request = self::startStorage($request, $fragment->get(self::STORAGE_KEY) ?: []);
85
86
        $response = $next($request, $response);
87
88
        $fragment->set(self::STORAGE_KEY, self::stopStorage($request));
89
90
        return $response;
91
    }
92
}
93