mirror of
https://github.com/wallabag/wallabag.git
synced 2024-12-17 13:16:28 +00:00
Merge pull request #4063 from wallabag/fix/cookiejar
Use a custom cookiejar to avoid error when the cookie is badly saved
This commit is contained in:
commit
3a9aa28558
3 changed files with 129 additions and 35 deletions
67
composer.lock
generated
67
composer.lock
generated
|
@ -1470,16 +1470,16 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "egulias/email-validator",
|
"name": "egulias/email-validator",
|
||||||
"version": "2.1.9",
|
"version": "2.1.10",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/egulias/EmailValidator.git",
|
"url": "https://github.com/egulias/EmailValidator.git",
|
||||||
"reference": "128cc721d771ec2c46ce59698f4ca42b73f71b25"
|
"reference": "a6c8d7101b19a451c1707b1b79bbbc56e4bdb7ec"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/egulias/EmailValidator/zipball/128cc721d771ec2c46ce59698f4ca42b73f71b25",
|
"url": "https://api.github.com/repos/egulias/EmailValidator/zipball/a6c8d7101b19a451c1707b1b79bbbc56e4bdb7ec",
|
||||||
"reference": "128cc721d771ec2c46ce59698f4ca42b73f71b25",
|
"reference": "a6c8d7101b19a451c1707b1b79bbbc56e4bdb7ec",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
@ -1489,7 +1489,8 @@
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"dominicsayers/isemail": "dev-master",
|
"dominicsayers/isemail": "dev-master",
|
||||||
"phpunit/phpunit": "^4.8.35||^5.7||^6.0",
|
"phpunit/phpunit": "^4.8.35||^5.7||^6.0",
|
||||||
"satooshi/php-coveralls": "^1.0.1"
|
"satooshi/php-coveralls": "^1.0.1",
|
||||||
|
"symfony/phpunit-bridge": "^4.4@dev"
|
||||||
},
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
"ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation"
|
"ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation"
|
||||||
|
@ -1523,7 +1524,7 @@
|
||||||
"validation",
|
"validation",
|
||||||
"validator"
|
"validator"
|
||||||
],
|
],
|
||||||
"time": "2019-06-23T10:14:27+00:00"
|
"time": "2019-07-19T20:52:08+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "electrolinux/php-html5lib",
|
"name": "electrolinux/php-html5lib",
|
||||||
|
@ -3673,16 +3674,16 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "j0k3r/graby-site-config",
|
"name": "j0k3r/graby-site-config",
|
||||||
"version": "1.0.86",
|
"version": "1.0.88",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/j0k3r/graby-site-config.git",
|
"url": "https://github.com/j0k3r/graby-site-config.git",
|
||||||
"reference": "9c0ae4ee74e737c6ccf913da9bcb169850d38a30"
|
"reference": "b485a36c31736b8834ebf62f42bd97fb333eefa7"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/j0k3r/graby-site-config/zipball/9c0ae4ee74e737c6ccf913da9bcb169850d38a30",
|
"url": "https://api.github.com/repos/j0k3r/graby-site-config/zipball/b485a36c31736b8834ebf62f42bd97fb333eefa7",
|
||||||
"reference": "9c0ae4ee74e737c6ccf913da9bcb169850d38a30",
|
"reference": "b485a36c31736b8834ebf62f42bd97fb333eefa7",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
@ -3709,7 +3710,7 @@
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"description": "Graby site config files",
|
"description": "Graby site config files",
|
||||||
"time": "2019-06-25T10:46:50+00:00"
|
"time": "2019-07-23T15:40:40+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "j0k3r/httplug-ssrf-plugin",
|
"name": "j0k3r/httplug-ssrf-plugin",
|
||||||
|
@ -5162,16 +5163,16 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "pagerfanta/pagerfanta",
|
"name": "pagerfanta/pagerfanta",
|
||||||
"version": "v2.1.2",
|
"version": "v2.1.3",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/whiteoctober/Pagerfanta.git",
|
"url": "https://github.com/whiteoctober/Pagerfanta.git",
|
||||||
"reference": "45a85ad426316ae37f2d007022e5b4c95bc3aef4"
|
"reference": "a53ff01d521648d9dbca19b93ac6bc75a59b0972"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/whiteoctober/Pagerfanta/zipball/45a85ad426316ae37f2d007022e5b4c95bc3aef4",
|
"url": "https://api.github.com/repos/whiteoctober/Pagerfanta/zipball/a53ff01d521648d9dbca19b93ac6bc75a59b0972",
|
||||||
"reference": "45a85ad426316ae37f2d007022e5b4c95bc3aef4",
|
"reference": "a53ff01d521648d9dbca19b93ac6bc75a59b0972",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
@ -5227,7 +5228,7 @@
|
||||||
"paginator",
|
"paginator",
|
||||||
"paging"
|
"paging"
|
||||||
],
|
],
|
||||||
"time": "2019-04-02T08:50:39+00:00"
|
"time": "2019-07-17T20:56:16+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "paragonie/random_compat",
|
"name": "paragonie/random_compat",
|
||||||
|
@ -7016,16 +7017,16 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "scheb/two-factor-bundle",
|
"name": "scheb/two-factor-bundle",
|
||||||
"version": "v3.19.1",
|
"version": "v3.21.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/scheb/two-factor-bundle.git",
|
"url": "https://github.com/scheb/two-factor-bundle.git",
|
||||||
"reference": "634b9b40ea0b6769f274ac994067f08012d96c44"
|
"reference": "94cc6f2e0fd8a7b683246d95fcad9b15ca828fc6"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/scheb/two-factor-bundle/zipball/634b9b40ea0b6769f274ac994067f08012d96c44",
|
"url": "https://api.github.com/repos/scheb/two-factor-bundle/zipball/94cc6f2e0fd8a7b683246d95fcad9b15ca828fc6",
|
||||||
"reference": "634b9b40ea0b6769f274ac994067f08012d96c44",
|
"reference": "94cc6f2e0fd8a7b683246d95fcad9b15ca828fc6",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
@ -7074,7 +7075,7 @@
|
||||||
"two-factor",
|
"two-factor",
|
||||||
"two-step"
|
"two-step"
|
||||||
],
|
],
|
||||||
"time": "2019-07-01T19:12:43+00:00"
|
"time": "2019-07-12T16:11:05+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "sensio/distribution-bundle",
|
"name": "sensio/distribution-bundle",
|
||||||
|
@ -7203,7 +7204,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "sensiolabs/security-checker",
|
"name": "sensiolabs/security-checker",
|
||||||
"version": "v6.0.1",
|
"version": "v6.0.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/sensiolabs/security-checker.git",
|
"url": "https://github.com/sensiolabs/security-checker.git",
|
||||||
|
@ -8076,7 +8077,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Gert de Pagter",
|
"name": "Gert de Pagter",
|
||||||
"email": "BackEndTea@gmail.com"
|
"email": "backendtea@gmail.com"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"description": "Symfony polyfill for ctype functions",
|
"description": "Symfony polyfill for ctype functions",
|
||||||
|
@ -9436,16 +9437,16 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "zendframework/zend-diactoros",
|
"name": "zendframework/zend-diactoros",
|
||||||
"version": "2.1.2",
|
"version": "2.1.3",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/zendframework/zend-diactoros.git",
|
"url": "https://github.com/zendframework/zend-diactoros.git",
|
||||||
"reference": "37bf68b428850ee26ed7c3be6c26236dd95a95f1"
|
"reference": "279723778c40164bcf984a2df12ff2c6ec5e61c1"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/37bf68b428850ee26ed7c3be6c26236dd95a95f1",
|
"url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/279723778c40164bcf984a2df12ff2c6ec5e61c1",
|
||||||
"reference": "37bf68b428850ee26ed7c3be6c26236dd95a95f1",
|
"reference": "279723778c40164bcf984a2df12ff2c6ec5e61c1",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
@ -9498,7 +9499,7 @@
|
||||||
"psr",
|
"psr",
|
||||||
"psr-7"
|
"psr-7"
|
||||||
],
|
],
|
||||||
"time": "2019-04-29T21:11:00+00:00"
|
"time": "2019-07-10T16:13:25+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "zendframework/zend-eventmanager",
|
"name": "zendframework/zend-eventmanager",
|
||||||
|
@ -9723,16 +9724,16 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "doctrine/data-fixtures",
|
"name": "doctrine/data-fixtures",
|
||||||
"version": "v1.3.1",
|
"version": "v1.3.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/doctrine/data-fixtures.git",
|
"url": "https://github.com/doctrine/data-fixtures.git",
|
||||||
"reference": "3a1e2c3c600e615a2dffe56d4ca0875cc5233e0a"
|
"reference": "09b16943b27f3d80d63988d100ff256148c2f78b"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/3a1e2c3c600e615a2dffe56d4ca0875cc5233e0a",
|
"url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/09b16943b27f3d80d63988d100ff256148c2f78b",
|
||||||
"reference": "3a1e2c3c600e615a2dffe56d4ca0875cc5233e0a",
|
"reference": "09b16943b27f3d80d63988d100ff256148c2f78b",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
@ -9779,7 +9780,7 @@
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"database"
|
"database"
|
||||||
],
|
],
|
||||||
"time": "2018-03-20T09:06:36+00:00"
|
"time": "2019-07-10T18:30:35+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "doctrine/doctrine-fixtures-bundle",
|
"name": "doctrine/doctrine-fixtures-bundle",
|
||||||
|
|
91
src/Wallabag/CoreBundle/Helper/FileCookieJar.php
Normal file
91
src/Wallabag/CoreBundle/Helper/FileCookieJar.php
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Wallabag\CoreBundle\Helper;
|
||||||
|
|
||||||
|
use GuzzleHttp\Cookie\FileCookieJar as BaseFileCookieJar;
|
||||||
|
use GuzzleHttp\Cookie\SetCookie;
|
||||||
|
use GuzzleHttp\Utils;
|
||||||
|
use Psr\Log\LoggerInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Overidden Cookie behavior to:
|
||||||
|
* - fix multiple concurrent writes (see https://github.com/guzzle/guzzle/pull/1884)
|
||||||
|
* - ignore error when the cookie file is malformatted (resulting in clearing it).
|
||||||
|
*/
|
||||||
|
class FileCookieJar extends BaseFileCookieJar
|
||||||
|
{
|
||||||
|
private $logger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param LoggerInterface $logger Only used to log info when something goes wrong
|
||||||
|
* @param string $cookieFile File to store the cookie data
|
||||||
|
*/
|
||||||
|
public function __construct(LoggerInterface $logger, $cookieFile)
|
||||||
|
{
|
||||||
|
parent::__construct($cookieFile);
|
||||||
|
|
||||||
|
$this->logger = $logger;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Saves the cookies to a file.
|
||||||
|
*
|
||||||
|
* @param string $filename File to save
|
||||||
|
*
|
||||||
|
* @throws \RuntimeException if the file cannot be found or created
|
||||||
|
*/
|
||||||
|
public function save($filename)
|
||||||
|
{
|
||||||
|
$json = [];
|
||||||
|
foreach ($this as $cookie) {
|
||||||
|
if ($cookie->getExpires() && !$cookie->getDiscard()) {
|
||||||
|
$json[] = $cookie->toArray();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (false === file_put_contents($filename, json_encode($json), LOCK_EX)) {
|
||||||
|
// @codeCoverageIgnoreStart
|
||||||
|
throw new \RuntimeException("Unable to save file {$filename}");
|
||||||
|
// @codeCoverageIgnoreEnd
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load cookies from a JSON formatted file.
|
||||||
|
*
|
||||||
|
* Old cookies are kept unless overwritten by newly loaded ones.
|
||||||
|
*
|
||||||
|
* @param string $filename cookie file to load
|
||||||
|
*
|
||||||
|
* @throws \RuntimeException if the file cannot be loaded
|
||||||
|
*/
|
||||||
|
public function load($filename)
|
||||||
|
{
|
||||||
|
$json = file_get_contents($filename);
|
||||||
|
if (false === $json) {
|
||||||
|
// @codeCoverageIgnoreStart
|
||||||
|
throw new \RuntimeException("Unable to load file {$filename}");
|
||||||
|
// @codeCoverageIgnoreEnd
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$data = Utils::jsonDecode($json, true);
|
||||||
|
} catch (\InvalidArgumentException $e) {
|
||||||
|
$this->logger->error('JSON inside the cookie is broken', [
|
||||||
|
'json' => $json,
|
||||||
|
'error_msg' => $e->getMessage(),
|
||||||
|
]);
|
||||||
|
|
||||||
|
// cookie file is invalid, just ignore the exception and it'll reset the whole cookie file
|
||||||
|
$data = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (\is_array($data)) {
|
||||||
|
foreach (Utils::jsonDecode($json, true) as $cookie) {
|
||||||
|
$this->setCookie(new SetCookie($cookie));
|
||||||
|
}
|
||||||
|
} elseif (\strlen($data)) {
|
||||||
|
throw new \RuntimeException("Invalid cookie file: {$filename}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -82,8 +82,10 @@ services:
|
||||||
- ["addSubscriber", ["@bd_guzzle_site_authenticator.authenticator_subscriber"]]
|
- ["addSubscriber", ["@bd_guzzle_site_authenticator.authenticator_subscriber"]]
|
||||||
|
|
||||||
wallabag_core.guzzle.cookie_jar:
|
wallabag_core.guzzle.cookie_jar:
|
||||||
class: GuzzleHttp\Cookie\FileCookieJar
|
class: Wallabag\CoreBundle\Helper\FileCookieJar
|
||||||
arguments: ["%kernel.cache_dir%/cookiejar.json"]
|
arguments:
|
||||||
|
- "@logger"
|
||||||
|
- "%kernel.cache_dir%/cookiejar.json"
|
||||||
|
|
||||||
wallabag_core.content_proxy:
|
wallabag_core.content_proxy:
|
||||||
class: Wallabag\CoreBundle\Helper\ContentProxy
|
class: Wallabag\CoreBundle\Helper\ContentProxy
|
||||||
|
|
Loading…
Reference in a new issue