<?php namespace Miniflux\Handler\Proxy; use Miniflux\Helper; use Miniflux\Model\Config; use PicoFeed\Client\ClientException; use PicoFeed\Config\Config as PicoFeedConfig; use PicoFeed\Filter\Filter; use PicoFeed\Client\Client; use PicoFeed\Logging\Logger; function rewrite_link($link) { if (Helper\is_secure_connection() && strpos($link, 'http:') === 0) { $link = '?action=proxy&url='.rawurlencode($link); } return $link; } function rewrite_html($html, $website, $proxy_images, $cloak_referrer) { if ($html === '' // no content, no proxy || (! $cloak_referrer && ! $proxy_images) // neither cloaking nor proxing enabled || (! $cloak_referrer && $proxy_images && ! Helper\is_secure_connection())) { // only proxy enabled, but not connected via HTTPS return $html; } $config = new PicoFeedConfig(); $config->setFilterImageProxyUrl('?action=proxy&url=%s'); if (! $cloak_referrer && $proxy_images) { // image proxy mode only: https links do not need to be proxied, since // they do not trigger mixed content warnings. $config->setFilterImageProxyProtocol('http'); } elseif (! $proxy_images && $cloak_referrer && Helper\is_secure_connection()) { // cloaking mode only: if a request from a HTTPS connection to a HTTP // connection is made, the referrer will be omitted by the browser. // Only the referrer for HTTPS to HTTPs requests needs to be cloaked. $config->setFilterImageProxyProtocol('https'); } $filter = Filter::html($html, $website); $filter->setConfig($config); return $filter->execute(); } function download($url) { try { if ((bool) Config\get('debug_mode')) { Logger::enable(); } $client = Client::getInstance(); $client->setUserAgent(Config\HTTP_USER_AGENT); $client->enablePassthroughMode(); $client->execute($url); } catch (ClientException $e) {} Config\write_debug(); }