<?php

// Headers
header("Access-Control-Allow-Origin: *");

// Set version
$og_version = '1.21';

// Set domain
$domain = 'hostedfiles.net';

// CDN var
if(isset($_GET['cdn'])) {
    $domain = 'cdn.' . $domain;
}
unset($_GET['cdn']);

// Input var
$u = ltrim($_GET['u'], '/');
if (empty($u)) {
    // Return valid JavaScript error instead of throwing exception
    header("Content-Type: application/javascript");
    echo "console.error('Missing required query parameter u');";
    exit;
}
unset($_GET['u']);

// Get ip
if(isset($_SERVER['HTTP_CF_CONNECTING_IP'])) {
    $ip = $_SERVER['HTTP_CF_CONNECTING_IP'];
} elseif(isset($_SERVER['HTTP_CLIENT_IP'])) {
    $ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])[0];
} elseif(isset($_SERVER['REMOTE_ADDR'])) {
    $ip = $_SERVER['REMOTE_ADDR'];
}

if(is_null($ip)) {
    // Return valid JavaScript error instead of throwing exception
    header("Content-Type: application/javascript");
    echo "console.error('Could not determine IP');";
    exit;
}

// Get user agent
$user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : null;
if(is_null($user_agent)) {
    // Return valid JavaScript error instead of throwing exception
    header("Content-Type: application/javascript");
    echo "console.error('Missing server var HTTP_USER_AGENT');";
    exit;
}

// Get referrer
$referrer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null;

// Prepare header array
$headers = [
    'X-Forwarded-For: ' . $ip,
    'X-OGAds-Mirrored: ' . $og_version,
];

// Add script filename to headers
if(isset($_SERVER['SCRIPT_FILENAME'])) {
    $headers[] = 'X-OGAds-Script-Filename: ' . basename($_SERVER['SCRIPT_FILENAME']);
};

// Set URL
$url = "https://$domain/$u?" . http_build_query($_GET);

// Start CURL
$ch = curl_init();

// Set CURL options
curl_setopt_array($ch, [
    CURLOPT_URL            => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_FOLLOWLOCATION => false,
    CURLOPT_USERAGENT      => $user_agent,
    CURLOPT_REFERER        => $referrer,
    CURLOPT_HTTPHEADER     => $headers,
]);

// Execute request
$content = curl_exec($ch);

// Get the host and content type of the URL we were redirected to
$url_new = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
$content_type = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);

// Check for error
if ($content === false) {
    // Return valid JavaScript error instead of throwing exception
    header("Content-Type: application/javascript");
    echo "console.error('CURL error: " . addslashes(curl_error($ch)) . "');";
    curl_close($ch);
    exit;
}

// Close CURL
curl_close($ch);

// Check URL host...
if (parse_url($url_new, PHP_URL_HOST) === $domain) {
    // If internal
    if (!is_null($content_type)) {
        // For JavaScript requests, always set JavaScript content type
        if (strpos($u, '/js/') !== false || isset($_SERVER['HTTP_ACCEPT']) && strpos($_SERVER['HTTP_ACCEPT'], 'text/javascript') !== false) {
            header("Content-Type: application/javascript");
        } else {
            header("Content-Type: $content_type");
        }
    } else {
        // Default to JavaScript for script requests
        if (strpos($u, '/js/') !== false) {
            header("Content-Type: application/javascript");
        }
    }
    // Set X-Robots-Tag header (so search engines don't index this page)
    header("X-Robots-Tag: none");
    // Output contents
    echo $content;
} else {
    // If external and this is a JavaScript request, return JavaScript redirect
    if (strpos($u, '/js/') !== false || isset($_SERVER['HTTP_ACCEPT']) && strpos($_SERVER['HTTP_ACCEPT'], 'text/javascript') !== false) {
        header("Content-Type: application/javascript");
        echo "window.location.href = '" . addslashes($url_new) . "';";
    } else {
        // Otherwise do normal redirect
        header("Location: $url_new");
    }
}