wallabag/src/Wallabag/ApiBundle/Controller/WallabagRestController.php

130 lines
4.3 KiB
PHP
Raw Normal View History

<?php
2015-03-29 08:53:10 +00:00
namespace Wallabag\ApiBundle\Controller;
use Doctrine\ORM\EntityManagerInterface;
2019-05-29 10:00:23 +00:00
use FOS\RestBundle\Controller\AbstractFOSRestController;
use JMS\Serializer\SerializationContext;
2022-08-28 00:01:46 +00:00
use JMS\Serializer\SerializerInterface;
use Nelmio\ApiDocBundle\Annotation\Operation;
use Swagger\Annotations as SWG;
2016-11-03 16:29:16 +00:00
use Symfony\Component\HttpFoundation\JsonResponse;
2022-11-23 11:44:55 +00:00
use Symfony\Component\Routing\Annotation\Route;
2022-08-28 00:01:46 +00:00
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
2016-11-03 17:01:25 +00:00
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
use Symfony\Contracts\Translation\TranslatorInterface;
2022-11-23 14:51:33 +00:00
use Wallabag\UserBundle\Entity\User;
2019-05-29 10:00:23 +00:00
class WallabagRestController extends AbstractFOSRestController
{
protected EntityManagerInterface $entityManager;
protected SerializerInterface $serializer;
protected AuthorizationCheckerInterface $authorizationChecker;
protected TokenStorageInterface $tokenStorage;
protected TranslatorInterface $translator;
public function __construct(EntityManagerInterface $entityManager, SerializerInterface $serializer, AuthorizationCheckerInterface $authorizationChecker, TokenStorageInterface $tokenStorage, TranslatorInterface $translator)
{
$this->entityManager = $entityManager;
$this->serializer = $serializer;
$this->authorizationChecker = $authorizationChecker;
$this->tokenStorage = $tokenStorage;
$this->translator = $translator;
}
2016-03-07 14:00:03 +00:00
/**
2016-03-08 08:22:25 +00:00
* Retrieve version number.
*
* @Operation(
* tags={"Informations"},
* summary="Retrieve version number.",
* @SWG\Response(
* response="200",
* description="Returned when successful"
* )
* )
2016-03-07 14:00:03 +00:00
*
* @deprecated Should use info endpoint instead
*
2022-11-23 11:44:55 +00:00
* @Route("/api/version.{_format}", methods={"GET"}, name="api_get_version", defaults={"_format": "json"})
*
* @return JsonResponse
2016-03-07 14:00:03 +00:00
*/
public function getVersionAction()
{
$version = $this->getParameter('wallabag_core.version');
$json = $this->serializer->serialize($version, 'json');
2016-11-03 16:29:16 +00:00
return (new JsonResponse())->setJson($json);
2016-03-07 14:00:03 +00:00
}
2015-03-29 08:53:10 +00:00
/**
* Retrieve information about the wallabag instance.
*
* @Operation(
* tags={"Informations"},
* summary="Retrieve information about the wallabag instance.",
* @SWG\Response(
* response="200",
* description="Returned when successful"
* )
* )
*
2022-11-23 11:44:55 +00:00
* @Route("/api/info.{_format}", methods={"GET"}, name="api_get_info", defaults={"_format": "json"})
*
* @return JsonResponse
*/
public function getInfoAction()
{
$info = [
'appname' => 'wallabag',
'version' => $this->getParameter('wallabag_core.version'),
'allowed_registration' => $this->getParameter('fosuser_registration'),
];
return (new JsonResponse())->setJson($this->serializer->serialize($info, 'json'));
}
protected function validateAuthentication()
{
if (false === $this->authorizationChecker->isGranted('IS_AUTHENTICATED_FULLY')) {
2015-09-29 12:57:46 +00:00
throw new AccessDeniedException();
}
}
2015-03-29 08:53:10 +00:00
/**
* Validate that the first id is equal to the second one.
2015-05-30 11:52:26 +00:00
* If not, throw exception. It means a user try to access information from an other user.
2015-03-29 08:53:10 +00:00
*
2015-05-30 11:52:26 +00:00
* @param int $requestUserId User id from the requested source
2015-03-29 08:53:10 +00:00
*/
protected function validateUserAccess($requestUserId)
2015-03-29 08:53:10 +00:00
{
$user = $this->tokenStorage->getToken()->getUser();
2022-11-23 14:51:33 +00:00
\assert($user instanceof User);
2017-07-01 07:52:38 +00:00
if ($requestUserId !== $user->getId()) {
throw $this->createAccessDeniedException('Access forbidden. Entry user id: ' . $requestUserId . ', logged user id: ' . $user->getId());
2015-03-29 08:53:10 +00:00
}
}
/**
* Shortcut to send data serialized in json.
*
* @param mixed $data
*
* @return JsonResponse
*/
protected function sendResponse($data)
{
// https://github.com/schmittjoh/JMSSerializerBundle/issues/293
$context = new SerializationContext();
$context->setSerializeNull(true);
$json = $this->serializer->serialize($data, 'json', $context);
return (new JsonResponse())->setJson($json);
}
2015-01-31 18:09:34 +00:00
}