. * */ namespace SP; defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); /** * Class UserPassRecover para la gestión de recuperaciones de claves de usuarios * * @package SP */ class UserPassRecover { /** * Tiempo máximo para recuperar la clave */ const MAX_PASS_RECOVER_TIME = 3600; /** * Número de intentos máximos para recuperar la clave */ const MAX_PASS_RECOVER_LIMIT = 3; const USER_LOGIN_EXIST = 1; const USER_MAIL_EXIST = 2; /** * Comprobar el hash de recuperación de clave. * * @param string $hash con el hash de recuperación * @return int con el Id del usuario */ public static function checkHashPassRecover($hash) { $query = 'SELECT userpassr_userId FROM usrPassRecover ' . 'WHERE userpassr_hash = :hash ' . 'AND userpassr_used = 0 ' . 'AND userpassr_date >= :date ' . 'ORDER BY userpassr_date DESC LIMIT 1'; $data['hash'] = $hash; $data['date'] = time() - self::MAX_PASS_RECOVER_TIME; $queryRes = DB::getResults($query, __FUNCTION__, $data); if ($queryRes === false) { return false; } return $queryRes->userpassr_userId; } /** * Marcar como usado el hash de recuperación de clave. * * @param string $hash con el hash de recuperación * @return bool */ public static function updateHashPassRecover($hash) { $query = 'UPDATE usrPassRecover SET userpassr_used = 1 WHERE userpassr_hash = :hash'; $data['hash'] = $hash; return DB::getQuery($query, __FUNCTION__, $data); } /** * Comprobar el límite de recuperaciones de clave. * * @param string $login con el login del usuario * @return bool */ public static function checkPassRecoverLimit($login) { $query = 'SELECT userpassr_userId ' . 'FROM usrPassRecover ' . 'WHERE userpassr_userId = :id ' . 'AND userpassr_used = 0 ' . 'AND userpassr_date >= :date'; $data['id'] = UserUtil::getUserIdByLogin($login); $data['date'] = time() - self::MAX_PASS_RECOVER_TIME; return (DB::getQuery($query, __FUNCTION__, $data) === false || DB::$lastNumRows >= self::MAX_PASS_RECOVER_LIMIT); } /** * Insertar un registro de recuperación de clave. * * @param string $login con el login del usuario * @param string $hash con el hash para el cambio * @return bool */ public static function addPassRecover($login, $hash) { $query = 'INSERT INTO usrPassRecover SET ' . 'userpassr_userId = :userId,' . 'userpassr_hash = :hash,' . 'userpassr_date = UNIX_TIMESTAMP(),' . 'userpassr_used = 0'; $data['userId'] = UserUtil::getUserIdByLogin($login); $data['hash'] = $hash; return DB::getQuery($query, __FUNCTION__, $data); } }