Completed
Push — master ( dac44a...f2b6c1 )
by Mahmoud
04:10
created

VisitorsAuthentication::handle()   B

Complexity

Conditions 3
Paths 3

Size

Total Lines 25
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 25
rs 8.8571
cc 3
eloc 11
nc 3
nop 2
1
<?php
2
3
namespace App\Containers\Authentication\Middlewares;
4
5
use App\Containers\Authentication\Exceptions\MissingVisitorIdException;
6
use App\Containers\User\Tasks\FindUserByVisitorIdTask;
7
use Closure;
8
use Illuminate\Auth\AuthManager;
9
use Illuminate\Http\Request;
10
11
/**
12
 * Class VisitorsAuthentication
13
 *
14
 * @author  Mahmoud Zalt  <[email protected]>
15
 */
16
class VisitorsAuthentication
17
{
18
19
    /**
20
     * @var  \App\Containers\User\Tasks\FindUserByVisitorIdTask
21
     */
22
    private $findUserByVisitorIdTask;
23
24
    /**
25
     * @var  \App\Containers\Authentication\Middlewares\AuthManager|\Illuminate\Auth\AuthManager
26
     */
27
    private $authManager;
28
29
    /**
30
     * VisitorsAuthentication constructor.
31
     *
32
     * @param \App\Containers\User\Tasks\FindUserByVisitorIdTask $findUserByVisitorIdTask
33
     * @param \Illuminate\Auth\AuthManager                       $authManager
34
     */
35
    public function __construct(
36
        FindUserByVisitorIdTask $findUserByVisitorIdTask,
37
        AuthManager $authManager
38
    ) {
39
        $this->findUserByVisitorIdTask = $findUserByVisitorIdTask;
40
        $this->authManager = $authManager;
41
    }
42
43
    /**
44
     * @param  \Illuminate\Http\Request $request
45
     * @param  \Closure                 $next
46
     *
47
     * @return mixed
48
     */
49
    public function handle(Request $request, Closure $next)
50
    {
51
        // read the visitor ID header (set by the API users)
52
        $visitorId = $request->header('visitor-id');
53
54
        if (!$visitorId) {
55
            throw new MissingVisitorIdException();
56
        }
57
58
        $user = $this->findUserByVisitorIdTask->run($visitorId);
59
60
        if (!$user) {
61
            abort(403);
62
        }
63
64
        // make the user accessible outside the middleware (\Auth::user())
65
        $this->authManager->setUser($user);
66
67
        $response = $next($request);
68
69
        // make sure nothing left from that user, after this request end
70
        $this->authManager->logout();
71
72
        return $response;
73
    }
74
}
75