Rss-Bridge/index.php

189 lines
5.9 KiB
PHP
Raw Normal View History

<?php
/*
TODO :
- manage SSL detection because if library isn't loaded, some bridge crash !
2013-08-11 13:30:41 +02:00
- factorize the annotation system
- 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 ?
- see FIXME mentions in the code
- implement header('X-Cached-Version: '.date(DATE_ATOM, filemtime($cachefile)));
*/
2013-08-11 13:30:41 +02:00
date_default_timezone_set('UTC');
error_reporting(0);
//ini_set('display_errors','1'); error_reporting(E_ALL); // For debugging only.
// extensions check
if (!extension_loaded('openssl'))
die('"openssl" extension not loaded. Please check "php.ini"');
2014-05-14 21:34:07 +02:00
// 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)');
// -------
// cache file purge - delete cache files older than 24 hours
$cacheTimeLimit = time() - 60*60*24 ;
$cachePath = 'cache';
2015-12-03 22:09:18 +01:00
if(file_exists($cachePath)) {
$cacheIterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($cachePath),
RecursiveIteratorIterator::CHILD_FIRST
);
foreach ($cacheIterator as $cacheFile) {
if (in_array($cacheFile->getBasename(), array('.', '..')))
continue;
elseif ($cacheFile->isFile()) {
if( filemtime($cacheFile->getPathname()) < $cacheTimeLimit )
unlink( $cacheFile->getPathname() );
}
}
}
2014-05-25 19:56:59 +02:00
// default whitelist
$whitelist_file = './whitelist.txt';
$whitelist_default = array(
"BandcampBridge",
"CryptomeBridge",
"DansTonChatBridge",
"DuckDuckGoBridge",
"FacebookBridge",
2014-05-25 19:56:59 +02:00
"FlickrExploreBridge",
2014-07-20 17:43:29 +02:00
"GooglePlusPostBridge",
2014-05-25 19:56:59 +02:00
"GoogleSearchBridge",
"IdenticaBridge",
"InstagramBridge",
"OpenClassroomsBridge",
"PinterestBridge",
"ScmbBridge",
"TwitterBridge",
"WikipediaENBridge",
"WikipediaEOBridge",
"WikipediaFRBridge",
"YoutubeBridge");
if (!file_exists($whitelist_file)) {
2014-05-25 23:23:52 +02:00
$whitelist_selection = $whitelist_default;
$whitelist_write = implode("\n", $whitelist_default);
file_put_contents($whitelist_file, $whitelist_write);
2014-05-25 19:56:59 +02:00
}
else {
$whitelist_selection = explode("\n", file_get_contents($whitelist_file));
//Remove the last empty line.
array_pop($whitelist_selection);
2014-05-25 19:56:59 +02:00
}
2013-08-11 13:30:41 +02:00
try{
require_once __DIR__ . '/lib/RssBridge.php';
2013-08-11 13:30:41 +02:00
Bridge::setDir(__DIR__ . '/bridges/');
Format::setDir(__DIR__ . '/formats/');
Cache::setDir(__DIR__ . '/caches/');
if( isset($_REQUEST) && isset($_REQUEST['action']) ){
switch($_REQUEST['action']){
case 'display':
if( isset($_REQUEST['bridge']) ){
unset($_REQUEST['action']);
$bridge = $_REQUEST['bridge'];
unset($_REQUEST['bridge']);
$format = $_REQUEST['format'];
unset($_REQUEST['format']);
2014-05-25 19:56:59 +02:00
// whitelist control
if(!Bridge::isWhitelisted($whitelist_selection, $bridge)) {
2014-05-25 19:56:59 +02:00
throw new \HttpException('This bridge is not whitelisted', 401);
die;
}
2013-08-11 13:30:41 +02:00
$cache = Cache::create('FileCache');
// Data retrieval
$bridge = Bridge::create($bridge);
if(isset($_REQUEST["disable_cache"])) {
} else {
$bridge->setCache($cache); // just add disable cache to your query to disable caching
}
$bridge->setDatas($_REQUEST);
$bridge->loadMetadatas();
2013-08-11 13:30:41 +02:00
// Data transformation
try {
$format = Format::create($format);
$format
->setDatas($bridge->getDatas())
->setExtraInfos(array(
'name' => $bridge->getName(),
'uri' => $bridge->getURI(),
))
->display();
} catch(Exception $e) {
echo "The brige has crashed. You should report this to the bridges maintainer";
}
2013-08-11 13:30:41 +02:00
die;
}
2013-08-11 13:30:41 +02:00
break;
}
}
}
2013-08-11 13:30:41 +02:00
catch(HttpException $e){
header('HTTP/1.1 ' . $e->getCode() . ' ' . Http::getMessageForCode($e->getCode()));
header('Content-Type: text/plain');
die($e->getMessage());
}
catch(\Exception $e){
die($e->getMessage());
}
2013-08-11 13:30:41 +02:00
$formats = Format::searchInformation();
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Rss-bridge" />
<title>RSS-Bridge</title>
<link href="css/style.css" rel="stylesheet">
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
2013-08-11 13:30:41 +02:00
<body>
2013-08-11 13:30:41 +02:00
<header>
<h1>RSS-Bridge</h1>
2015-07-30 11:57:26 +02:00
<h2>·Reconnecting the Web·</h2>
</header>
2014-07-20 16:47:02 +02:00
<?php
2014-07-20 17:11:11 +02:00
$activeFoundBridgeCount = 0;
$showInactive = isset($_REQUEST['show_inactive']) && $_REQUEST['show_inactive'] == 1;
$inactiveBridges = '';
$bridgeList = Bridge::listBridges();
foreach($bridgeList as $bridgeName)
2014-07-20 17:11:11 +02:00
{
if(Bridge::isWhitelisted($whitelist_selection, $bridgeName))
2014-07-20 17:11:11 +02:00
{
echo HTMLUtils::displayBridgeCard($bridgeName, $formats);
2014-07-20 17:11:11 +02:00
$activeFoundBridgeCount++;
}
elseif ($showInactive)
{
// inactive bridges
$inactiveBridges .= HTMLUtils::displayBridgeCard($bridgeName, $formats, false) . PHP_EOL;
2014-07-20 17:11:11 +02:00
}
}
echo '<hr />' . $inactiveBridges;
2014-07-20 16:49:53 +02:00
?>
<footer>
<?= $activeFoundBridgeCount; ?>/<?= count($bridgeList) ?> active bridges (<a href="?show_inactive=1">Show inactive</a>)<br />
<a href="https://github.com/sebsauvage/rss-bridge">RSS-Bridge alpha 0.2 ~ Public Domain</a>
</footer>
</body>
2014-05-14 21:34:07 +02:00
</html>