diff --git a/src/Controller/HomeController.php b/src/Controller/HomeController.php index 022d62f..ac77a62 100644 --- a/src/Controller/HomeController.php +++ b/src/Controller/HomeController.php @@ -5,15 +5,19 @@ namespace App\Controller; use KnpU\OAuth2ClientBundle\Client\ClientRegistry; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\SecurityBundle\Security; +use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Routing\RouterInterface; class HomeController extends AbstractController { - public function __construct(private readonly RouterInterface $router) - { + public function __construct( + private readonly RouterInterface $router, + private readonly ParameterBagInterface $parameterBag, + ) { } #[Route(path: '/', name: 'index')] @@ -25,7 +29,10 @@ class HomeController extends AbstractController #[Route(path: '/login/oauth', name: 'oauth_connect')] public function connectAction(ClientRegistry $clientRegistry): Response { - return $clientRegistry->getClient('oauth')->redirect([], []); + if ($this->parameterBag->get('oauth_enabled')) { + return $clientRegistry->getClient('oauth')->redirect([], []); + } + throw new NotFoundHttpException(); } #[Route(path: '/logout', name: 'logout')] diff --git a/tests/Controller/ConnectorControllerTest.php b/tests/Controller/ConnectorControllerTest.php index 5f816d5..b25a129 100644 --- a/tests/Controller/ConnectorControllerTest.php +++ b/tests/Controller/ConnectorControllerTest.php @@ -7,18 +7,15 @@ use App\Entity\Connector; use App\Factory\UserFactory; use App\Tests\AuthenticatedUserTrait; use Zenstruck\Foundry\Test\Factories; -use Zenstruck\Foundry\Test\ResetDatabase; final class ConnectorControllerTest extends ApiTestCase { - use ResetDatabase; use Factories; use AuthenticatedUserTrait; public function testGetConnectorCollection(): void { - $testUser = UserFactory::createOne(); - $client = ConnectorControllerTest::createClientWithCredentials(ConnectorControllerTest::getToken($testUser)); + $client = ConnectorControllerTest::createClientWithCredentials(ConnectorControllerTest::getToken(UserFactory::createOne())); $response = $client->request('GET', '/api/connectors'); @@ -26,4 +23,50 @@ final class ConnectorControllerTest extends ApiTestCase $this->assertMatchesResourceCollectionJsonSchema(Connector::class); $this->assertCount(0, $response->toArray()['hydra:member']); } + + public function testCreateConnectorInvalidAuthData(): void + { + $client = ConnectorControllerTest::createClientWithCredentials(ConnectorControllerTest::getToken(UserFactory::createOne())); + $client->request('POST', '/api/connectors', ['json' => [ + 'authData' => [ + 'waiveRetractationPeriod' => true, + 'acceptConditions' => true, + 'ownerLegalAge' => true, + 'token' => '', + ], + 'provider' => 'gandi', + ]]); + $this->assertResponseStatusCodeSame(400); + } + + public function testCreateConnectorInvalidConsent(): void + { + $client = ConnectorControllerTest::createClientWithCredentials(ConnectorControllerTest::getToken(UserFactory::createOne())); + $client->request('POST', '/api/connectors', ['json' => [ + 'authData' => [ + 'waiveRetractationPeriod' => true, + 'acceptConditions' => true, + 'ownerLegalAge' => false, + 'token' => '', + ], + 'provider' => 'gandi', + ]]); + $this->assertResponseStatusCodeSame(451); + } + + public function testCreateConnectorInvalidAuthDataAdditionalKey(): void + { + $client = ConnectorControllerTest::createClientWithCredentials(ConnectorControllerTest::getToken(UserFactory::createOne())); + $client->request('POST', '/api/connectors', ['json' => [ + 'authData' => [ + 'waiveRetractationPeriod' => true, + 'acceptConditions' => true, + 'ownerLegalAge' => true, + 'token' => '', + 'unknownKey' => 'hello', + ], + 'provider' => 'gandi', + ]]); + $this->assertResponseStatusCodeSame(400); + } } diff --git a/tests/Controller/HomeControllerTest.php b/tests/Controller/HomeControllerTest.php new file mode 100644 index 0000000..8aa5161 --- /dev/null +++ b/tests/Controller/HomeControllerTest.php @@ -0,0 +1,24 @@ +request('GET', '/'); + + $this->assertResponseIsSuccessful(); + } + + public function testConnectSsoReturnNotFound(): void + { + $client = static::createClient(); + $client->request('GET', '/login/oauth'); + + $this->assertResponseStatusCodeSame(404); + } +}