aboutsummaryrefslogtreecommitdiff
path: root/proxy/proxy.php
blob: 39853081d986431c8279f0c972968cb96f43f558 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
  // Secret key to use this script
  $secret = '';
  // HTTP authorization (USERNAME:PASSWORD Base64 encoded)
  $authorization = '';

  if (isset($_GET['secret']) && $_GET['secret'] == $secret && isset($_GET['url']) && !empty($_GET['url'])) {
    
    $request_headers = array('Authorization: Basic '.$authorization);
    $url = $_GET['url'];
 
    $curl = curl_init(); 
    curl_setopt($curl, CURLOPT_URL, $url); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($curl, CURLOPT_HTTPHEADER, $request_headers);
    $content = curl_exec($curl); 
    $contenttype = curl_getinfo($curl, CURLINFO_CONTENT_TYPE);
    curl_close($curl);

    if (str_starts_with($contenttype, 'text/html')) {
      $proxyurl = substr($url, 0, strrpos($url, '/') + 1);
      $scripturl = 'https://'.$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME'].'?secret='.$secret.'&';

      $content = preg_replace('#href="(?!https)(.+)"#i', 'href="'.$scripturl.'url='.$proxyurl.'$1"', $content);
      $content = preg_replace('#src="(?!https)(.+)"#i', 'src="'.$scripturl.'url='.$proxyurl.'$1"', $content);
    }

    header('Content-Type: '.$contenttype);
    echo $content;
  
  } else {
    throw new Exception('Insufficient request');
  }
?>