diff --git a/formats/HtmlFormat.php b/formats/HtmlFormat.php index 1001acf..c32c3a1 100644 --- a/formats/HtmlFormat.php +++ b/formats/HtmlFormat.php @@ -13,8 +13,23 @@ class HtmlFormat extends FormatAbstract { $entryAuthor = isset($item['author']) ? '

by: ' . $item['author'] . '

' : ''; $entryTitle = isset($item['title']) ? $this->sanitizeHtml(strip_tags($item['title'])) : ''; $entryUri = isset($item['uri']) ? $item['uri'] : $uri; - $entryTimestamp = isset($item['timestamp']) ? '' : ''; - $entryContent = isset($item['content']) ? '
' . $this->sanitizeHtml($item['content']). '
' : ''; + + $entryTimestamp = ''; + if(isset($item['timestamp'])){ + $entryTimestamp = ''; + } + + $entryContent = ''; + if(isset($item['content'])){ + $entryContent = '
' + . $this->sanitizeHtml($item['content']) + . '
'; + } + $entries .= << diff --git a/formats/MrssFormat.php b/formats/MrssFormat.php index fddbf0a..373c438 100644 --- a/formats/MrssFormat.php +++ b/formats/MrssFormat.php @@ -14,7 +14,13 @@ class MrssFormat extends FormatAbstract { $extraInfos = $this->getExtraInfos(); $title = $this->xml_encode($extraInfos['name']); - $uri = $this->xml_encode(!empty($extraInfos['uri']) ? $extraInfos['uri'] : 'https://github.com/sebsauvage/rss-bridge'); + + if(!empty($extraInfos['uri'])){ + $uri = $this->xml_encode($extraInfos['uri']); + } else { + $uri = 'https://github.com/sebsauvage/rss-bridge'; + } + $icon = $this->xml_encode('http://icons.better-idea.org/icon?url='. $uri .'&size=64'); $items = ''; @@ -41,7 +47,10 @@ EOD; /* Data are prepared, now let's begin the "MAGIE !!!" */ $toReturn = ''; $toReturn .= << + {$title} http{$https}://{$httpHost}{$httpInfo}/ diff --git a/index.php b/index.php index 10a13e0..73d2b8a 100644 --- a/index.php +++ b/index.php @@ -2,7 +2,7 @@ /* TODO : - factorize the annotation system -- factorize to adapter : Format, Bridge, Cache (actually code is almost the same) +- factorize to adapter : Format, Bridge, Cache(actually code is almost the same) - implement annotation cache for entrance page - Cache : I think logic must be change as least to avoid to reconvert object from json in FileCache case. - add namespace to avoid futur problem ? @@ -12,9 +12,9 @@ TODO : //define('PROXY_URL', 'tcp://192.168.0.0:28'); // Set to true if you allow users to disable proxy usage for specific bridges -define('PROXY_BYBRIDGE',false); +define('PROXY_BYBRIDGE', false); // Comment this line or keep PROXY_NAME empty to display PROXY_URL instead -define('PROXY_NAME','Hidden Proxy Name'); +define('PROXY_NAME', 'Hidden Proxy Name'); date_default_timezone_set('UTC'); error_reporting(0); @@ -22,37 +22,39 @@ error_reporting(0); /* Create a file named 'DEBUG' for enabling debug mode. For further security, you may put whitelisted IP addresses - in the 'DEBUG' file, one IP per line. Empty file allows anyone (!). + in the 'DEBUG' file, one IP per line. Empty file allows anyone(!). Debugging allows displaying PHP error messages and bypasses the cache: this can allow a malicious client to retrieve data about your server and hammer a provider throught your rss-bridge instance. */ -if (file_exists('DEBUG')) { - $debug_enabled = true; - $debug_whitelist = trim(file_get_contents('DEBUG')); - if (strlen($debug_whitelist) > 0) { - $debug_enabled = false; - foreach (explode("\n", $debug_whitelist) as $allowed_ip) { - if (trim($allowed_ip) === $_SERVER['REMOTE_ADDR']) { - $debug_enabled = true; - break; - } - } - } - if ($debug_enabled) { - ini_set('display_errors', '1'); - error_reporting(E_ALL); - define('DEBUG', 'true'); - } +if(file_exists('DEBUG')){ + $debug_enabled = true; + $debug_whitelist = trim(file_get_contents('DEBUG')); + if(strlen($debug_whitelist) > 0){ + $debug_enabled = false; + foreach(explode("\n", $debug_whitelist) as $allowed_ip){ + if(trim($allowed_ip) === $_SERVER['REMOTE_ADDR']){ + $debug_enabled = true; + break; + } + } + } + if($debug_enabled){ + ini_set('display_errors', '1'); + error_reporting(E_ALL); + define('DEBUG', 'true'); + } } require_once __DIR__ . '/lib/RssBridge.php'; // extensions check -if (!extension_loaded('openssl')) +if(!extension_loaded('openssl')) die('"openssl" extension not loaded. Please check "php.ini"'); // FIXME : beta test UA spoofing, please report any blacklisting by PHP-fopen-unfriendly websites -ini_set('user_agent', 'Mozilla/5.0 (X11; Linux x86_64; rv:30.0) Gecko/20121202 Firefox/30.0 (rss-bridge/0.1; +https://github.com/sebsauvage/rss-bridge)'); +ini_set('user_agent', 'Mozilla/5.0(X11; Linux x86_64; rv:30.0) + Gecko/20121202 Firefox/30.0(rss-bridge/0.1; + +https://github.com/sebsauvage/rss-bridge)'); // default whitelist $whitelist_file = './whitelist.txt'; @@ -74,91 +76,89 @@ $whitelist_default = array( "WikipediaBridge", "YoutubeBridge"); -if (!file_exists($whitelist_file)) { +if(!file_exists($whitelist_file)){ $whitelist_selection = $whitelist_default; $whitelist_write = implode("\n", $whitelist_default); file_put_contents($whitelist_file, $whitelist_write); -} -else { +} else { $whitelist_selection = explode("\n", file_get_contents($whitelist_file)); } Cache::purge(); -try{ +try { - Bridge::setDir(__DIR__ . '/bridges/'); - Format::setDir(__DIR__ . '/formats/'); - Cache::setDir(__DIR__ . '/caches/'); + Bridge::setDir(__DIR__ . '/bridges/'); + Format::setDir(__DIR__ . '/formats/'); + Cache::setDir(__DIR__ . '/caches/'); - $action=filter_input(INPUT_GET,'action'); - $bridge=filter_input(INPUT_GET,'bridge'); - if($action === 'display' && !empty($bridge)){ - // DEPRECATED: 'nameBridge' scheme is replaced by 'name' in bridge parameter values - // this is to keep compatibility until futher complete removal - if(($pos=strpos($bridge,'Bridge'))===(strlen($bridge)-strlen('Bridge'))){ - $bridge=substr($bridge,0,$pos); - } + $action = filter_input(INPUT_GET, 'action'); + $bridge = filter_input(INPUT_GET, 'bridge'); - $format = filter_input(INPUT_GET,'format'); - // DEPRECATED: 'nameFormat' scheme is replaced by 'name' in format parameter values - // this is to keep compatibility until futher complete removal - if(($pos=strpos($format,'Format'))===(strlen($format)-strlen('Format'))){ - $format=substr($format,0,$pos); - } + if($action === 'display' && !empty($bridge)){ + // DEPRECATED: 'nameBridge' scheme is replaced by 'name' in bridge parameter values + // this is to keep compatibility until futher complete removal + if(($pos = strpos($bridge, 'Bridge')) === (strlen($bridge) - strlen('Bridge'))){ + $bridge = substr($bridge, 0, $pos); + } + $format = filter_input(INPUT_GET, 'format'); - // whitelist control - if(!Bridge::isWhitelisted($whitelist_selection, $bridge)) { - throw new \HttpException('This bridge is not whitelisted', 401); - die; - } + // DEPRECATED: 'nameFormat' scheme is replaced by 'name' in format parameter values + // this is to keep compatibility until futher complete removal + if(($pos = strpos($format, 'Format')) === (strlen($format) - strlen('Format'))){ + $format = substr($format, 0, $pos); + } - $cache = Cache::create('FileCache'); + // whitelist control + if(!Bridge::isWhitelisted($whitelist_selection, $bridge)){ + throw new \HttpException('This bridge is not whitelisted', 401); + die; + } - // Data retrieval - $bridge = Bridge::create($bridge); - if(!defined("DEBUG")) { - $bridge->setCache($cache); - } + $cache = Cache::create('FileCache'); - $noproxy=filter_input(INPUT_GET,'_noproxy',FILTER_VALIDATE_BOOLEAN); - if(defined('PROXY_URL') && PROXY_BYBRIDGE && $noproxy){ - $bridge->useProxy=false; - } + // Data retrieval + $bridge = Bridge::create($bridge); + if(!defined("DEBUG")) + $bridge->setCache($cache); - $params=$_GET; - unset($params['action']); - unset($params['bridge']); - unset($params['format']); - unset($params['_noproxy']); - $bridge->setDatas($params); - // Data transformation - try { - $format = Format::create($format); - $format - ->setItems($bridge->getItems()) - ->setExtraInfos(array( - 'name' => $bridge->getName(), - 'uri' => $bridge->getURI(), - )) - ->display(); - } catch(Exception $e) { + $noproxy = filter_input(INPUT_GET, '_noproxy', FILTER_VALIDATE_BOOLEAN); + if(defined('PROXY_URL') && PROXY_BYBRIDGE && $noproxy) + $bridge->useProxy = false; - echo "The brige has crashed. You should report this to the bridges maintainer"; - - } - die; - - } + $params = $_GET; + unset($params['action']); + unset($params['bridge']); + unset($params['format']); + unset($params['_noproxy']); + $bridge->setDatas($params); + + // Data transformation + try { + $format = Format::create($format); + $format + ->setItems($bridge->getItems()) + ->setExtraInfos(array( + 'name' => $bridge->getName(), + 'uri' => $bridge->getURI(), + )) + ->display(); + } catch(Exception $e){ + echo "The bridge has crashed. You should report this to the bridges maintainer"; + } + die; + } } + catch(HttpException $e){ - header('HTTP/1.1 ' . $e->getCode() . ' ' . Http::getMessageForCode($e->getCode())); - header('Content-Type: text/plain'); - die($e->getMessage()); + header('HTTP/1.1 ' . $e->getCode() . ' ' . Http::getMessageForCode($e->getCode())); + header('Content-Type: text/plain'); + die($e->getMessage()); } + catch(\Exception $e){ - die($e->getMessage()); + die($e->getMessage()); } $formats = Format::searchInformation(); @@ -167,51 +167,47 @@ $formats = Format::searchInformation(); - - - - RSS-Bridge - + + + + RSS-Bridge + -
-

RSS-Bridge

-

·Reconnecting the Web·

-
+
+

RSS-Bridge

+

·Reconnecting the Web·

+
-
- RSS-Bridge alpha 0.2 ~ Public Domain
+
+ RSS-Bridge alpha 0.2 ~ Public Domain
/ active bridges.
-
'; - else - echo '
'; - } - ?> -
- +
'; + else + echo '
'; + } + ?> +
+ diff --git a/lib/Bridge.php b/lib/Bridge.php index a964581..4c76640 100644 --- a/lib/Bridge.php +++ b/lib/Bridge.php @@ -36,8 +36,7 @@ EOD; $pathBridge = self::getDir() . $nameBridge . '.php'; if(!file_exists($pathBridge)){ - throw new \Exception('The bridge you looking for does not exist.' - . ' It should be at path ' + throw new \Exception('The bridge you looking for does not exist. It should be at path ' . $pathBridge); } diff --git a/lib/BridgeAbstract.php b/lib/BridgeAbstract.php index d17c6bd..bfd80de 100644 --- a/lib/BridgeAbstract.php +++ b/lib/BridgeAbstract.php @@ -348,7 +348,7 @@ abstract class BridgeAbstract implements BridgeInterface { if(is_null($context)){ $context = stream_context_create($contextOptions); } else { - $prevContext=$context; + $prevContext = $context; if(!stream_context_set_option($context, $contextOptions)){ $context = $prevContext; } diff --git a/lib/Cache.php b/lib/Cache.php index b04f53e..a1649a0 100644 --- a/lib/Cache.php +++ b/lib/Cache.php @@ -10,8 +10,8 @@ class Cache { static public function create($nameCache){ if(!static::isValidNameCache($nameCache)){ - throw new \InvalidArgumentException('Name cache must be at least' - . ' one uppercase follow or not by alphanumeric or dash characters.'); + throw new \InvalidArgumentException('Name cache must be at least one + uppercase follow or not by alphanumeric or dash characters.'); } $pathCache = self::getDir() . $nameCache . '.php'; @@ -72,7 +72,7 @@ class Cache { static public function purge(){ - $cacheTimeLimit = time() - 60*60*24; + $cacheTimeLimit = time() - 86400; // 86400 -> 24h $cachePath = 'cache'; if(file_exists($cachePath)){ $cacheIterator = new RecursiveIteratorIterator( diff --git a/lib/Format.php b/lib/Format.php index 182bf0b..26c95a9 100644 --- a/lib/Format.php +++ b/lib/Format.php @@ -10,8 +10,8 @@ class Format { static public function create($nameFormat){ if(!preg_match('@^[A-Z][a-zA-Z]*$@', $nameFormat)){ - throw new \InvalidArgumentException('Name format must be at least ' - . 'one uppercase follow or not by alphabetic characters.'); + throw new \InvalidArgumentException('Name format must be at least + one uppercase follow or not by alphabetic characters.'); } $nameFormat = $nameFormat . 'Format'; diff --git a/lib/FormatAbstract.php b/lib/FormatAbstract.php index 1962958..6bcc2f9 100644 --- a/lib/FormatAbstract.php +++ b/lib/FormatAbstract.php @@ -7,8 +7,7 @@ abstract class FormatAbstract implements FormatInterface { $contentType, $charset, $items, - $extraInfos - ; + $extraInfos; public function setCharset($charset){ $this->charset = $charset; diff --git a/lib/HTMLUtils.php b/lib/HTMLUtils.php index e2e582f..750b15b 100644 --- a/lib/HTMLUtils.php +++ b/lib/HTMLUtils.php @@ -73,7 +73,7 @@ CARD; $card .= HTMLUtils::getFormHeader($bridgeName); - foreach($parameter as $id=>$inputEntry){ + foreach($parameter as $id => $inputEntry){ $additionalInfoString = ''; if(isset($inputEntry['required']) && $inputEntry['required'] === true) diff --git a/lib/RssBridge.php b/lib/RssBridge.php index d7ef70f..cf27114 100644 --- a/lib/RssBridge.php +++ b/lib/RssBridge.php @@ -19,9 +19,8 @@ require __DIR__ . '/HTMLUtils.php'; $vendorLibSimpleHtmlDom = __DIR__ . PATH_VENDOR . '/simplehtmldom/simple_html_dom.php'; if( !file_exists($vendorLibSimpleHtmlDom) ){ - throw new \HttpException('"PHP Simple HTML DOM Parser" library is missing.' - . ' Get it from http://simplehtmldom.sourceforge.net and place the script' - . ' "simple_html_dom.php" in ' + throw new \HttpException('"PHP Simple HTML DOM Parser" library is missing. + Get it from http://simplehtmldom.sourceforge.net and place the script "simple_html_dom.php" in ' . substr(PATH_VENDOR,4) . '/simplehtmldom/' , 500);