]> git.immae.eu Git - github/wallabag/wallabag.git/blobdiff - src/Wallabag/ApiBundle/Controller/WallabagRestController.php
Factorize sendResponse between Api controllers
[github/wallabag/wallabag.git] / src / Wallabag / ApiBundle / Controller / WallabagRestController.php
index 544c1ea936718413658758b5d2507d71c3566a18..f18b0910d9d05120b5eeee9ec108ed41190ac5a3 100644 (file)
@@ -3,8 +3,10 @@
 namespace Wallabag\ApiBundle\Controller;
 
 use FOS\RestBundle\Controller\FOSRestController;
+use JMS\Serializer\SerializationContext;
+use Nelmio\ApiDocBundle\Annotation\ApiDoc;
+use Symfony\Component\HttpFoundation\JsonResponse;
 use Symfony\Component\Security\Core\Exception\AccessDeniedException;
-use Wallabag\CoreBundle\Entity\Entry;
 
 class WallabagRestController extends FOSRestController
 {
@@ -13,15 +15,36 @@ class WallabagRestController extends FOSRestController
      *
      * @ApiDoc()
      *
+     * @deprecated Should use info endpoint instead
+     *
      * @return JsonResponse
      */
     public function getVersionAction()
     {
         $version = $this->container->getParameter('wallabag_core.version');
-        $json = $this->get('serializer')->serialize($version, 'json');
+        $json = $this->get('jms_serializer')->serialize($version, 'json');
+
         return (new JsonResponse())->setJson($json);
     }
 
+    /**
+     * Retrieve information about the wallabag instance.
+     *
+     * @ApiDoc()
+     *
+     * @return JsonResponse
+     */
+    public function getInfoAction()
+    {
+        $info = [
+            'appname' => 'wallabag',
+            'version' => $this->container->getParameter('wallabag_core.version'),
+            'allowed_registration' => $this->container->getParameter('wallabag_user.registration_enabled'),
+        ];
+
+        return (new JsonResponse())->setJson($this->get('jms_serializer')->serialize($info, 'json'));
+    }
+
     protected function validateAuthentication()
     {
         if (false === $this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_FULLY')) {
@@ -38,8 +61,26 @@ class WallabagRestController extends FOSRestController
     protected function validateUserAccess($requestUserId)
     {
         $user = $this->get('security.token_storage')->getToken()->getUser();
-        if ($requestUserId != $user->getId()) {
-            throw $this->createAccessDeniedException('Access forbidden. Entry user id: '.$requestUserId.', logged user id: '.$user->getId());
+        if ($requestUserId !== $user->getId()) {
+            throw $this->createAccessDeniedException('Access forbidden. Entry user id: ' . $requestUserId . ', logged user id: ' . $user->getId());
         }
     }
+
+    /**
+     * 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->get('jms_serializer')->serialize($data, 'json', $context);
+
+        return (new JsonResponse())->setJson($json);
+    }
 }