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'; // Check PHP version if(version_compare(PHP_VERSION, PHP_VERSION_REQUIRED) === -1) die('RSS-Bridge requires at least PHP version ' . PHP_VERSION_REQUIRED . '!'); // extensions check if(!extension_loaded('openssl')) die('"openssl" extension not loaded. Please check "php.ini"'); if(!extension_loaded('libxml')) die('"libxml" extension not loaded. Please check "php.ini"'); // configuration checks if(ini_get('allow_url_fopen') !== "1") die('"allow_url_fopen" is not set to "1". 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/RSS-Bridge/rss-bridge)'); // default whitelist $whitelist_file = './whitelist.txt'; $whitelist_default = array( "BandcampBridge", "CryptomeBridge", "DansTonChatBridge", "DuckDuckGoBridge", "FacebookBridge", "FlickrExploreBridge", "GooglePlusPostBridge", "GoogleSearchBridge", "IdenticaBridge", "InstagramBridge", "OpenClassroomsBridge", "PinterestBridge", "ScmbBridge", "TwitterBridge", "WikipediaBridge", "YoutubeBridge"); try { Bridge::setDir(__DIR__ . '/bridges/'); Format::setDir(__DIR__ . '/formats/'); Cache::setDir(__DIR__ . '/caches/'); if(!file_exists($whitelist_file)){ $whitelist_selection = $whitelist_default; $whitelist_write = implode("\n", $whitelist_default); file_put_contents($whitelist_file, $whitelist_write); } else { $whitelist_file_content = file_get_contents($whitelist_file); if($whitelist_file_content != "*\n") { $whitelist_selection = explode("\n", $whitelist_file_content); } else { $whitelist_selection = Bridge::listBridges(); } } $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); } $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); } // whitelist control if(!Bridge::isWhitelisted($whitelist_selection, $bridge)){ throw new \HttpException('This bridge is not whitelisted', 401); die; } // Data retrieval $bridge = Bridge::create($bridge); $noproxy = filter_input(INPUT_GET, '_noproxy', FILTER_VALIDATE_BOOLEAN); if(defined('PROXY_URL') && PROXY_BYBRIDGE && $noproxy){ define('NOPROXY', true); } $params = $_GET; // Initialize cache $cache = Cache::create('FileCache'); $cache->setPath(CACHE_DIR); $cache->purgeCache(86400); // 24 hours $cache->setParameters($params); unset($params['action']); unset($params['bridge']); unset($params['format']); unset($params['_noproxy']); // Load cache & data $bridge->setCache($cache); $bridge->setDatas($params); // Data transformation try { $format = Format::create($format); $format->setItems($bridge->getItems()); $format->setExtraInfos($bridge->getExtraInfos()); $format->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()); } catch(\Exception $e){ die($e->getMessage()); } $formats = Format::searchInformation(); ?>
{$status}
EOD; $activeFoundBridgeCount = 0; $showInactive = filter_input(INPUT_GET, 'show_inactive', FILTER_VALIDATE_BOOLEAN); $inactiveBridges = ''; $bridgeList = Bridge::listBridges(); foreach($bridgeList as $bridgeName){ if(Bridge::isWhitelisted($whitelist_selection, $bridgeName)){ echo displayBridgeCard($bridgeName, $formats); $activeFoundBridgeCount++; } elseif($showInactive) { // inactive bridges $inactiveBridges .= displayBridgeCard($bridgeName, $formats, false) . PHP_EOL; } } echo $inactiveBridges; ?>