Completed
Push — master ( 00ed35...63fbb3 )
by Oscar
10:20
created

AuraSession::factory()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %
Metric Value
dl 0
loc 6
rs 9.4286
cc 1
eloc 3
nc 1
nop 1
1
<?php
2
3
namespace Psr7Middlewares\Middleware;
4
5
use Psr7Middlewares\Middleware;
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
    const KEY = 'AURA_SESSION';
14
15
    /**
16
     * @var SessionFactory
17
     */
18
    private $factory;
19
20
    /**
21
     * @var string|null The session name
22
     */
23
    private $name;
24
25
    /**
26
     * Returns the session instance.
27
     *
28
     * @param ServerRequestInterface $request
29
     *
30
     * @return Session|null
31
     */
32
    public static function getSession(ServerRequestInterface $request)
33
    {
34
        return Middleware::getAttribute($request, self::KEY);
35
    }
36
37
    /**
38
     * Set the session factory.
39
     *
40
     * @param SessionFactory|null $factory
41
     */
42
    public function __construct(SessionFactory $factory = null)
43
    {
44
        $this->factory = $factory ?: new SessionFactory();
45
    }
46
47
    /**
48
     * Set the session name.
49
     *
50
     * @param string $name
51
     *
52
     * @return self
53
     */
54
    public function name($name)
55
    {
56
        $this->name = $name;
57
58
        return $this;
59
    }
60
61
    /**
62
     * Execute the middleware.
63
     *
64
     * @param ServerRequestInterface $request
65
     * @param ResponseInterface      $response
66
     * @param callable               $next
67
     *
68
     * @return ResponseInterface
69
     */
70
    public function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $next)
71
    {
72
        $session = $this->factory->newInstance($request->getCookieParams());
73
74
        if ($this->name !== null) {
75
            $session->setName($this->name);
76
        }
77
78
        $request = Middleware::setAttribute($request, self::KEY, $session);
79
80
        return $next($request, $response);
81
    }
82
}
83