Completed
Push — master ( e15c58...b150a8 )
by Changwan
07:08
created

Sessionify   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 46
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 4

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
dl 0
loc 46
ccs 0
cts 25
cp 0
rs 10
c 0
b 0
f 0
wmc 3
lcom 0
cbo 4

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 7 1
A __invoke() 0 22 2
1
<?php
2
namespace Wandu\Router\Middleware;
3
4
use Closure;
5
use Psr\Http\Message\ServerRequestInterface;
6
use Wandu\Http\Cookie\CookieJarFactory;
7
use Wandu\Http\Exception\HttpException;
8
use Wandu\Http\Session\SessionFactory;
9
use Wandu\Router\Contracts\MiddlewareInterface;
10
11
class Sessionify implements MiddlewareInterface
12
{
13
    /** @var \Wandu\Http\Cookie\CookieJarFactory */
14
    protected $cookieJarFactory;
15
16
    /** @var \Wandu\Http\Session\SessionFactory */
17
    protected $sessionFactory;
18
19
    /**
20
     * @param \Wandu\Http\Cookie\CookieJarFactory $cookieJarFactory
21
     * @param \Wandu\Http\Session\SessionFactory $sessionFactory
22
     */
23
    public function __construct(
24
        CookieJarFactory $cookieJarFactory,
25
        SessionFactory $sessionFactory
26
    ) {
27
        $this->cookieJarFactory = $cookieJarFactory;
28
        $this->sessionFactory = $sessionFactory;
29
    }
30
31
    /**
32
     * {@inheritdoc}
33
     */
34
    public function __invoke(ServerRequestInterface $request, Closure $next)
35
    {
36
        $cookieJar = $this->cookieJarFactory->fromServerRequest($request);
37
        $session = $this->sessionFactory->fromCookieJar($cookieJar);
38
39
        $request = $request
40
            ->withAttribute('cookie', $cookieJar)
41
            ->withAttribute('session', $session);
42
43
        // run next
44
        try {
45
            $response = $next($request);
46
        } catch (HttpException $exception) {
47
            $response = $exception->getResponse();
48
            $this->sessionFactory->toCookieJar($session, $cookieJar);
49
            $exception->setResponse($this->cookieJarFactory->toResponse($cookieJar, $response));
50
            throw $exception;
51
        }
52
53
        $this->sessionFactory->toCookieJar($session, $cookieJar);
54
        return $this->cookieJarFactory->toResponse($cookieJar, $response);
55
    }
56
}
57