From 603a294443a3789cd3cdcbb811eafd73cf232f32 Mon Sep 17 00:00:00 2001 From: Skylar Ittner Date: Fri, 8 Feb 2019 20:20:54 -0700 Subject: [PATCH] Add SHA1 hashed thumbnail URLs when the base64 filename is too long --- cache/handle_404.php | 19 ++++++++++++++++--- database.mwb | Bin 6342 -> 7039 bytes lib/Thumbnail.lib.php | 26 ++++++++++++++++++++++++-- 3 files changed, 40 insertions(+), 5 deletions(-) diff --git a/cache/handle_404.php b/cache/handle_404.php index 53e384c..0181921 100644 --- a/cache/handle_404.php +++ b/cache/handle_404.php @@ -8,6 +8,8 @@ require_once __DIR__ . "/../required.php"; +header("Content-Type: text/plain;utf-8"); + $urlparts = explode("/", $_GET['file']); $fileparts = explode(".", end($urlparts)); @@ -21,12 +23,23 @@ if (!preg_match("/^[A-Za-z0-9\-!_]+$/", $fileparts[0])) { die("Encoded image URL invalid, refusing to parse."); } -$url = Base64::decode($fileparts[0]); +if (strpos($fileparts[0], "SHA1_") === 0) { + $hash = str_replace("SHA1_", "", $fileparts[0]); + if ($database->has("imagecache", ["hash" => $hash])) { + $url = $database->get("imagecache", 'url', ["hash" => $hash]); + echo $url; + } else { + http_response_code(404); + die("Not found."); + } +} else { + $url = Base64::decode($fileparts[0]); +} if (!filter_var($url, FILTER_VALIDATE_URL)) { http_response_code(403); die("Invalid URL."); } -//header("Content-Type: image/jpeg"); -echo Thumbnail::addThumbnailToCache($url, (int) $fileparts[1]); \ No newline at end of file +header("Content-Type: image/jpeg"); +echo Thumbnail::addThumbnailToCache($url, (int) $fileparts[1]); diff --git a/database.mwb b/database.mwb index 26402ce9e5aefea6320b946557a2254de9bc6eb4..572f41e30cf6d70a931bf8f74c2298c13ea0a6b1 100644 GIT binary patch literal 7039 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 delta 6248 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 a{>}Km^#7lXm!ui=)U>Dw@(d|z+5ZChbJqF* diff --git a/lib/Thumbnail.lib.php b/lib/Thumbnail.lib.php index 12bb2a6..3eb5084 100644 --- a/lib/Thumbnail.lib.php +++ b/lib/Thumbnail.lib.php @@ -41,22 +41,44 @@ class Thumbnail { } /** - * Make a thumbnail, save it to the disk cache, and return a url relative to - * the app root. + * Return a thumbnail URL relative to the app root for the given image URL. * @param string $url * @param int $width * @param int,bool $height * @return string */ static function getThumbnailCacheURL(string $url, int $width = 150, $height = true): string { + global $database; $encodedfilename = Base64::encode($url); + if (strlen("$encodedfilename.$width.jpg") > 250) { + // We're too long for common filesystems + $encodedfilename = "SHA1_" . sha1($url); + if (!$database->has("imagecache", ["url" => $url])) { + $database->insert("imagecache", ["url" => $url, "hash" => $encodedfilename, "created" => date("Y-m-d H:i:s")]); + } + } $path = "cache/thumb/$encodedfilename.$width.jpg"; return $path; } + /** + * Generate a thumbnail and save it to the cache + * @param string $url + * @param int $width + * @param type $height + * @return type + */ static function addThumbnailToCache(string $url, int $width = 150, $height = true) { + global $database; $encodedfilename = Base64::encode($url); + if (strlen("$encodedfilename.$width.jpg") > 250) { + // We're too long for common filesystems + $encodedfilename = "SHA1_" . sha1($url); + if (!$database->has("imagecache", ["url" => $url])) { + $database->insert("imagecache", ["url" => $url, "hash" => $encodedfilename, "created" => date("Y-m-d H:i:s")]); + } + } $path = "cache/thumb/$encodedfilename.$width.jpg"; $image = self::getThumbnailFromUrl($url, $width, $height); file_put_contents(__DIR__ . "/../$path", $image);