]> git.immae.eu Git - github/wallabag/wallabag.git/commitdiff
Validate imported entry to avoid error on import 3816/head
authorJeremy Benoist <jeremy.benoist@gmail.com>
Tue, 18 Dec 2018 12:14:42 +0000 (13:14 +0100)
committerJeremy Benoist <jeremy.benoist@gmail.com>
Thu, 3 Jan 2019 08:42:06 +0000 (09:42 +0100)
We got some imports with a missing `url` field generating some errors while trying to retrieve an existing entry with that url.
Introducing the `validateEntry` allow us to dismiss a message when it doesn't have an url (or other missing stuff in the future)

src/Wallabag/ImportBundle/Consumer/AbstractConsumer.php
src/Wallabag/ImportBundle/Import/AbstractImport.php
src/Wallabag/ImportBundle/Import/BrowserImport.php
src/Wallabag/ImportBundle/Import/ChromeImport.php
src/Wallabag/ImportBundle/Import/FirefoxImport.php
src/Wallabag/ImportBundle/Import/InstapaperImport.php
src/Wallabag/ImportBundle/Import/PinboardImport.php
src/Wallabag/ImportBundle/Import/PocketImport.php
src/Wallabag/ImportBundle/Import/ReadabilityImport.php
src/Wallabag/ImportBundle/Import/WallabagImport.php

index b035f5cc5e83604cf2890dfa035a433a99478b49..e4bfbdf033807fca182b99343d6455d6361e451a 100644 (file)
@@ -52,6 +52,13 @@ abstract class AbstractConsumer
 
         $this->import->setUser($user);
 
+        if (false === $this->import->validateEntry($storedEntry)) {
+            $this->logger->warning('Entry is invalid', ['entry' => $storedEntry]);
+
+            // return true to skip message
+            return true;
+        }
+
         $entry = $this->import->parseEntry($storedEntry);
 
         if (null === $entry) {
index 58a234f46bd357dedf7abd8c14b9cc381b33df37..d39d71b6caf1e3b7def2c0b352b4ceeccdef0840 100644 (file)
@@ -118,6 +118,15 @@ abstract class AbstractImport implements ImportInterface
      */
     abstract public function parseEntry(array $importedEntry);
 
+    /**
+     * Validate that an entry is valid (like has some required keys, etc.).
+     *
+     * @param array $importedEntry
+     *
+     * @return bool
+     */
+    abstract public function validateEntry(array $importedEntry);
+
     /**
      * Fetch content from the ContentProxy (using graby).
      * If it fails return the given entry to be saved in all case (to avoid user to loose the content).
@@ -141,9 +150,9 @@ abstract class AbstractImport implements ImportInterface
     /**
      * Parse and insert all given entries.
      *
-     * @param $entries
+     * @param array $entries
      */
-    protected function parseEntries($entries)
+    protected function parseEntries(array $entries)
     {
         $i = 1;
         $entryToBeFlushed = [];
@@ -153,6 +162,10 @@ abstract class AbstractImport implements ImportInterface
                 $importedEntry = $this->setEntryAsRead($importedEntry);
             }
 
+            if (false === $this->validateEntry($importedEntry)) {
+                continue;
+            }
+
             $entry = $this->parseEntry($importedEntry);
 
             if (null === $entry) {
index 225f1791f5bfe6b6fdc04bba4a2d0abf9cc7c600..4678ae0c5133cfc79e0e18f95a242cab6cea7f5e 100644 (file)
@@ -149,9 +149,9 @@ abstract class BrowserImport extends AbstractImport
     /**
      * Parse and insert all given entries.
      *
-     * @param $entries
+     * @param array $entries
      */
-    protected function parseEntries($entries)
+    protected function parseEntries(array $entries)
     {
         $i = 1;
         $entryToBeFlushed = [];
index 09183abe47cbe321ed8067de34a9f816a6fde97c..eccee69869a1197c59bdf3e500953a4c6867d424 100644 (file)
@@ -30,6 +30,18 @@ class ChromeImport extends BrowserImport
         return 'import.chrome.description';
     }
 
+    /**
+     * {@inheritdoc}
+     */
+    public function validateEntry(array $importedEntry)
+    {
+        if (empty($importedEntry['url'])) {
+            return false;
+        }
+
+        return true;
+    }
+
     /**
      * {@inheritdoc}
      */
index 73269fe164289a11d794a0c5bde7e31a18d2340f..8999e3f3932240accb4096b519af13a31230bdbc 100644 (file)
@@ -30,6 +30,18 @@ class FirefoxImport extends BrowserImport
         return 'import.firefox.description';
     }
 
+    /**
+     * {@inheritdoc}
+     */
+    public function validateEntry(array $importedEntry)
+    {
+        if (empty($importedEntry['uri'])) {
+            return false;
+        }
+
+        return true;
+    }
+
     /**
      * {@inheritdoc}
      */
index e4f0970c0c3f41a531a9d548c46fdc175946e92c..5a18c7c0c6c82c0426ba8d2b436f6beed79b55bc 100644 (file)
@@ -105,6 +105,18 @@ class InstapaperImport extends AbstractImport
         return true;
     }
 
+    /**
+     * {@inheritdoc}
+     */
+    public function validateEntry(array $importedEntry)
+    {
+        if (empty($importedEntry['url'])) {
+            return false;
+        }
+
+        return true;
+    }
+
     /**
      * {@inheritdoc}
      */
index 110b046422ae3c25a7f5be34f59c12e4d11938b2..995d1f2ca99f7ddb0ab330f89fcbb3bb5ff59cf5 100644 (file)
@@ -80,6 +80,18 @@ class PinboardImport extends AbstractImport
         return true;
     }
 
+    /**
+     * {@inheritdoc}
+     */
+    public function validateEntry(array $importedEntry)
+    {
+        if (empty($importedEntry['href'])) {
+            return false;
+        }
+
+        return true;
+    }
+
     /**
      * {@inheritdoc}
      */
index c1b35b7ef028a0e261d9a072e867246eca4816eb..d364338996a652c83684d4d44ce39d960d77364d 100644 (file)
@@ -168,6 +168,18 @@ class PocketImport extends AbstractImport
         $this->client = $client;
     }
 
+    /**
+     * {@inheritdoc}
+     */
+    public function validateEntry(array $importedEntry)
+    {
+        if (empty($importedEntry['resolved_url']) && empty($importedEntry['given_url'])) {
+            return false;
+        }
+
+        return true;
+    }
+
     /**
      * {@inheritdoc}
      *
index 002b27f46b5b2ace08be9f89ad402672496a9c8a..a5f3798e0277f05b4167c6318be47a9cb5d603b7 100644 (file)
@@ -80,6 +80,18 @@ class ReadabilityImport extends AbstractImport
         return true;
     }
 
+    /**
+     * {@inheritdoc}
+     */
+    public function validateEntry(array $importedEntry)
+    {
+        if (empty($importedEntry['article__url'])) {
+            return false;
+        }
+
+        return true;
+    }
+
     /**
      * {@inheritdoc}
      */
index c64ccd64d196095ce8b9e3f913c4f856075f0fa3..350d06001f12202f6c6678b01b5f48da19773ace 100644 (file)
@@ -86,6 +86,18 @@ abstract class WallabagImport extends AbstractImport
         return $this;
     }
 
+    /**
+     * {@inheritdoc}
+     */
+    public function validateEntry(array $importedEntry)
+    {
+        if (empty($importedEntry['url'])) {
+            return false;
+        }
+
+        return true;
+    }
+
     /**
      * {@inheritdoc}
      */