. * */ 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) { $configHashMPass = ConfigDB::getValue('masterPwd'); if ($configHashMPass === false) { return false; } if (is_null($configHashMPass)){ $configHashMPass = Crypt::mkHashPassword($masterPwd); ConfigDB::setValue('masterPwd', $configHashMPass); } if (Crypt::checkHashPass($masterPwd, $configHashMPass, true)) { $cryptMPass = Crypt::mkCustomMPassEncrypt(self::getCypherPass(), $masterPwd); if (!$cryptMPass) { 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'] = $cryptMPass[0]; $data['mIV'] = $cryptMPass[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; } }