Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

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