<?php

if (empty($_GET['icon']) || !preg_match("/^\w+(\.svg)?$/", $_GET['icon'])) exit;

$request = $_GET['icon'];
$icons_path = __DIR__."/icons";

function get_ip() {  
	//whether ip is from the share internet  
	if(!empty($_SERVER['HTTP_CLIENT_IP'])) {  
		$ip = $_SERVER['HTTP_CLIENT_IP'];  
	}  
	//whether ip is from the proxy  
	elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {  
		$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];  
	}  
	//whether ip is from the remote address  
	else{  
		$ip = $_SERVER['REMOTE_ADDR'];  
	}  
	return $ip;  
} 
$time = date("Y-m-d H:i:s");
$ip = get_ip();

if ($request == 'all') {
	file_put_contents('download_log', "$time - $ip - download all".PHP_EOL , FILE_APPEND | LOCK_EX);

	$mtime = filemtime(__DIR__.'/assets/index.js');
	$zip_filename = "pixel-icons-$mtime.zip";
	$zip_path = __DIR__."/zipped/$zip_filename";

	if (!is_file($zip_path)) {
		$zip = new ZipArchive();
		if ($zip->open($zip_path, ZipArchive::CREATE) === TRUE) {
			$files = scandir($icons_path);
			foreach ($files as $file) {
				$file_path = $icons_path."/$file";
				if (substr($file, -4, 4) == ".svg") {
					touch($file_path);
					$zip->addFile($file_path, $file);
				}
			}
			$zip->close();
		} else {
			echo "Oops";
			exit;
		}
	}

	if (is_file($zip_path)) {
		header('Content-Type: application/zip');
		$quoted = sprintf('"%s"', addcslashes(basename($zip_path), '"\\'));
		$size   = filesize($zip_path);
		
		header('Content-Description: File Transfer');
		header('Content-Type: application/octet-stream');
		header('Content-Disposition: attachment; filename=' . $quoted); 
		header('Content-Transfer-Encoding: binary');
		header('Connection: Keep-Alive');
		header('Expires: 0');
		header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
		header('Pragma: public');
		header('Content-Length: ' . $size);
		readfile($zip_path);
	}

} else {
	file_put_contents('download_log', "$time - $ip - $request".PHP_EOL , FILE_APPEND | LOCK_EX);

	$file = $icons_path . "/$request";
	if (!is_file($file)) exit;
	
	header('Content-Type: image/svg+xml');
	$quoted = sprintf('"%s"', addcslashes(basename($file), '"\\'));
	$size   = filesize($file);
	
	header('Content-Description: File Transfer');
	header('Content-Type: application/octet-stream');
	header('Content-Disposition: attachment; filename=' . $quoted); 
	header('Content-Transfer-Encoding: binary');
	header('Connection: Keep-Alive');
	header('Expires: 0');
	header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
	header('Pragma: public');
	header('Content-Length: ' . $size);
	readfile($file);
}