Completed
Push — master ( e93f60...2f787f )
by Mahmoud
08:56 queued 02:41
created

VisitorsAuthentication::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

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