. * */ namespace SP; defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); /** * Class User * * @package SP */ class User extends UserBase { /** * Actualizar la clave maestra del usuario en la BBDD. * * @param string $masterPwd con la clave maestra * @return bool */ public function updateUserMPass($masterPwd) { $configMPass = ConfigDB::getValue('masterPwd'); if (!$configMPass) { return false; } if (Crypt::checkHashPass($masterPwd, $configMPass, true)) { $strUserMPwd = Crypt::mkCustomMPassEncrypt(self::getCypherPass(), $masterPwd); if (!$strUserMPwd) { return false; } } else { return false; } $query = 'UPDATE usrData SET ' . 'user_mPass = :mPass,' . 'user_mIV = :mIV,' . 'user_lastUpdateMPass = UNIX_TIMESTAMP() ' . 'WHERE user_id = :id LIMIT 1'; $data['mPass'] = $strUserMPwd[0]; $data['mIV'] = $strUserMPwd[1]; $data['id'] = $this->_userId; return DB::getQuery($query, __FUNCTION__, $data); } /** * Obtener una clave de cifrado basada en la clave del usuario y un salt. * * @return string con la clave de cifrado */ private function getCypherPass() { return Crypt::generateAesKey($this->_userPass . $this->_userLogin); } /** * Desencriptar la clave maestra del usuario para la sesión. * * @param bool $showPass opcional, para devolver la clave desencriptada * @return false|string Devuelve bool se hay error o string si se devuelve la clave */ public function getUserMPass($showPass = false) { $query = 'SELECT user_mPass, user_mIV FROM usrData WHERE user_id = :id LIMIT 1'; $data['id'] = $this->_userId; $queryRes = DB::getResults($query, __FUNCTION__, $data); if ($queryRes === false) { return false; } if ($queryRes->user_mPass && $queryRes->user_mIV) { $clearMasterPass = Crypt::getDecrypt($queryRes->user_mPass, $queryRes->user_mIV, $this->getCypherPass()); if (!$clearMasterPass) { return false; } return ($showPass == true) ? $clearMasterPass : SessionUtil::saveSessionMPass($clearMasterPass); } return false; } }