Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 1 | Ir a la última revisión | | 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
 
80
        if(User::EMAIL_VERIFIED_NO == $user->email_verified) {
81
            return new Result(Result::FAILURE_UNCATEGORIZED, null, ['ERROR_USER_EMAIL_HASNT_BEEN_VARIFIED']);
82
        }
83
        if(User::BLOCKED_YES == $user->blocked) {
84
            return new Result(Result::FAILURE_UNCATEGORIZED, null, ['ERROR_USER_IS_BLOCKED']);
85
        }
86
 
87
        if(User::STATUS_INACTIVE == $user->status) {
88
            return new Result(Result::FAILURE_UNCATEGORIZED, null, ['ERROR_USER_IS_INACTIVE']);
89
        }
90
 
91
        if(!password_verify($this->password, $user->password) && !(md5($this->password) == $user->password))
92
        {
93
            $max_login_attempt = 3;
94
            $user->login_attempt++;
95
            if($user->login_attempt >= $max_login_attempt) {
96
                $user->blocked = User::BLOCKED_YES;
97
            }
98
            $userMapper->update($user);
99
            if(User::BLOCKED_YES == $user->blocked) {
100
                return new Result(Result::FAILURE_CREDENTIAL_INVALID, null, ['ERROR_ENTERED_PASS_INCORRECT_USER_IS_BLOCKED']);
101
            } else {
102
                $available_attempts = $max_login_attempt - $user->login_attempt;
103
                return new Result(Result::FAILURE_CREDENTIAL_INVALID, null, ['ERROR_ENTERED_PASS_INCORRECT_' . $available_attempts]);
104
            }
105
        } else {
106
            $user->login_attempt = 0;
107
            $userMapper->update($user);
108
        }
109
 
110
 
111
        $data = [
112
            'user_id' => $user->id,
113
            'device_id' => '',
114
        ];
115
 
116
        return new Result(Result::SUCCESS, $data, []);
117
    }
118
}