34 lines
1 KiB
PHP
34 lines
1 KiB
PHP
<?php
|
|
|
|
$id = $_GET['id'] ?? null;
|
|
$class = $_GET['class'] ?? null;
|
|
$extension = $_GET['extension'] ?? 'png';
|
|
$isValidId = is_string($id) && preg_match('/^[a-f0-9\-]{36}$/', $id);
|
|
$isValidClass = is_string($class) && preg_match('/^w\d{2,4}$/', $class);
|
|
|
|
if (!$isValidId || !$isValidClass) {
|
|
header("Location: /404", true, 302);
|
|
exit;
|
|
}
|
|
|
|
$cdnUrl = "https://cdn.coryd.dev/$id.$extension?class=$class";
|
|
$ch = curl_init($cdnUrl);
|
|
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
|
|
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT'] ?? 'coryd-bot/1.0');
|
|
|
|
$image = curl_exec($ch);
|
|
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
|
$contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
|
|
|
|
curl_close($ch);
|
|
|
|
if ($httpCode !== 200 || $image === false || strpos($contentType, 'image/') !== 0) {
|
|
error_log("Failed to fetch image: $cdnUrl ($httpCode - $contentType)");
|
|
header("Location: /404", true, 302);
|
|
exit;
|
|
}
|
|
|
|
header("Content-Type: $contentType");
|
|
echo $image;
|