X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=src%2FWallabag%2FCoreBundle%2FParamConverter%2FUsernameRssTokenConverter.php;fp=src%2FWallabag%2FCoreBundle%2FParamConverter%2FUsernameRssTokenConverter.php;h=ea2bda1750db3584d9973df1037cd11f74d20499;hb=0c83fd5994861efa728097dd151c994796c39ae1;hp=0000000000000000000000000000000000000000;hpb=f98a2a0fc3ae8a5955bb811f083c3d2535f96791;p=github%2Fwallabag%2Fwallabag.git diff --git a/src/Wallabag/CoreBundle/ParamConverter/UsernameRssTokenConverter.php b/src/Wallabag/CoreBundle/ParamConverter/UsernameRssTokenConverter.php new file mode 100644 index 00000000..ea2bda17 --- /dev/null +++ b/src/Wallabag/CoreBundle/ParamConverter/UsernameRssTokenConverter.php @@ -0,0 +1,92 @@ +registry = $registry; + } + + /** + * {@inheritdoc} + * + * Check, if object supported by our converter + */ + public function supports(ParamConverter $configuration) + { + // If there is no manager, this means that only Doctrine DBAL is configured + // In this case we can do nothing and just return + if (null === $this->registry || !count($this->registry->getManagers())) { + return false; + } + + // Check, if option class was set in configuration + if (null === $configuration->getClass()) { + return false; + } + + // Get actual entity manager for class + $em = $this->registry->getManagerForClass($configuration->getClass()); + + // Check, if class name is what we need + if ('Wallabag\CoreBundle\Entity\User' !== $em->getClassMetadata($configuration->getClass())->getName()) { + return false; + } + + return true; + } + + /** + * {@inheritdoc} + * + * Applies converting + * + * @throws \InvalidArgumentException When route attributes are missing + * @throws NotFoundHttpException When object not found + */ + public function apply(Request $request, ParamConverter $configuration) + { + $username = $request->attributes->get('username'); + $rssToken = $request->attributes->get('token'); + + // Check, if route attributes exists + if (null === $username || null === $rssToken) { + throw new \InvalidArgumentException('Route attribute is missing'); + } + + // Get actual entity manager for class + $em = $this->registry->getManagerForClass($configuration->getClass()); + + $userRepository = $em->getRepository($configuration->getClass()); + + // Try to find user by its username and config rss_token + $user = $userRepository->findOneByUsernameAndRsstoken($username, $rssToken); + + if (null === $user || !($user instanceof User)) { + throw new NotFoundHttpException(sprintf('%s not found.', $configuration->getClass())); + } + + // Map found user to the route's parameter + $request->attributes->set($configuration->getName(), $user); + } +}