Rev 258 | AutorÃa | Comparar con el anterior | Ultima modificación | Ver Log |
<?phpdeclare(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;/**** @var string*/private $username_inmail;/**** @var string*/private $password_inmail;/**** @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);$networkMapper = \LeadersLinked\Mapper\NetworkMapper::getInstance($this->adapter);$network = $networkMapper->fetchOne($user->network_id);$user->username_inmail = $this->username_inmail = $user->username_xmpp . '@' . $network->inmail_domain;$salt = Functions::generatePassword(16);$this->password_inmail = Functions::generatePassword(32);$user->external_credentials = ['password_xmpp' => $this->password_xmpp,'password_inmail' => $this->password_inmail];$user->password_inmail = crypt($this->password_inmail, '$6$' . $salt);$user->password_xmpp = md5( $this->password_xmpp);}/**** @param int $id*/public function getUserBy($id){$this->username_xmpp = '';$this->password_xmpp = '';$this->username_inmail = '';$this->password_inmail = '';$userMapper = UserMapper::getInstance($this->adapter);$user = $userMapper->fetchOne($id);if($user) {if($user->status == User::STATUS_DELETED) {return;}$networkMapper = \LeadersLinked\Mapper\NetworkMapper::getInstance($this->adapter);$network = $networkMapper->fetchOne($user->network_id);$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(!empty($external_credentials['password_inmail'])) {$this->password_inmail = $external_credentials['password_inmail'];}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;}if(!$user->username_inmail || is_numeric($user->username_inmail)) {if(!is_numeric($user->username_xmpp)) {$user->username_inmail = $user->username_xmpp . '@' . $network->inmail_domain;$needSave = true;}}$this->username_xmpp = $user->username_xmpp;$this->username_inmail = $user->username_inmail;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(!$user->password_inmail|| !$this->password_inmail) {$needSave = true;$salt = Functions::generatePassword(16);$this->password_inmail = Functions::generatePassword(32);$external_credentials['password_inmail'] = $this->password_inmail;$user->password_inmail = crypt($this->password_inmail, '$6$' . $salt);}}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;}/**** @return string*/public function getUsernameInmail(){return $this->username_inmail;}/**** @return string*/public function getPasswordInmail(){return $this->password_inmail;}}