Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 1 | 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;
use LeadersLinked\Model\UserProfile;
use LeadersLinked\Mapper\UserProfileMapper;
use LeadersLinked\Mapper\UserProviderMapper;

class AuthSocialAdapter implements AuthAdapterInterface
{
    /**
     *
     * @var AdapterInterface
     */
    private $adapter;

    /**
     * 
     * @var string
     */
    private $id;
    
    /**
     *
     * @var string
     */
    private $provider;
    

    /**
     * 
     * @param AdapterInterface $adapter
     */
    public function __construct(AdapterInterface $adapter)
    {
        $this->adapter = $adapter; 
    }

    /**
     * 
     * @param string $id
     * @param string $provider
     */
    public function setData($id, $provider)
    {
        $this->id = $id;
        $this->provider = $provider;
    }
    
    /**
     * 
     * {@inheritDoc}
     * @see \Laminas\Authentication\Adapter\AdapterInterface::authenticate()
     */
    public function authenticate()
    {
        $userProviderMapper = UserProviderMapper::getInstance($this->adapter);
        $userProvider = $userProviderMapper->fetchOneByIdAndProdiver($this->id, $this->provider);
        
        if(!$userProvider) {
            return new Result(Result::FAILURE_IDENTITY_NOT_FOUND, null, ['ERROR_USER_PROVIDER_NOT_FOUND']);
            
        }
        
        $userMapper = UserMapper::getInstance($this->adapter);
        $user = $userMapper->fetchOne($userProvider->user_id);
        

        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(User::REQUEST_ACCESS_PENDING == $user->request_access) {
            return new Result(Result::FAILURE_UNCATEGORIZED, null, ['ERROR_USER_REQUEST_ACCESS_IS_PENDING']);
        }
        
        
        if(User::REQUEST_ACCESS_REJECTED == $user->request_access) {
            return new Result(Result::FAILURE_UNCATEGORIZED, null, ['ERROR_USER_REQUEST_ACCESS_IS_REJECTED']);
        }

        $user->login_attempt = 0;
        $userMapper->update($user);
        
        $data = [
            'user_id' => $user->id,
            'device_id' => '',
        ];
                        
        return new Result(Result::SUCCESS, $data, []);
    }
}