Add Wallabag\CoreBundle\Helper\UrlHasher

Signed-off-by: Olivier Mehani <shtrom@ssji.net>
This commit is contained in:
Olivier Mehani
2019-05-10 22:07:55 +10:00
committed by Jeremy Benoist
parent d5744bf0df
commit 4a5516376b
5 changed files with 79 additions and 21 deletions

View File

@ -7,6 +7,7 @@ use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Wallabag\CoreBundle\Helper\UrlHasher;
use Wallabag\UserBundle\Entity\User;
class GenerateUrlHashesCommand extends ContainerAwareCommand
@ -65,7 +66,9 @@ class GenerateUrlHashesCommand extends ContainerAwareCommand
$i = 1;
foreach ($entries as $entry) {
$entry->setHashedUrl(hash('sha1', $entry->getUrl()));
$entry->setHashedUrl(
UrlHasher::hashUrl($entry->getUrl())
);
$em->persist($entry);
if (0 === ($i % 20)) {

View File

@ -13,6 +13,7 @@ use JMS\Serializer\Annotation\XmlRoot;
use Symfony\Component\Validator\Constraints as Assert;
use Wallabag\AnnotationBundle\Entity\Annotation;
use Wallabag\CoreBundle\Helper\EntityTimestampsTrait;
use Wallabag\CoreBundle\Helper\UrlHasher;
use Wallabag\UserBundle\Entity\User;
/**
@ -324,7 +325,7 @@ class Entry
public function setUrl($url)
{
$this->url = $url;
$this->hashedUrl = hash('sha1', $url);
$this->hashedUrl = UrlHasher::hashUrl($url);
return $this;
}

View File

@ -0,0 +1,22 @@
<?php
namespace Wallabag\CoreBundle\Helper;
/**
* Hash URLs for privacy and performance.
*/
class UrlHasher
{
/** @var string */
const ALGORITHM = 'sha1';
/**
* @param string $url
*
* @return string hashed $url
*/
public static function hashUrl(string $url)
{
return hash(static::ALGORITHM, $url);
}
}

View File

@ -9,6 +9,7 @@ use Pagerfanta\Adapter\DoctrineORMAdapter;
use Pagerfanta\Pagerfanta;
use Wallabag\CoreBundle\Entity\Entry;
use Wallabag\CoreBundle\Entity\Tag;
use Wallabag\CoreBundle\Helper\UrlHasher;
class EntryRepository extends EntityRepository
{
@ -349,7 +350,7 @@ class EntryRepository extends EntityRepository
public function findByUrlAndUserId($url, $userId)
{
return $this->findByHashedUrlAndUserId(
hash('sha1', $url), // XXX: the hash logic would better be in a separate util to avoid duplication with GenerateUrlHashesCommand::generateHashedUrls
UrlHasher::hashUrl($url),
$userId);
}
@ -506,6 +507,32 @@ class EntryRepository extends EntityRepository
return $this->find($randomId);
}
/**
* Inject a UrlHasher.
*
* @param UrlHasher $hasher
*/
public function setUrlHasher(UrlHasher $hasher)
{
$this->urlHasher = $hasher;
}
/**
* Get the UrlHasher, or create a default one if not injected.
*
* XXX: the default uses the default hash algorithm
*
* @return UrlHasher
*/
protected function getUrlHasher()
{
if (!isset($this->urlHasher)) {
$this->setUrlHasher(new UrlHasher());
}
return $this->urlHasher;
}
/**
* Return a query builder to be used by other getBuilderFor* method.
*