use Psr\Log\LoggerInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage;
use Wallabag\CoreBundle\Repository\SiteCredentialRepository;
-use Wallabag\UserBundle\Entity\User;
class GrabySiteConfigBuilder implements SiteConfigBuilder
{
private $logger;
/**
- * @var User|null
+ * @var TokenStorage
*/
- private $currentUser;
+ private $token;
/**
* GrabySiteConfigBuilder constructor.
- *
- * @param ConfigBuilder $grabyConfigBuilder
- * @param TokenStorage $token
- * @param SiteCredentialRepository $credentialRepository
- * @param LoggerInterface $logger
*/
public function __construct(ConfigBuilder $grabyConfigBuilder, TokenStorage $token, SiteCredentialRepository $credentialRepository, LoggerInterface $logger)
{
$this->grabyConfigBuilder = $grabyConfigBuilder;
$this->credentialRepository = $credentialRepository;
$this->logger = $logger;
-
- if ($token->getToken()) {
- $this->currentUser = $token->getToken()->getUser();
- }
+ $this->token = $token;
}
/**
*/
public function buildForHost($host)
{
+ $user = $this->getUser();
+
// required by credentials below
$host = strtolower($host);
if ('www.' === substr($host, 0, 4)) {
$host = substr($host, 4);
}
- $credentials = null;
- if ($this->currentUser) {
- $credentials = $this->credentialRepository->findOneByHostAndUser($host, $this->currentUser->getId());
+ if (!$user) {
+ $this->logger->debug('Auth: no current user defined.');
+
+ return false;
}
+ $hosts = [$host];
+ // will try to see for a host without the first subdomain (fr.example.org & .example.org)
+ $split = explode('.', $host);
+
+ if (\count($split) > 1) {
+ // remove first subdomain
+ array_shift($split);
+ $hosts[] = '.' . implode('.', $split);
+ }
+
+ $credentials = $this->credentialRepository->findOneByHostsAndUser($hosts, $user->getId());
+
if (null === $credentials) {
$this->logger->debug('Auth: no credentials available for host.', ['host' => $host]);
return $extraFields;
}
+
+ private function getUser()
+ {
+ if ($this->token->getToken() && null !== $this->token->getToken()->getUser()) {
+ return $this->token->getToken()->getUser();
+ }
+
+ return null;
+ }
}