Commit ea55f2e1 authored by martin scharm's avatar martin scharm
Browse files

Add proper support for proxies

There are situations where you want tt-rss to use a proxy (e.g.
because of network restrictions, or privacy concerns).
tt-rss already comes with an undocumented `_CURL_HTTP_PROXY`
variable (see eg https://binfalse.de/2015/05/06/ttrss-with-proxy/),
however that won't have an effect when, for example, php-curl is
not installed, see
https://git.tt-rss.org/git/tt-rss/src/c30f5e18119d1935e8fe6d422053b127e8f4f1b3/include/functions.php#L377
In this case it would use the `file_get_contents` with a stream
context without a proxy definition:
https://git.tt-rss.org/git/tt-rss/src/c30f5e18119d1935e8fe6d422053b127e8f4f1b3/include/functions.php#L487

Here I propose to properly support proxies, and I introduced a
`PROXY` variable, that is respected in both scenarios, with and
without curl installed.
parent c30f5e18
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -196,4 +196,9 @@
	// Expected config version. Please update this option in config.php
	// if necessary (after migrating all new options from this file).

	define('PROXY', '');
	// Connect to RSS feeds through a PROXY, this way tt-rss won't connect to
	// webservers directly.
	// Example format: '127.0.0.1:8123' (polipo proxy running on localhost)

	// vim:ft=php
+17 −18
Original line number Diff line number Diff line
@@ -402,8 +402,8 @@
				curl_setopt($ch, CURLOPT_COOKIEJAR, "/dev/null");
			}

			if (defined('_CURL_HTTP_PROXY')) {
				curl_setopt($ch, CURLOPT_PROXY, _CURL_HTTP_PROXY);
			if (defined('PROXY')) {
				curl_setopt($ch, CURLOPT_PROXY, PROXY);
			}

			if ($post_query) {
@@ -483,25 +483,24 @@

			// TODO: should this support POST requests or not? idk

			if (!$post_query && $last_modified) {
				 $context = stream_context_create(array(
					  'http' => array(
							'method' => 'GET',
						    'ignore_errors' => true,
						    'timeout' => $timeout ? $timeout : FILE_FETCH_TIMEOUT,
							'protocol_version'=> 1.1,
							'header' => "If-Modified-Since: $last_modified\r\n")
					  ));
			} else {
				 $context = stream_context_create(array(
			 $context_options = array(
				  'http' => array(
						'method' => 'GET',
					    'ignore_errors' => true,
					    'timeout' => $timeout ? $timeout : FILE_FETCH_TIMEOUT,
							'protocol_version'=> 1.1
					  )));
						'protocol_version'=> 1.1)
				  );

			if (!$post_query && $last_modified) {
                $context_options['http']['header'] = "If-Modified-Since: $last_modified\r\n";
			}

			if (defined('PROXY')) {
				$context_options['http']['proxy'] = PROXY;
			}

            $context = stream_context_create($context_options);

			$old_error = error_get_last();

			$data = @file_get_contents($url, false, $context);