aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/Minz/ModelPdo.php8
-rw-r--r--lib/Minz/Request.php13
-rw-r--r--lib/SimplePie/SimplePie/File.php2
-rw-r--r--lib/SimplePie/SimplePie/Misc.php11
-rw-r--r--lib/SimplePie/SimplePie/Parser.php2
-rw-r--r--lib/lib_rss.php57
6 files changed, 80 insertions, 13 deletions
diff --git a/lib/Minz/ModelPdo.php b/lib/Minz/ModelPdo.php
index d769e0ff4..733982c14 100644
--- a/lib/Minz/ModelPdo.php
+++ b/lib/Minz/ModelPdo.php
@@ -58,7 +58,7 @@ class Minz_ModelPdo {
try {
switch ($db['type']) {
case 'mysql':
- $string = 'mysql:host=' . $dbServer['host'] . ';dbname=' . $db['base'] . ';charset=utf8mb4';
+ $string = 'mysql:host=' . (empty($dbServer['host']) ? $db['host'] : $dbServer['host']) . ';dbname=' . $db['base'] . ';charset=utf8mb4';
if (!empty($dbServer['port'])) {
$string .= ';port=' . $dbServer['port'];
}
@@ -69,11 +69,11 @@ class Minz_ModelPdo {
case 'sqlite':
$string = 'sqlite:' . join_path(DATA_PATH, 'users', $currentUser, 'db.sqlite');
$this->prefix = '';
- $this->bd = new MinzPDOMSQLite($string, $db['user'], $db['password'], $driver_options);
+ $this->bd = new MinzPDOSQLite($string, $db['user'], $db['password'], $driver_options);
$this->bd->exec('PRAGMA foreign_keys = ON;');
break;
case 'pgsql':
- $string = 'pgsql:host=' . $dbServer['host'] . ';dbname=' . $db['base'];
+ $string = 'pgsql:host=' . (empty($dbServer['host']) ? $db['host'] : $dbServer['host']) . ';dbname=' . $db['base'];
if (!empty($dbServer['port'])) {
$string .= ';port=' . $dbServer['port'];
}
@@ -160,7 +160,7 @@ class MinzPDOMySql extends MinzPDO {
}
}
-class MinzPDOMSQLite extends MinzPDO {
+class MinzPDOSQLite extends MinzPDO {
public function lastInsertId($name = null) {
return parent::lastInsertId(); //We discard the name, only used by PostgreSQL
}
diff --git a/lib/Minz/Request.php b/lib/Minz/Request.php
index a43509ded..e21697e42 100644
--- a/lib/Minz/Request.php
+++ b/lib/Minz/Request.php
@@ -39,6 +39,19 @@ class Minz_Request {
return $default;
}
}
+ public static function paramTernary($key) {
+ if (isset(self::$params[$key])) {
+ $p = self::$params[$key];
+ $tp = trim($p);
+ if ($p === null || $tp === '' || $tp === 'null') {
+ return null;
+ } elseif ($p == false || $tp == '0' || $tp === 'false' || $tp === 'no') {
+ return false;
+ }
+ return true;
+ }
+ return null;
+ }
public static function defaultControllerName() {
return self::$default_controller_name;
}
diff --git a/lib/SimplePie/SimplePie/File.php b/lib/SimplePie/SimplePie/File.php
index 8be38f145..b8a595571 100644
--- a/lib/SimplePie/SimplePie/File.php
+++ b/lib/SimplePie/SimplePie/File.php
@@ -110,7 +110,7 @@ class SimplePie_File
curl_setopt($fp, CURLOPT_FAILONERROR, 1);
curl_setopt($fp, CURLOPT_TIMEOUT, $timeout);
curl_setopt($fp, CURLOPT_CONNECTTIMEOUT, $timeout);
- curl_setopt($fp, CURLOPT_REFERER, $url);
+ curl_setopt($fp, CURLOPT_REFERER, SimplePie_Misc::url_remove_credentials($url));
curl_setopt($fp, CURLOPT_USERAGENT, $useragent);
curl_setopt($fp, CURLOPT_HTTPHEADER, $headers2);
if (!ini_get('open_basedir') && !ini_get('safe_mode') && version_compare(SimplePie_Misc::get_curl_version(), '7.15.2', '>='))
diff --git a/lib/SimplePie/SimplePie/Misc.php b/lib/SimplePie/SimplePie/Misc.php
index 40477c01e..1f338623c 100644
--- a/lib/SimplePie/SimplePie/Misc.php
+++ b/lib/SimplePie/SimplePie/Misc.php
@@ -1928,9 +1928,18 @@ class SimplePie_Misc
public static function atom_10_content_construct_type($attribs)
{
+ $type = '';
if (isset($attribs['']['type']))
{
- $type = strtolower(trim($attribs['']['type']));
+ $type = trim($attribs['']['type']);
+ }
+ elseif (isset($attribs[SIMPLEPIE_NAMESPACE_ATOM_10]['type']))
+ {//FreshRSS
+ $type = trim($attribs[SIMPLEPIE_NAMESPACE_ATOM_10]['type']);
+ }
+ if ($type != '')
+ {
+ $type = strtolower($type);
switch ($type)
{
case 'text':
diff --git a/lib/SimplePie/SimplePie/Parser.php b/lib/SimplePie/SimplePie/Parser.php
index 9348382ad..bdcc1a516 100644
--- a/lib/SimplePie/SimplePie/Parser.php
+++ b/lib/SimplePie/SimplePie/Parser.php
@@ -141,7 +141,7 @@ class SimplePie_Parser
$dom = new DOMDocument();
$dom->recover = true;
$dom->strictErrorChecking = false;
- @$dom->loadXML($data);
+ @$dom->loadXML($data, LIBXML_NOERROR | LIBXML_NOWARNING);
$this->encoding = $encoding = $dom->encoding = 'UTF-8';
$data2 = $dom->saveXML();
if (function_exists('mb_convert_encoding'))
diff --git a/lib/lib_rss.php b/lib/lib_rss.php
index 215c4c362..abb20f16a 100644
--- a/lib/lib_rss.php
+++ b/lib/lib_rss.php
@@ -175,7 +175,7 @@ function html_only_entity_decode($text) {
return strtr($text, $htmlEntitiesOnly);
}
-function customSimplePie() {
+function customSimplePie($attributes = array()) {
$system_conf = Minz_Configuration::get('system');
$limits = $system_conf->limits;
$simplePie = new SimplePie();
@@ -183,8 +183,17 @@ function customSimplePie() {
$simplePie->set_syslog($system_conf->simplepie_syslog_enabled);
$simplePie->set_cache_location(CACHE_PATH);
$simplePie->set_cache_duration($limits['cache_duration']);
- $simplePie->set_timeout($limits['timeout']);
- $simplePie->set_curl_options($system_conf->curl_options);
+
+ $feed_timeout = empty($attributes['timeout']) ? 0 : intval($attributes['timeout']);
+ $simplePie->set_timeout($feed_timeout > 0 ? $feed_timeout : $limits['timeout']);
+
+ $curl_options = $system_conf->curl_options;
+ if (isset($attributes['ssl_verify'])) {
+ $curl_options[CURLOPT_SSL_VERIFYHOST] = $attributes['ssl_verify'] ? 2 : 0;
+ $curl_options[CURLOPT_SSL_VERIFYPEER] = $attributes['ssl_verify'] ? true : false;
+ }
+ $simplePie->set_curl_options($curl_options);
+
$simplePie->strip_htmltags(array(
'base', 'blink', 'body', 'doctype', 'embed',
'font', 'form', 'frame', 'frameset', 'html',
@@ -245,11 +254,47 @@ function sanitizeHTML($data, $base = '') {
}
/* permet de récupérer le contenu d'un article pour un flux qui n'est pas complet */
-function get_content_by_parsing ($url, $path) {
+function get_content_by_parsing($url, $path, $attributes = array()) {
require_once(LIB_PATH . '/lib_phpQuery.php');
+ $system_conf = Minz_Configuration::get('system');
+ $limits = $system_conf->limits;
+ $feed_timeout = empty($attributes['timeout']) ? 0 : intval($attributes['timeout']);
+
+ if ($system_conf->simplepie_syslog_enabled) {
+ syslog(LOG_INFO, 'FreshRSS GET ' . SimplePie_Misc::url_remove_credentials($url));
+ }
- Minz_Log::notice('FreshRSS GET ' . SimplePie_Misc::url_remove_credentials($url));
- $html = file_get_contents($url);
+ $ch = curl_init();
+ curl_setopt_array($ch, array(
+ CURLOPT_URL => $url,
+ CURLOPT_REFERER => SimplePie_Misc::url_remove_credentials($url),
+ CURLOPT_HTTPHEADER => array('Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'),
+ CURLOPT_USERAGENT => FRESHRSS_USERAGENT,
+ CURLOPT_CONNECTTIMEOUT => $feed_timeout > 0 ? $feed_timeout : $limits['timeout'],
+ CURLOPT_TIMEOUT => $feed_timeout > 0 ? $feed_timeout : $limits['timeout'],
+ //CURLOPT_FAILONERROR => true;
+ CURLOPT_MAXREDIRS => 4,
+ CURLOPT_RETURNTRANSFER => true,
+ ));
+ if (version_compare(PHP_VERSION, '5.6.0') >= 0 || ini_get('open_basedir') == '') {
+ curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); //Keep option separated for open_basedir PHP bug 65646
+ }
+ if (defined('CURLOPT_ENCODING')) {
+ curl_setopt($ch, CURLOPT_ENCODING, ''); //Enable all encodings
+ }
+ curl_setopt_array($ch, $system_conf->curl_options);
+ if (isset($attributes['ssl_verify'])) {
+ curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, $attributes['ssl_verify'] ? 2 : 0);
+ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $attributes['ssl_verify'] ? true : false);
+ }
+ $html = curl_exec($ch);
+ $c_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
+ $c_error = curl_error($ch);
+ curl_close($ch);
+
+ if ($c_status != 200 || $c_error != '') {
+ Minz_Log::warning('Error fetching content: HTTP code ' . $c_status . ': ' . $c_error . ' ' . $url);
+ }
if ($html) {
$doc = phpQuery::newDocument($html);