<?php
$_ENV['PROTOCOL'] = (!empty($_SERVER['HTTPS']) ? 'https' : 'http');

$_ENV['BASE_URL'] = getenv('BASE_URL');
if (!isset($_ENV['BASE_URL']) || !($_ENV['BASE_URL'])) {
    $_ENV['BASE_URL'] = (isset($_GET['urlpre']) ? $_GET['urlpre'] : '').basename(substr($_SERVER['REQUEST_URI'], 0, strcspn($_SERVER['REQUEST_URI'], '?')));
}

$isFontData = true;
$fontFamily = explode(',', '')[0];
$fontURL = '';
if ($fontURL === '') {
    $fontURL = 'https://fonts.googleapis.com/css?family='.$fontFamily;
}
if (isset($_GET['family'])) {
    $fontFamily = explode(':',explode(',', $_GET['family'])[0])[0];
    $fontURL = preg_replace('/family=.*/', 'family='.$fontFamily, $fontURL);
    $isFontData = false;
}
else if (!isset($_GET['url'])) {
    die('Error: must provide url...');
}

if (isset($_GET['url'])) {
    $url = $_GET['url'];
    $ext = pathinfo(parse_url($url, PHP_URL_PATH), PATHINFO_EXTENSION);
}
else {
    $url = str_replace(' ', '+', $fontURL.'&display=swap');
}

if (substr($url, 0, 2) === '//') {
    $url = $_ENV['PROTOCOL'].':'.$url;
}

if (is_dir('./cache') && filemtime(__FILE__) > filemtime('./cache')) {
    rrmdir('./cache');
}
if (!is_dir('./cache')) {
    mkdir('./cache');
}

$url = base64_encode($url.(isset($_GET['urlprefix']) ? '&urlprefix='.$_GET['urlprefix'] : ''));

if ($isFontData == false) {
    header('Content-type: text/css; charset=utf-8');
}
else {
    if (isset($ext)) {
        header('Content-type: font/'.$ext);
    }
}
getFile($url);

function getFile($url)
{
    $filename = md5($url) . '.cache';
    if (!file_exists('./cache/' . $filename)) {
        echo cacheFile($url, './cache/' . $filename);
    }
    else {
        echo file_get_contents('./cache/' . $filename);
    }
}

function cacheFile($url, $filepath) {
    $url = base64_decode($url);
    $content = file_get_contents($url);
    if (strlen($content) > 0) {
        $content = str_replace($_ENV['PROTOCOL'].'://', $_ENV['BASE_URL'].'?url='.$_ENV['PROTOCOL'].'://', $content);
        file_put_contents($filepath, $content);
    }
    return $content;
}

function rrmdir($src) {
    if (file_exists($src)) {
        $dir = opendir($src);
        while (false !== ($file = readdir($dir))) {
            if (($file != '.') && ($file != '..')) {
                $full = $src . '/' . $file;
                if (is_dir($full)) {
                    rrmdir($full);
                } else {
                    unlink($full);
                }
            }
        }
        closedir($dir);
        rmdir($src);
    }
}
