]> git.immae.eu Git - github/wallabag/wallabag.git/commitdiff
Add a new endpoint to retrieve information from the wallabag instance 3845/head
authorJeremy Benoist <jeremy.benoist@gmail.com>
Tue, 15 Jan 2019 09:17:11 +0000 (10:17 +0100)
committerJeremy Benoist <jeremy.benoist@gmail.com>
Tue, 15 Jan 2019 09:17:11 +0000 (10:17 +0100)
Useful for api client which required some information.
We might add more inside them in the future.

The endpoint /api/version should be avoided now as it contains not so much information rather the version.

app/config/security.yml
src/Wallabag/ApiBundle/Controller/WallabagRestController.php
tests/Wallabag/ApiBundle/Controller/WallabagRestControllerTest.php

index 0318fce12999c2534938358602cba2aae313883c..96489e2683f1fcc6aad294b1578108b970c93a9c 100644 (file)
@@ -57,9 +57,7 @@ security:
                 target: /
 
     access_control:
-        - { path: ^/api/doc, roles: IS_AUTHENTICATED_ANONYMOUSLY }
-        - { path: ^/api/version, roles: IS_AUTHENTICATED_ANONYMOUSLY }
-        - { path: ^/api/user, roles: IS_AUTHENTICATED_ANONYMOUSLY }
+        - { path: ^/api/(doc|version|info|user), roles: IS_AUTHENTICATED_ANONYMOUSLY }
         - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
         - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
         - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
index 7d8cfbba2392ada1e07919e915d8568f034bee54..3c7ad0cfeb177a512906df28c971df82911ba710 100644 (file)
@@ -14,6 +14,8 @@ class WallabagRestController extends FOSRestController
      *
      * @ApiDoc()
      *
+     * @deprecated Should use info endpoint instead
+     *
      * @return JsonResponse
      */
     public function getVersionAction()
@@ -24,6 +26,24 @@ class WallabagRestController extends FOSRestController
         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')) {
index ac4d6cdcfe2b61644667d2a8ce55f1da180cfd5b..8b49c0ae08dbc9f61e8cf5af35c628cd8e00dfe4 100644 (file)
@@ -18,4 +18,21 @@ class WallabagRestControllerTest extends WallabagApiTestCase
 
         $this->assertSame($client->getContainer()->getParameter('wallabag_core.version'), $content);
     }
+
+    public function testGetInfo()
+    {
+        // create a new client instead of using $this->client to be sure client isn't authenticated
+        $client = static::createClient();
+        $client->request('GET', '/api/info');
+
+        $this->assertSame(200, $client->getResponse()->getStatusCode());
+
+        $content = json_decode($client->getResponse()->getContent(), true);
+
+        $this->assertArrayHasKey('appname', $content);
+        $this->assertArrayHasKey('version', $content);
+        $this->assertArrayHasKey('allowed_registration', $content);
+
+        $this->assertSame('wallabag', $content['appname']);
+    }
 }