From 5a9bc00726ddaf7c8798d4932d0a8b7a38422670 Mon Sep 17 00:00:00 2001 From: Jeremy Benoist Date: Mon, 1 May 2017 22:13:17 +0200 Subject: [PATCH] Retrieve username/password from database Inject the current user & the repo to retrieve username/password from the database --- app/config/parameters.yml.dist | 3 -- .../GrabySiteConfigBuilder.php | 32 +++++++++++++------ .../Repository/SiteCredentialRepository.php | 18 +++++++++++ .../CoreBundle/Resources/config/services.yml | 9 +++++- 4 files changed, 49 insertions(+), 13 deletions(-) diff --git a/app/config/parameters.yml.dist b/app/config/parameters.yml.dist index 914fb1ef..b3fe11c8 100644 --- a/app/config/parameters.yml.dist +++ b/app/config/parameters.yml.dist @@ -60,6 +60,3 @@ parameters: redis_port: 6379 redis_path: null redis_password: null - - # sites credentials - sites_credentials: {} diff --git a/src/Wallabag/CoreBundle/GuzzleSiteAuthenticator/GrabySiteConfigBuilder.php b/src/Wallabag/CoreBundle/GuzzleSiteAuthenticator/GrabySiteConfigBuilder.php index 1c56fa9f..94615687 100644 --- a/src/Wallabag/CoreBundle/GuzzleSiteAuthenticator/GrabySiteConfigBuilder.php +++ b/src/Wallabag/CoreBundle/GuzzleSiteAuthenticator/GrabySiteConfigBuilder.php @@ -6,6 +6,8 @@ use BD\GuzzleSiteAuthenticator\SiteConfig\SiteConfig; use BD\GuzzleSiteAuthenticator\SiteConfig\SiteConfigBuilder; use Graby\SiteConfig\ConfigBuilder; use Psr\Log\LoggerInterface; +use Wallabag\CoreBundle\Repository\SiteCredentialRepository; +use Wallabag\UserBundle\Entity\User; class GrabySiteConfigBuilder implements SiteConfigBuilder { @@ -13,26 +15,36 @@ class GrabySiteConfigBuilder implements SiteConfigBuilder * @var ConfigBuilder */ private $grabyConfigBuilder; + /** - * @var array + * @var SiteCredentialRepository */ - private $credentials; + private $credentialRepository; + /** * @var LoggerInterface */ private $logger; + /** + * @var User + */ + private $currentUser; + + /** * GrabySiteConfigBuilder constructor. * - * @param ConfigBuilder $grabyConfigBuilder - * @param array $credentials + * @param ConfigBuilder $grabyConfigBuilder + * @param User $currentUser + * @param SiteCredentialRepository $credentialRepository * @param LoggerInterface $logger */ - public function __construct(ConfigBuilder $grabyConfigBuilder, array $credentials, LoggerInterface $logger) + public function __construct(ConfigBuilder $grabyConfigBuilder, User $currentUser, SiteCredentialRepository $credentialRepository, LoggerInterface $logger) { $this->grabyConfigBuilder = $grabyConfigBuilder; - $this->credentials = $credentials; + $this->credentialRepository = $credentialRepository; + $this->currentUser = $currentUser; $this->logger = $logger; } @@ -47,7 +59,9 @@ class GrabySiteConfigBuilder implements SiteConfigBuilder $host = substr($host, 4); } - if (empty($this->credentials[$host])) { + $credentials = $this->credentialRepository->findOneByHostAndUser($host, $this->currentUser->getId()); + + if (null === $credentials) { $this->logger->debug('Auth: no credentials available for host.', ['host' => $host]); return false; @@ -62,8 +76,8 @@ class GrabySiteConfigBuilder implements SiteConfigBuilder 'passwordField' => $config->login_password_field ?: null, 'extraFields' => $this->processExtraFields($config->login_extra_fields), 'notLoggedInXpath' => $config->not_logged_in_xpath ?: null, - 'username' => $this->credentials[$host]['username'], - 'password' => $this->credentials[$host]['password'], + 'username' => $credentials['username'], + 'password' => $credentials['password'], ]; $config = new SiteConfig($parameters); diff --git a/src/Wallabag/CoreBundle/Repository/SiteCredentialRepository.php b/src/Wallabag/CoreBundle/Repository/SiteCredentialRepository.php index 88aee6d5..316ecc75 100644 --- a/src/Wallabag/CoreBundle/Repository/SiteCredentialRepository.php +++ b/src/Wallabag/CoreBundle/Repository/SiteCredentialRepository.php @@ -7,4 +7,22 @@ namespace Wallabag\CoreBundle\Repository; */ class SiteCredentialRepository extends \Doctrine\ORM\EntityRepository { + /** + * Retrieve one username/password for the given host and userId. + * + * @param string $host + * @param int $userId + * + * @return null|array + */ + public function findOneByHostAndUser($host, $userId) + { + return $this->createQueryBuilder('s') + ->select('s.username', 's.password') + ->where('s.host = :hostname')->setParameter('hostname', $host) + ->andWhere('s.user = :userId')->setParameter('userId', $userId) + ->setMaxResults(1) + ->getQuery() + ->getOneOrNullResult(); + } } diff --git a/src/Wallabag/CoreBundle/Resources/config/services.yml b/src/Wallabag/CoreBundle/Resources/config/services.yml index 4be79547..a59152d3 100644 --- a/src/Wallabag/CoreBundle/Resources/config/services.yml +++ b/src/Wallabag/CoreBundle/Resources/config/services.yml @@ -63,7 +63,8 @@ services: class: Wallabag\CoreBundle\GuzzleSiteAuthenticator\GrabySiteConfigBuilder arguments: - "@wallabag_core.graby.config_builder" - - "%sites_credentials%" + - "@=service('security.token_storage').getToken().getUser()" + - "@wallabag_core.site_credential_repository" - '@logger' tags: - { name: monolog.logger, channel: graby } @@ -120,6 +121,12 @@ services: arguments: - WallabagCoreBundle:Tag + wallabag_core.site_credential_repository: + class: Wallabag\CoreBundle\Repository\SiteCredentialRepository + factory: [ "@doctrine.orm.default_entity_manager", getRepository ] + arguments: + - WallabagCoreBundle:SiteCredential + wallabag_core.helper.entries_export: class: Wallabag\CoreBundle\Helper\EntriesExport arguments: -- 2.41.0