Proyectos de Subversion LeadersLinked - Services

Rev

Rev 255 | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
345 www 2
declare(strict_types = 1);
1 efrain 3
namespace LeadersLinked\Authentication;
4
 
345 www 5
use Laminas\Authentication\Adapter\AdapterInterface as AuthAdapterInterface;
1 efrain 6
use Laminas\Authentication\Result;
7
use Laminas\Db\Adapter\AdapterInterface;
8
use Laminas\Log\LoggerInterface;
9
use LeadersLinked\Model\User;
10
use LeadersLinked\Mapper\UserMapper;
11
use LeadersLinked\Library\Functions;
12
 
13
class AuthAdapter implements AuthAdapterInterface
14
{
345 www 15
 
1 efrain 16
    /**
17
     *
18
     * @var AdapterInterface
19
     */
20
    private $adapter;
345 www 21
 
1 efrain 22
    /**
345 www 23
     *
1 efrain 24
     * @var string
25
     */
26
    private $email;
345 www 27
 
1 efrain 28
    /**
29
     *
30
     * @var string
31
     */
32
    private $password;
345 www 33
 
1 efrain 34
    /**
345 www 35
     *
1 efrain 36
     * @var int
37
     */
38
    private $network_id;
39
 
40
    /**
345 www 41
     *
1 efrain 42
     * @param AdapterInterface $adapter
43
     */
44
    public function __construct(AdapterInterface $adapter)
45
    {
345 www 46
        $this->adapter = $adapter;
1 efrain 47
    }
48
 
49
    /**
345 www 50
     *
1 efrain 51
     * @param string $email
52
     * @param string $password
53
     * @param int $network_id
54
     */
55
    public function setData($email, $password, $network_id)
56
    {
345 www 57
        $this->email = $email;
58
        $this->password = $password;
59
        $this->network_id = $network_id;
60
    }
255 efrain 61
 
1 efrain 62
    /**
345 www 63
     *
64
     * {@inheritdoc}
1 efrain 65
     * @see \Laminas\Authentication\Adapter\AdapterInterface::authenticate()
66
     */
67
    public function authenticate()
68
    {
69
        $userMapper = UserMapper::getInstance($this->adapter);
70
        $user = $userMapper->fetchOneByEmailAndNetworkId($this->email, $this->network_id);
345 www 71
 
72
        if (! $user) {
73
            return new Result(Result::FAILURE_IDENTITY_NOT_FOUND, null, [
74
                'ERROR_USER_NOT_FOUND'
75
            ]);
1 efrain 76
        }
77
 
345 www 78
        if (User::EMAIL_VERIFIED_NO == $user->email_verified) {
79
            return new Result(Result::FAILURE_UNCATEGORIZED, null, [
80
                'ERROR_USER_EMAIL_HASNT_BEEN_VARIFIED'
81
            ]);
1 efrain 82
        }
345 www 83
        if (User::BLOCKED_YES == $user->blocked) {
84
            return new Result(Result::FAILURE_UNCATEGORIZED, null, [
85
                'ERROR_USER_IS_BLOCKED'
86
            ]);
1 efrain 87
        }
345 www 88
 
89
        if (User::STATUS_INACTIVE == $user->status) {
90
            return new Result(Result::FAILURE_UNCATEGORIZED, null, [
91
                'ERROR_USER_IS_INACTIVE'
92
            ]);
1 efrain 93
        }
345 www 94
 
95
        if (User::REQUEST_ACCESS_PENDING == $user->request_access) {
96
            return new Result(Result::FAILURE_UNCATEGORIZED, null, [
97
                'ERROR_USER_REQUEST_ACCESS_IS_PENDING'
98
            ]);
1 efrain 99
        }
100
 
345 www 101
        if (User::REQUEST_ACCESS_REJECTED == $user->request_access) {
102
            return new Result(Result::FAILURE_UNCATEGORIZED, null, [
103
                'ERROR_USER_REQUEST_ACCESS_IS_REJECTED'
104
            ]);
105
        }
106
 
107
        if (! password_verify($this->password, $user->password) && ! (md5($this->password) == $user->password)) {
1 efrain 108
            $max_login_attempt = 3;
345 www 109
            $user->login_attempt ++;
110
            if ($user->login_attempt >= $max_login_attempt) {
1 efrain 111
                $user->blocked = User::BLOCKED_YES;
112
            }
255 efrain 113
            $user->password_xmpp = '';
1 efrain 114
            $userMapper->update($user);
345 www 115
            if (User::BLOCKED_YES == $user->blocked) {
116
                return new Result(Result::FAILURE_CREDENTIAL_INVALID, null, [
117
                    'ERROR_ENTERED_PASS_INCORRECT_USER_IS_BLOCKED'
118
                ]);
1 efrain 119
            } else {
120
                $available_attempts = $max_login_attempt - $user->login_attempt;
345 www 121
                return new Result(Result::FAILURE_CREDENTIAL_INVALID, null, [
122
                    'ERROR_ENTERED_PASS_INCORRECT_' . $available_attempts
123
                ]);
1 efrain 124
            }
125
        } else {
126
            $user->login_attempt = 0;
127
            $userMapper->update($user);
128
        }
345 www 129
 
1 efrain 130
        $data = [
131
            'user_id' => $user->id,
345 www 132
            'device_id' => ''
1 efrain 133
        ];
345 www 134
 
1 efrain 135
        return new Result(Result::SUCCESS, $data, []);
136
    }
137
}