]> git.immae.eu Git - github/wallabag/wallabag.git/commitdiff
Add client_credentials oAuth2 auth method 3227/head
authorThomas Citharel <tcit@tcit.fr>
Wed, 14 Jun 2017 15:30:12 +0000 (17:30 +0200)
committerThomas Citharel <tcit@tcit.fr>
Wed, 14 Jun 2017 15:30:12 +0000 (17:30 +0200)
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
src/Wallabag/ApiBundle/Controller/DeveloperController.php
tests/Wallabag/ApiBundle/Controller/DeveloperControllerTest.php

index 9cb1b626456884cd615ecb4178e0371b6dbdd330..9cb73f4cf0b1778cc29197b6589de0c1ec894b17 100644 (file)
@@ -43,7 +43,7 @@ class DeveloperController extends Controller
         $clientForm->handleRequest($request);
 
         if ($clientForm->isSubmitted() && $clientForm->isValid()) {
-            $client->setAllowedGrantTypes(['token', 'authorization_code', 'password', 'refresh_token']);
+            $client->setAllowedGrantTypes(['client_credentials', 'token', 'authorization_code', 'password', 'refresh_token']);
             $em->persist($client);
             $em->flush();
 
index d37cbbf9b04d360b464c83b5dbb54b821f103fe2..53aed12b6c170dd4086c75980a27a22a03b13c99 100644 (file)
@@ -34,7 +34,7 @@ class DeveloperControllerTest extends WallabagCoreTestCase
         $this->assertContains('My app', $alert[0]);
     }
 
-    public function testCreateToken()
+    public function testCreateTokenFromPasswords()
     {
         $client = $this->getClient();
         $apiClient = $this->createApiClientForUser('admin');
@@ -56,6 +56,26 @@ class DeveloperControllerTest extends WallabagCoreTestCase
         $this->assertArrayHasKey('refresh_token', $data);
     }
 
+    public function testCreateTokenFromClientCredentialsOnly()
+    {
+        $client = $this->getClient();
+        $apiClient = $this->createApiClientForUser('admin', ['client_credentials']);
+
+        $client->request('POST', '/oauth/v2/token', [
+            'grant_type' => 'client_credentials',
+            'client_id' => $apiClient->getPublicId(),
+            'client_secret' => $apiClient->getSecret(),
+        ]);
+
+        $this->assertEquals(200, $client->getResponse()->getStatusCode());
+
+        $data = json_decode($client->getResponse()->getContent(), true);
+        $this->assertArrayHasKey('access_token', $data);
+        $this->assertArrayHasKey('expires_in', $data);
+        $this->assertArrayHasKey('token_type', $data);
+        // Client Credentials created-clients have no refresh tokens
+    }
+
     public function testListingClient()
     {
         $this->logInAs('admin');
@@ -114,9 +134,10 @@ class DeveloperControllerTest extends WallabagCoreTestCase
     /**
      * @param string $username
      *
+     * @param array $grantTypes
      * @return Client
      */
-    private function createApiClientForUser($username)
+    private function createApiClientForUser($username, $grantTypes = ['password'])
     {
         $client = $this->getClient();
         $em = $client->getContainer()->get('doctrine.orm.entity_manager');
@@ -124,7 +145,7 @@ class DeveloperControllerTest extends WallabagCoreTestCase
         $user = $userManager->findUserBy(array('username' => $username));
         $apiClient = new Client($user);
         $apiClient->setName('My app');
-        $apiClient->setAllowedGrantTypes(['password']);
+        $apiClient->setAllowedGrantTypes($grantTypes);
         $em->persist($apiClient);
         $em->flush();