Rev 3639 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
<?php
declare(strict_types=1);
namespace LeadersLinked\Authentication;
use Laminas\Authentication\Adapter\AdapterInterface as AuthAdapterInterface;
use Laminas\Authentication\Result;
use Laminas\Db\Adapter\AdapterInterface;
use Laminas\Log\LoggerInterface;
use LeadersLinked\Model\User;
use LeadersLinked\Mapper\UserMapper;
use LeadersLinked\Library\Functions;
class AuthAdapter implements AuthAdapterInterface
{
/**
*
* @var AdapterInterface
*/
private $adapter;
/**
*
* @var string
*/
private $email;
/**
*
* @var string
*/
private $password;
/**
*
* @param AdapterInterface $adapter
*/
public function __construct(AdapterInterface $adapter)
{
$this->adapter = $adapter;
}
/**
*
* @param string $email
* @param string $password
*/
public function setData($email, $password)
{
$this->email = $email;
$this->password = $password;
}
/**
*
* {@inheritDoc}
* @see \Laminas\Authentication\Adapter\AdapterInterface::authenticate()
*/
public function authenticate()
{
$userMapper = UserMapper::getInstance($this->adapter);
$user = $userMapper->fetchOneByEmail($this->email);
if(!$user) {
return new Result(Result::FAILURE_IDENTITY_NOT_FOUND, null, ['ERROR_USER_NOT_FOUND']);
}
if(User::EMAIL_VERIFIED_NO == $user->email_verified) {
return new Result(Result::FAILURE_UNCATEGORIZED, null, ['ERROR_USER_EMAIL_HASNT_BEEN_VARIFIED']);
}
if(User::BLOCKED_YES == $user->blocked) {
return new Result(Result::FAILURE_UNCATEGORIZED, null, ['ERROR_USER_IS_BLOCKED']);
}
if(User::STATUS_INACTIVE == $user->status) {
return new Result(Result::FAILURE_UNCATEGORIZED, null, ['ERROR_USER_IS_INACTIVE']);
}
if(!password_verify($this->password, $user->password) && !(md5($this->password) == $user->password))
{
$max_login_attempt = 3;
$user->login_attempt++;
if($user->login_attempt >= $max_login_attempt) {
$user->blocked = User::BLOCKED_YES;
}
$userMapper->update($user);
if(User::BLOCKED_YES == $user->blocked) {
return new Result(Result::FAILURE_CREDENTIAL_INVALID, null, ['ERROR_ENTERED_PASS_INCORRECT_USER_IS_BLOCKED']);
} else {
$available_attempts = $max_login_attempt - $user->login_attempt;
return new Result(Result::FAILURE_CREDENTIAL_INVALID, null, ['ERROR_ENTERED_PASS_INCORRECT_' . $available_attempts]);
}
} else {
$user->login_attempt = 0;
$userMapper->update($user);
}
$data = [
'user_id' => $user->id,
'device_id' => '',
];
return new Result(Result::SUCCESS, $data, []);
}
}