StartSession::getSession()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 1
eloc 2
c 1
b 0
f 1
nc 1
nop 1
dl 0
loc 4
rs 10
1
<?php
2
3
namespace SwooleTW\Http\Websocket\Middleware;
4
5
use Closure;
6
use Illuminate\Contracts\Session\Session;
7
use Illuminate\Http\Request;
8
use Illuminate\Session\SessionManager;
9
use Illuminate\Support\Arr;
10
11
/**
12
 * Class StartSession
13
 */
14
class StartSession
15
{
16
    /**
17
     * The session manager.
18
     *
19
     * @var \Illuminate\Session\SessionManager
20
     */
21
    protected $manager;
22
23
    /**
24
     * Create a new session middleware.
25
     *
26
     * @param  \Illuminate\Session\SessionManager $manager
27
     *
28
     * @return void
29
     */
30
    public function __construct(SessionManager $manager)
31
    {
32
        $this->manager = $manager;
33
    }
34
35
    /**
36
     * Handle an incoming request.
37
     *
38
     * @param  \Illuminate\Http\Request $request
39
     * @param  \Closure $next
40
     *
41
     * @return mixed
42
     */
43
    public function handle($request, Closure $next)
44
    {
45
        if ($this->sessionConfigured()) {
46
            $request->setLaravelSession($this->startSession($request));
47
        }
48
49
        return $next($request);
50
    }
51
52
    /**
53
     * Start the session for the given request.
54
     *
55
     * @param  \Illuminate\Http\Request $request
56
     *
57
     * @return \Illuminate\Contracts\Session\Session
58
     */
59
    protected function startSession(Request $request)
60
    {
61
        return tap($this->getSession($request), function (Session $session) use ($request) {
62
            $session->setRequestOnHandler($request);
63
64
            $session->start();
65
        });
66
    }
67
68
    /**
69
     * Get the session implementation from the manager.
70
     *
71
     * @param  \Illuminate\Http\Request $request
72
     *
73
     * @return \Illuminate\Contracts\Session\Session
74
     */
75
    public function getSession(Request $request)
76
    {
77
        return tap($this->manager->driver(), function (Session $session) use ($request) {
78
            $session->setId($request->cookies->get($session->getName()));
79
        });
80
    }
81
82
    /**
83
     * Determine if a session driver has been configured.
84
     *
85
     * @return bool
86
     */
87
    protected function sessionConfigured()
88
    {
89
        return ! is_null($this->manager->getSessionConfig()['driver'] ?? null);
90
    }
91
}
92