LoginHandler::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 2
dl 0
loc 6
ccs 0
cts 6
cp 0
crap 2
rs 10
c 0
b 0
f 0
1
<?php
2
3
4
namespace Xervice\User\Business\Model\Login;
5
6
7
use DataProvider\UserAuthDataProvider;
8
use DataProvider\UserDataProvider;
9
use Xervice\Session\Business\SessionFacade;
10
use Xervice\User\Business\Exception\UserException;
11
use Xervice\User\Business\Model\Authenticator\AuthProviderInterface;
12
13
class LoginHandler implements LoginHandlerInterface
14
{
15
    private const SESSION_USER_NAME = 'session:user:data';
16
17
    /**
18
     * @var \Xervice\Session\Business\SessionFacade
19
     */
20
    private $sessionFacade;
21
22
    /**
23
     * @var \Xervice\User\Business\Model\Authenticator\AuthProviderInterface
24
     */
25
    private $authProvider;
26
27
    /**
28
     * LoginHandler constructor.
29
     *
30
     * @param \Xervice\Session\Business\SessionFacade $sessionFacade
31
     * @param \Xervice\User\Business\Model\Authenticator\AuthProviderInterface $authProvider
32
     */
33
    public function __construct(
34
        SessionFacade $sessionFacade,
35
        AuthProviderInterface $authProvider
36
    ) {
37
        $this->sessionFacade = $sessionFacade;
38
        $this->authProvider = $authProvider;
39
    }
40
41
    /**
42
     * @param \DataProvider\UserAuthDataProvider $authDataProvider
43
     *
44
     * @return \DataProvider\UserDataProvider
45
     * @throws \Xervice\User\Business\Exception\UserException
46
     */
47
    public function login(UserAuthDataProvider $authDataProvider): UserDataProvider
48
    {
49
        if (!$this->authProvider->auth($authDataProvider)) {
50
            throw new UserException('Login failed');
51
        }
52
53
        $this->sessionFacade->set(
54
            self::SESSION_USER_NAME,
55
            json_encode(
56
                $authDataProvider->getUser()->toArray()
57
            )
58
        );
59
        return $authDataProvider->getUser();
60
    }
61
62
    public function logout(): void
63
    {
64
        $this->sessionFacade->remove(self::SESSION_USER_NAME);
65
    }
66
67
    /**
68
     * @return \DataProvider\UserDataProvider|null
69
     */
70
    public function getUser(): ?UserDataProvider
71
    {
72
        $user = null;
73
        if ($this->sessionFacade->has(self::SESSION_USER_NAME)) {
74
            $user = new UserDataProvider();
75
            $user->fromArray(
76
                json_decode(
77
                    $this->sessionFacade->get(self::SESSION_USER_NAME),
78
                    true
79
                )
80
            );
81
        }
82
83
        return $user;
84
    }
85
}