diff options
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: | |||
60 | redis_port: 6379 | 60 | redis_port: 6379 |
61 | redis_path: null | 61 | redis_path: null |
62 | redis_password: null | 62 | redis_password: null |
63 | |||
64 | # sites credentials | ||
65 | 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; | |||
6 | use BD\GuzzleSiteAuthenticator\SiteConfig\SiteConfigBuilder; | 6 | use BD\GuzzleSiteAuthenticator\SiteConfig\SiteConfigBuilder; |
7 | use Graby\SiteConfig\ConfigBuilder; | 7 | use Graby\SiteConfig\ConfigBuilder; |
8 | use Psr\Log\LoggerInterface; | 8 | use Psr\Log\LoggerInterface; |
9 | use Wallabag\CoreBundle\Repository\SiteCredentialRepository; | ||
10 | use Wallabag\UserBundle\Entity\User; | ||
9 | 11 | ||
10 | class GrabySiteConfigBuilder implements SiteConfigBuilder | 12 | class GrabySiteConfigBuilder implements SiteConfigBuilder |
11 | { | 13 | { |
@@ -13,26 +15,36 @@ class GrabySiteConfigBuilder implements SiteConfigBuilder | |||
13 | * @var ConfigBuilder | 15 | * @var ConfigBuilder |
14 | */ | 16 | */ |
15 | private $grabyConfigBuilder; | 17 | private $grabyConfigBuilder; |
18 | |||
16 | /** | 19 | /** |
17 | * @var array | 20 | * @var SiteCredentialRepository |
18 | */ | 21 | */ |
19 | private $credentials; | 22 | private $credentialRepository; |
23 | |||
20 | /** | 24 | /** |
21 | * @var LoggerInterface | 25 | * @var LoggerInterface |
22 | */ | 26 | */ |
23 | private $logger; | 27 | private $logger; |
24 | 28 | ||
25 | /** | 29 | /** |
30 | * @var User | ||
31 | */ | ||
32 | private $currentUser; | ||
33 | |||
34 | |||
35 | /** | ||
26 | * GrabySiteConfigBuilder constructor. | 36 | * GrabySiteConfigBuilder constructor. |
27 | * | 37 | * |
28 | * @param ConfigBuilder $grabyConfigBuilder | 38 | * @param ConfigBuilder $grabyConfigBuilder |
29 | * @param array $credentials | 39 | * @param User $currentUser |
40 | * @param SiteCredentialRepository $credentialRepository | ||
30 | * @param LoggerInterface $logger | 41 | * @param LoggerInterface $logger |
31 | */ | 42 | */ |
32 | public function __construct(ConfigBuilder $grabyConfigBuilder, array $credentials, LoggerInterface $logger) | 43 | public function __construct(ConfigBuilder $grabyConfigBuilder, User $currentUser, SiteCredentialRepository $credentialRepository, LoggerInterface $logger) |
33 | { | 44 | { |
34 | $this->grabyConfigBuilder = $grabyConfigBuilder; | 45 | $this->grabyConfigBuilder = $grabyConfigBuilder; |
35 | $this->credentials = $credentials; | 46 | $this->credentialRepository = $credentialRepository; |
47 | $this->currentUser = $currentUser; | ||
36 | $this->logger = $logger; | 48 | $this->logger = $logger; |
37 | } | 49 | } |
38 | 50 | ||
@@ -47,7 +59,9 @@ class GrabySiteConfigBuilder implements SiteConfigBuilder | |||
47 | $host = substr($host, 4); | 59 | $host = substr($host, 4); |
48 | } | 60 | } |
49 | 61 | ||
50 | if (empty($this->credentials[$host])) { | 62 | $credentials = $this->credentialRepository->findOneByHostAndUser($host, $this->currentUser->getId()); |
63 | |||
64 | if (null === $credentials) { | ||
51 | $this->logger->debug('Auth: no credentials available for host.', ['host' => $host]); | 65 | $this->logger->debug('Auth: no credentials available for host.', ['host' => $host]); |
52 | 66 | ||
53 | return false; | 67 | return false; |
@@ -62,8 +76,8 @@ class GrabySiteConfigBuilder implements SiteConfigBuilder | |||
62 | 'passwordField' => $config->login_password_field ?: null, | 76 | 'passwordField' => $config->login_password_field ?: null, |
63 | 'extraFields' => $this->processExtraFields($config->login_extra_fields), | 77 | 'extraFields' => $this->processExtraFields($config->login_extra_fields), |
64 | 'notLoggedInXpath' => $config->not_logged_in_xpath ?: null, | 78 | 'notLoggedInXpath' => $config->not_logged_in_xpath ?: null, |
65 | 'username' => $this->credentials[$host]['username'], | 79 | 'username' => $credentials['username'], |
66 | 'password' => $this->credentials[$host]['password'], | 80 | 'password' => $credentials['password'], |
67 | ]; | 81 | ]; |
68 | 82 | ||
69 | $config = new SiteConfig($parameters); | 83 | $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; | |||
7 | */ | 7 | */ |
8 | class SiteCredentialRepository extends \Doctrine\ORM\EntityRepository | 8 | class SiteCredentialRepository extends \Doctrine\ORM\EntityRepository |
9 | { | 9 | { |
10 | /** | ||
11 | * Retrieve one username/password for the given host and userId. | ||
12 | * | ||
13 | * @param string $host | ||
14 | * @param int $userId | ||
15 | * | ||
16 | * @return null|array | ||
17 | */ | ||
18 | public function findOneByHostAndUser($host, $userId) | ||
19 | { | ||
20 | return $this->createQueryBuilder('s') | ||
21 | ->select('s.username', 's.password') | ||
22 | ->where('s.host = :hostname')->setParameter('hostname', $host) | ||
23 | ->andWhere('s.user = :userId')->setParameter('userId', $userId) | ||
24 | ->setMaxResults(1) | ||
25 | ->getQuery() | ||
26 | ->getOneOrNullResult(); | ||
27 | } | ||
10 | } | 28 | } |
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: | |||
63 | class: Wallabag\CoreBundle\GuzzleSiteAuthenticator\GrabySiteConfigBuilder | 63 | class: Wallabag\CoreBundle\GuzzleSiteAuthenticator\GrabySiteConfigBuilder |
64 | arguments: | 64 | arguments: |
65 | - "@wallabag_core.graby.config_builder" | 65 | - "@wallabag_core.graby.config_builder" |
66 | - "%sites_credentials%" | 66 | - "@=service('security.token_storage').getToken().getUser()" |
67 | - "@wallabag_core.site_credential_repository" | ||
67 | - '@logger' | 68 | - '@logger' |
68 | tags: | 69 | tags: |
69 | - { name: monolog.logger, channel: graby } | 70 | - { name: monolog.logger, channel: graby } |
@@ -120,6 +121,12 @@ services: | |||
120 | arguments: | 121 | arguments: |
121 | - WallabagCoreBundle:Tag | 122 | - WallabagCoreBundle:Tag |
122 | 123 | ||
124 | wallabag_core.site_credential_repository: | ||
125 | class: Wallabag\CoreBundle\Repository\SiteCredentialRepository | ||
126 | factory: [ "@doctrine.orm.default_entity_manager", getRepository ] | ||
127 | arguments: | ||
128 | - WallabagCoreBundle:SiteCredential | ||
129 | |||
123 | wallabag_core.helper.entries_export: | 130 | wallabag_core.helper.entries_export: |
124 | class: Wallabag\CoreBundle\Helper\EntriesExport | 131 | class: Wallabag\CoreBundle\Helper\EntriesExport |
125 | arguments: | 132 | arguments: |