Add a new endpoint to retrieve information from the wallabag instance

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.
This commit is contained in:
Jeremy Benoist 2019-01-15 10:17:11 +01:00
parent 3afc87426d
commit 3bd65991ad
No known key found for this signature in database
GPG key ID: BCA73962457ACC3C
3 changed files with 38 additions and 3 deletions

View 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 }

View 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')) {

View 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']);
}
}