Make max download size and timeout configurable

Fixes #1061
This commit is contained in:
ArthurHoaro 2018-02-28 22:29:43 +01:00
parent b70436373b
commit 4ff3ed1c47
3 changed files with 96 additions and 1 deletions

View file

@ -457,6 +457,32 @@ class Updater
}
return true;
}
/**
* Add download size and timeout to the configuration file
*
* @return bool true if the update is successful, false otherwise.
*/
public function updateMethodDownloadSizeAndTimeoutConf()
{
if ($this->conf->exists('general.download_max_size')
&& $this->conf->exists('general.download_timeout')
) {
return true;
}
if (! $this->conf->exists('general.download_max_size')) {
$this->conf->set('general.download_max_size', 1024*1024*4);
}
if (! $this->conf->exists('general.download_timeout')) {
$this->conf->set('general.download_timeout', 30);
}
$this->conf->write($this->isLoggedIn);
return true;
}
}
/**

View file

@ -1376,7 +1376,12 @@ function renderPage($conf, $pluginManager, $LINKSDB, $history, $sessionManager,
if (empty($title) && strpos(get_url_scheme($url), 'http') !== false) {
// Short timeout to keep the application responsive
// The callback will fill $charset and $title with data from the downloaded page.
get_http_response($url, 25, 4194304, get_curl_download_callback($charset, $title));
get_http_response(
$url,
$conf->get('general.download_max_size', 4194304),
$conf->get('general.download_timeout', 30),
get_curl_download_callback($charset, $title)
);
if (! empty($title) && strtolower($charset) != 'utf-8') {
$title = mb_convert_encoding($title, 'utf-8', $charset);
}

View file

@ -620,4 +620,68 @@ $GLOBALS[\'privateLinkByDefault\'] = true;';
$this->assertTrue($updater->updateMethodAtomDefault());
$this->assertTrue($this->conf->get('feed.show_atom'));
}
/**
* Test updateMethodDownloadSizeAndTimeoutConf, it should be set if none is already defined.
*/
public function testUpdateMethodDownloadSizeAndTimeoutConf()
{
$sandboxConf = 'sandbox/config';
copy(self::$configFile . '.json.php', $sandboxConf . '.json.php');
$this->conf = new ConfigManager($sandboxConf);
$updater = new Updater([], [], $this->conf, true);
$this->assertTrue($updater->updateMethodDownloadSizeAndTimeoutConf());
$this->assertEquals(4194304, $this->conf->get('general.download_max_size'));
$this->assertEquals(30, $this->conf->get('general.download_timeout'));
$this->conf = new ConfigManager($sandboxConf);
$this->assertEquals(4194304, $this->conf->get('general.download_max_size'));
$this->assertEquals(30, $this->conf->get('general.download_timeout'));
}
/**
* Test updateMethodDownloadSizeAndTimeoutConf, it shouldn't be set if it is already defined.
*/
public function testUpdateMethodDownloadSizeAndTimeoutConfIgnore()
{
$sandboxConf = 'sandbox/config';
copy(self::$configFile . '.json.php', $sandboxConf . '.json.php');
$this->conf = new ConfigManager($sandboxConf);
$this->conf->set('general.download_max_size', 38);
$this->conf->set('general.download_timeout', 70);
$updater = new Updater([], [], $this->conf, true);
$this->assertTrue($updater->updateMethodDownloadSizeAndTimeoutConf());
$this->assertEquals(38, $this->conf->get('general.download_max_size'));
$this->assertEquals(70, $this->conf->get('general.download_timeout'));
}
/**
* Test updateMethodDownloadSizeAndTimeoutConf, only the maz size should be set here.
*/
public function testUpdateMethodDownloadSizeAndTimeoutConfOnlySize()
{
$sandboxConf = 'sandbox/config';
copy(self::$configFile . '.json.php', $sandboxConf . '.json.php');
$this->conf = new ConfigManager($sandboxConf);
$this->conf->set('general.download_max_size', 38);
$updater = new Updater([], [], $this->conf, true);
$this->assertTrue($updater->updateMethodDownloadSizeAndTimeoutConf());
$this->assertEquals(38, $this->conf->get('general.download_max_size'));
$this->assertEquals(30, $this->conf->get('general.download_timeout'));
}
/**
* Test updateMethodDownloadSizeAndTimeoutConf, only the time out should be set here.
*/
public function testUpdateMethodDownloadSizeAndTimeoutConfOnlyTimeout()
{
$sandboxConf = 'sandbox/config';
copy(self::$configFile . '.json.php', $sandboxConf . '.json.php');
$this->conf = new ConfigManager($sandboxConf);
$this->conf->set('general.download_timeout', 3);
$updater = new Updater([], [], $this->conf, true);
$this->assertTrue($updater->updateMethodDownloadSizeAndTimeoutConf());
$this->assertEquals(4194304, $this->conf->get('general.download_max_size'));
$this->assertEquals(3, $this->conf->get('general.download_timeout'));
}
}