]> git.immae.eu Git - github/wallabag/wallabag.git/commitdiff
Added limit
authorNicolas Lœuillet <nicolas@loeuillet.org>
Mon, 1 May 2017 07:21:59 +0000 (09:21 +0200)
committerNicolas Lœuillet <nicolas@loeuillet.org>
Mon, 1 May 2017 07:26:12 +0000 (09:26 +0200)
app/config/config.yml
src/Wallabag/ApiBundle/Controller/EntryRestController.php
src/Wallabag/CoreBundle/DependencyInjection/Configuration.php
src/Wallabag/CoreBundle/DependencyInjection/WallabagCoreExtension.php
tests/Wallabag/ApiBundle/Controller/EntryRestControllerTest.php

index 4f4fb900e325e6950eaf405bf85492d550e75fd7..451809d640557c86c553d39663702c0fdf229ca3 100644 (file)
@@ -55,6 +55,7 @@ wallabag_core:
     list_mode: 0
     fetching_error_message: |
         wallabag can't retrieve contents for this article. Please <a href="http://doc.wallabag.org/en/master/user/errors_during_fetching.html#how-can-i-help-to-fix-that">troubleshoot this issue</a>.
+    api_limit_mass_actions: 10
 
 wallabag_user:
     registration_enabled: "%fosuser_registration%"
index ae6f0e3f5ed61611c5f4d40770da5999dc88126b..7c3e778ef69a8161170183cb39d58a5425e13172 100644 (file)
@@ -5,6 +5,7 @@ namespace Wallabag\ApiBundle\Controller;
 use Hateoas\Configuration\Route;
 use Hateoas\Representation\Factory\PagerfantaFactory;
 use Nelmio\ApiDocBundle\Annotation\ApiDoc;
+use Symfony\Component\Config\Definition\Exception\Exception;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\JsonResponse;
 use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
@@ -229,6 +230,8 @@ class EntryRestController extends WallabagRestController
      * )
      *
      * @return JsonResponse
+     *
+     * @throws Symfony\Component\Config\Definition\Exception\Exception When limit is reached
      */
     public function postEntriesListAction(Request $request)
     {
@@ -237,6 +240,12 @@ class EntryRestController extends WallabagRestController
         $urls = json_decode($request->query->get('urls', []));
         $results = [];
 
+        $limit = $this->container->getParameter('wallabag_core.api_limit_mass_actions');
+
+        if (count($urls) > $limit) {
+            throw new Exception('API limit reached');
+        }
+
         // handle multiple urls
         if (!empty($urls)) {
             foreach ($urls as $key => $url) {
index 006a18c397a6ceea925ef29dcd5ea254c528eb52..75b37729f38eb601c093bd9b786602c63b4c5291 100644 (file)
@@ -47,6 +47,9 @@ class Configuration implements ConfigurationInterface
                 ->scalarNode('list_mode')
                     ->defaultValue(1)
                 ->end()
+                ->scalarNode('api_limit_mass_actions')
+                    ->defaultValue(10)
+                ->end()
             ->end()
         ;
 
index aa9ee339adebd24a1e7d9282eb6b70714396e740..c075c19fd993c48d6c77ee88bf34f545d8d3e336 100644 (file)
@@ -26,6 +26,7 @@ class WallabagCoreExtension extends Extension
         $container->setParameter('wallabag_core.action_mark_as_read', $config['action_mark_as_read']);
         $container->setParameter('wallabag_core.list_mode', $config['list_mode']);
         $container->setParameter('wallabag_core.fetching_error_message', $config['fetching_error_message']);
+        $container->setParameter('wallabag_core.api_limit_mass_actions', $config['api_limit_mass_actions']);
 
         $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
         $loader->load('services.yml');
index 88a5be93b66d2adbf987e05b8a1a692c7de2dc3a..8594ad0b4391272352cbe8912c6577bca44fe80d 100644 (file)
@@ -809,4 +809,27 @@ class EntryRestControllerTest extends WallabagApiTestCase
         $this->assertFalse($content[1]['entry']);
         $this->assertEquals('http://0.0.0.0/entry3', $content[1]['url']);
     }
+
+    /**
+     * @expectedException Symfony\Component\Config\Definition\Exception\Exception
+     * @expectedExceptionMessage API limit reached
+     */
+    public function testLimitBulkAction()
+    {
+        $list = [
+            'http://0.0.0.0/entry1',
+            'http://0.0.0.0/entry1',
+            'http://0.0.0.0/entry1',
+            'http://0.0.0.0/entry1',
+            'http://0.0.0.0/entry1',
+            'http://0.0.0.0/entry1',
+            'http://0.0.0.0/entry1',
+            'http://0.0.0.0/entry1',
+            'http://0.0.0.0/entry1',
+            'http://0.0.0.0/entry1',
+            'http://0.0.0.0/entry1',
+        ];
+
+        $this->client->request('POST', '/api/entries/lists?urls='.json_encode($list));
+    }
 }