Proyectos de Subversion LeadersLinked - Services

Rev

Rev 258 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

<?php
declare(strict_types=1);

namespace LeadersLinked\Library;


use Laminas\Db\Adapter\AdapterInterface;
use LeadersLinked\Mapper\UserMapper;
use LeadersLinked\Library\Functions;
use LeadersLinked\Model\User;


class ExternalCredentials
{
    /**
     * 
     * @var ExternalCredentials
     */
    private static $_instancia;
    
    
    /**
     * 
     * @var AdapterInterface
     */
    private $adapter;
    
    /**
     * 
     * @var array
     */
    private $config;
    
    /**
     *
     * @var string
     */
    private $username_xmpp;
    
    /**
     * 
     * @var string
     */
    private $password_xmpp;
    

    
    /**
     * 
     * @param array $config
     * @param AdapterInterface $adapter
     * @return \LeadersLinked\Library\ExternalCredentials
     */
    public static function getInstancia($config, $adapter) 
    {
        if(self::$_instancia == null) {
            self::$_instancia = new ExternalCredentials($config, $adapter);
        }
        
        return self::$_instancia;
    }
    
    
    /**
     * 
     * @param array $config
     * @param AdapterInterface $adapter
     */
    private function __construct($config, $adapter)
    {
        $this->config = $config;
        $this->adapter = $adapter;
    }
    
    
    private function checkAndGetUsername($firstname, $lastname)
    {
        
        
        $firstname = strtolower(trim($firstname));
        if(strpos($firstname, ' ') !== -1) {
            $firstname = explode(' ', $firstname);
            $firstname = Functions::normalizeString($firstname[0]);
        }
        
        $lastname = Functions::normalizeString($lastname);
        
        $username = $firstname . '.' . $lastname;
        if(strlen($username) > 35) {
            $username = substr($username, 0, 30);
        }
        $username = str_replace('-', '.', $username);
        $username = str_replace('..', '.', $username);
        
        
      
        $userMapper = UserMapper::getInstance($this->adapter);
        $userCheck =  $userMapper->fetchLastLikeUsernameXmpp($username);
        if($userCheck) {
            
            $s = $userCheck->username_xmpp;
            $s = substr($s, strlen($username)); 
            $s = str_replace('.', '', $s);
            
            $count = intval($s , 10);
            $count++;
            
            $username = Functions::normalizeString($username . '.' . $count);
            $username = str_replace('..', '.', $username);
            
        
        }
        
        return $username;
        
    }
    
    /**
     * 
     * @param User $user
     */
    public function completeDataFromNewUser($user) 
    {
        $user->username_xmpp = $this->username_xmpp = $this->checkAndGetUsername($user->first_name, $user->last_name);
        $this->password_xmpp  = Functions::generatePassword(32);
        
        
        $user->external_credentials = [
            'password_xmpp' =>  $this->password_xmpp
        ];
        
        
        $user->password_xmpp = sha1( $this->password_xmpp);
    }
    
    /**
     * 
     * @param int $id
     */
    public function getUserBy($id)
    {
        $this->username_xmpp = '';
        $this->password_xmpp = '';
        
        
        $userMapper = UserMapper::getInstance($this->adapter);
        $user = $userMapper->fetchOne($id);
        if($user) {
            
            if($user->status == User::STATUS_DELETED) {
                return;
            }
            
            $needSave = false;
            
            $aes = $this->config['leaderslinked.external_credentials.aes'];
            
            if($user->external_credentials) {
                
                $data = AesCipher::decrypt($aes, $user->external_credentials);
      
                
                $external_credentials = unserialize($data->getData());
                if(!$external_credentials) {
                    $external_credentials = [];
                }
            } else { 
                $external_credentials = [];
            }
            
            if(!empty($external_credentials['password_xmpp'])) {
                $this->password_xmpp = $external_credentials['password_xmpp'];
            }
            
            
            if(!$user->username_xmpp || is_numeric($user->username_xmpp)) {
                $user->username_xmpp = $this->username_xmpp = $this->checkAndGetUsername($user->first_name, $user->last_name);
                $needSave = true;
                
            }
            
            $this->username_xmpp = $user->username_xmpp;
            
            if(!$user->password_xmpp || !$this->password_xmpp) {
                $needSave = true;
                
                $this->password_xmpp  = Functions::generatePassword(32);
                $external_credentials['password_xmpp'] =  $this->password_xmpp;
                
                
                $user->password_xmpp = sha1( $this->password_xmpp);
            } 
            
            
        }
        
        if($needSave) {
            $user->external_credentials = AesCipher::encrypt($aes, serialize($external_credentials));
            if($userMapper->update($user)) {
                
            }
        
        } else {
            
        }
    }
    
    /**
     *
     * @return string
     */
    public function getUsernameXmpp()
    {
        return $this->username_xmpp;
    }
    
    /**
     * 
     * @return string
     */
    public function getPasswordXmpp()
    {
        return $this->password_xmpp;
    }
    
}