. */ namespace SP\Repositories\User; use SP\Core\Exceptions\SPException; use SP\Repositories\Repository; use SP\Storage\Database\QueryData; /** * Class UserPassRecoverRepository * * @package SP\Repositories\UserPassRecover */ final class UserPassRecoverRepository extends Repository { /** * Checks recovery limit attempts by user's id and time * * @param int $userId * @param int $time * * @return int * @throws \SP\Core\Exceptions\ConstraintException * @throws \SP\Core\Exceptions\QueryException */ public function getAttemptsByUserId($userId, $time) { $query = /** @lang SQL */ 'SELECT userId FROM UserPassRecover WHERE userId = ? AND used = 0 AND `date` >= ?'; $queryData = new QueryData(); $queryData->setQuery($query); $queryData->setParams([(int)$userId, (int)$time]); return $this->db->doSelect($queryData)->getNumRows(); } /** * Adds a hash for a user's id * * @param int $userId * @param string $hash * * @return int * @throws \SP\Core\Exceptions\ConstraintException * @throws \SP\Core\Exceptions\QueryException */ public function add($userId, $hash) { $query = /** @lang SQL */ 'INSERT INTO UserPassRecover SET userId = ?, `hash` = ?, `date` = UNIX_TIMESTAMP(), used = 0'; $queryData = new QueryData(); $queryData->setQuery($query); $queryData->setParams([(int)$userId, $hash]); $queryData->setOnErrorMessage(__u('Error al generar el hash de recuperación')); return $this->db->doQuery($queryData)->getLastId(); } /** * Toggles a hash used * * @param string $hash * @param int $time * * @return int * @throws SPException */ public function toggleUsedByHash($hash, $time) { $query = /** @lang SQL */ 'UPDATE UserPassRecover SET used = 1 WHERE `hash` = ? AND used = 0 AND `date` >= ? LIMIT 1'; $queryData = new QueryData(); $queryData->setQuery($query); $queryData->setParams([$hash, (int)$time]); $queryData->setOnErrorMessage(__u('Error en comprobación de hash')); return $this->db->doQuery($queryData)->getAffectedNumRows(); } /** * Comprobar el hash de recuperación de clave. * * @param $hash * @param $time * * @return \SP\Storage\Database\QueryResult * @throws \SP\Core\Exceptions\ConstraintException * @throws \SP\Core\Exceptions\QueryException */ public function getUserIdForHash($hash, $time) { $query = /** @lang SQL */ 'SELECT userId FROM UserPassRecover WHERE `hash` = ? AND used = 0 AND `date` >= ? ORDER BY `date` DESC LIMIT 1'; $queryData = new QueryData(); $queryData->setQuery($query); $queryData->setParams([$hash, (int)$time]); return $this->db->doSelect($queryData); } }