AuraSessionSegmentMiddleware   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 94
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 5
lcom 1
cbo 3
dl 0
loc 94
ccs 19
cts 19
cp 1
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 2
A setRequestAttributeName() 0 8 1
A getRequestAttributeName() 0 4 1
A __invoke() 0 26 1
1
<?php
2
namespace Germania\AuraSessionMiddleware;
3
4
use Psr\Http\Message\ServerRequestInterface as Request;
5
use Psr\Http\Message\ResponseInterface as Response;
6
use Psr\Log\LoggerInterface;
7
use Psr\Log\NullLogger;
8
use Aura\Session\SegmentInterface;
9
10
11
class AuraSessionSegmentMiddleware
12
{
13
14
    /**
15
     * @var SegmentInterface
16
     */
17
    public $segment;
18
19
    /**
20
     * @var LoggerInterface
21
     */
22
    public $logger;
23
24
    /**
25
     * @var string
26
     */
27
    public $request_attribute_name = 'session';
28
29
30
    /**
31
     * @param SegmentInterface        $segment  Aura.Session Segment
32
     * @param LoggerInterface|null    $logger   Optional: PSR-3 Logger
33
     */
34 12
    public function __construct( SegmentInterface $segment, LoggerInterface $logger = null)
35
    {
36 12
        $this->segment   = $segment;
37 12
        $this->logger    = $logger ?: new NullLogger;
38 12
    }
39
40
41
    /**
42
     * Sets the PSR7 Request attribute name for the Aura.Session Segment.
43
     * Must be called before middelware invokation!
44
     *
45
     * @param  string $request_attribute_name
46
     * @return self   Fluent Interface
47
     */
48 8
    public function setRequestAttributeName( $request_attribute_name )
49
    {
50 8
        $this->request_attribute_name = $request_attribute_name;
51 8
        $this->logger->info("Set PS7 Request attribute name for Aura.Session segment", [
52 4
            'attribute_name' => $request_attribute_name
53 4
        ]);
54 8
        return $this;
55
    }
56
57
    /**
58
     * Returns the PSR7 Request attribute name for the Aura.Session Segment.
59
     *
60
     * @return string
61
     */
62 6
    public function getRequestAttributeName( )
63
    {
64 6
        return $this->request_attribute_name;
65
    }
66
67
68
    /**
69
     * @param  Psr\Http\Message\ServerRequestInterface  $request  PSR7 request
70
     * @param  Psr\Http\Message\ResponseInterface       $response PSR7 response
71
     * @param  callable                                 $next     Next middleware
72
     *
73
     * @return Psr\Http\Message\ResponseInterface
74
     */
75 4
    public function __invoke(Request $request, Response $response, $next)
76
    {
77
        // ---------------------------------------
78
        //  1. Set session attribute
79
        // ---------------------------------------
80
81
        // Add attribute to Request
82
        // This will be available within any follow-up middleware and routes.
83 4
        $this->logger->info("Before Route: Inject Aura.Session segment to Request");
84
85 4
        $request_attribute_name = $this->getRequestAttributeName();
86 4
        $request = $request->withAttribute($request_attribute_name, $this->segment);
87
88
89
        // ---------------------------------------
90
        //  2. Call next middleware.
91
        // ---------------------------------------
92 4
        $response = $next($request, $response);
93
94
95
        // ---------------------------------------
96
        // 3. Return response
97
        // ---------------------------------------
98 4
        $this->logger->debug("After Route: noop");
99 4
        return $response;
100
    }
101
102
103
104
}
105