Fix API allowed_registration

Two configuration options need to be enabled to allow user registration via the API:
1) fosuser_registration, which indicates whether registration is allowed at all (frontend and API)
2) api_user_registration, which indicates whether registration is allowed via the API
This commit is contained in:
Casper Meijn 2023-02-17 10:46:07 +01:00
parent 2f665f0257
commit 5a5148707c
2 changed files with 32 additions and 2 deletions

View file

@ -2,6 +2,7 @@
namespace Wallabag\ApiBundle\Controller;
use Craue\ConfigBundle\Util\Config;
use Doctrine\ORM\EntityManagerInterface;
use FOS\RestBundle\Controller\AbstractFOSRestController;
use JMS\Serializer\SerializationContext;
@ -75,12 +76,12 @@ class WallabagRestController extends AbstractFOSRestController
*
* @return JsonResponse
*/
public function getInfoAction()
public function getInfoAction(Config $craueConfig)
{
$info = [
'appname' => 'wallabag',
'version' => $this->getParameter('wallabag_core.version'),
'allowed_registration' => $this->getParameter('fosuser_registration'),
'allowed_registration' => $this->getParameter('fosuser_registration') && $craueConfig->get('api_user_registration'),
];
return (new JsonResponse())->setJson($this->serializer->serialize($info, 'json'));

View file

@ -2,6 +2,7 @@
namespace Tests\Wallabag\ApiBundle\Controller;
use Craue\ConfigBundle\Util\Config;
use Tests\Wallabag\ApiBundle\WallabagApiTestCase;
class WallabagRestControllerTest extends WallabagApiTestCase
@ -35,4 +36,32 @@ class WallabagRestControllerTest extends WallabagApiTestCase
$this->assertSame('wallabag', $content['appname']);
}
public function testAllowedRegistration()
{
// create a new client instead of using $this->client to be sure client isn't authenticated
$client = static::createClient();
if (!$client->getContainer()->getParameter('fosuser_registration')) {
$this->markTestSkipped('fosuser_registration is not enabled.');
return;
}
$client->getContainer()->get(Config::class)->set('api_user_registration', 1);
$client->request('GET', '/api/info');
$content = json_decode($client->getResponse()->getContent(), true);
$this->assertTrue($content['allowed_registration']);
$client->getContainer()->get(Config::class)->set('api_user_registration', 0);
$client->request('GET', '/api/info');
$content = json_decode($client->getResponse()->getContent(), true);
$this->assertFalse($content['allowed_registration']);
}
}