Rev 257 | 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 = md5( $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;
}
}