From: Christian Weiske Date: Mon, 6 Jan 2020 20:28:36 +0000 (+0100) Subject: Add podcast proxy support for Martin X-Git-Url: https://git.cweiske.de/noxon-gateway.git/commitdiff_plain/fad3d30ab26b2a7b779319fcced0d539d35b8b5d Add podcast proxy support for Martin --- diff --git a/data/config.php.dist b/data/config.php.dist index 3294c49..e5bdbc5 100644 --- a/data/config.php.dist +++ b/data/config.php.dist @@ -21,4 +21,7 @@ $clientSupport = [ //if this is set, transcode caching is activated $enableCache = false; + +//if this is true, podcast URLs are proxied +$enablePodcastProxy = false; ?> diff --git a/src/podcasts.php b/src/podcasts.php index bb8f5ce..707d350 100644 --- a/src/podcasts.php +++ b/src/podcasts.php @@ -1,7 +1,7 @@ channel->item as $item) { $title = (string) $item->title; $desc = (string) $item->description; @@ -29,7 +34,7 @@ function sendPodcast($path) $listItems[] = getEpisodeItem( $title, - $host1 . 'deredirect.php?url=' . urlencode($url), + $urlHandler . '?url=' . urlencode($url), $desc, 'MP3' ); @@ -65,4 +70,4 @@ function downloadIfNewer($url, $file) } } -?> \ No newline at end of file +?> diff --git a/www/proxy.php b/www/proxy.php new file mode 100644 index 0000000..e220241 --- /dev/null +++ b/www/proxy.php @@ -0,0 +1,64 @@ + + */ +require_once __DIR__ . '/../data/config.php'; +if (!isset($enablePodcastProxy) || $enablePodcastProxy == false) { + header('HTTP/1.0 403 Forbidden'); + echo "Proxying is not enabled in config.php\n"; + exit(1); +} + +if (!isset($_GET['url']) || $_GET['url'] == '') { + header('HTTP/1.0 400 Bad Request'); + echo "url parameter missing\n"; + exit(1); +} +if (substr($_GET['url'], 0, 7) != 'http://' + && substr($_GET['url'], 0, 8) != 'https://' +) { + header('HTTP/1.0 400 Bad Request'); + echo "Only http and https URLs supported\n"; + exit(1); +} + +$url = $_GET['url']; + +//send original http headers +$headers = []; +foreach (apache_request_headers() as $name => $value) { + if (strtolower($name) == 'host') { + continue; + } + $headers[] = $name . ': ' . $value; +} +$context = stream_context_create( + ['http' => ['header' => $headers, 'ignore_errors' => true]] +); + +$fp = fopen($url, 'r', false, $context); +if (!$fp) { + header('HTTP/1.0 400 Bad Request'); + echo "Error fetching URL\n"; + exit(1); +} + +//send original headers +if (is_array($http_response_header)) { + foreach ($http_response_header as $header) { + header($header); + } +} + +//stream the data in 1kiB blocks +while(!feof($fp)) { + echo fread($fp, 1024); + flush(); +} +fclose($fp); +?>