*/ private const STORAGE_ASSET_SUFFIXES = [ 'event-logo', 'event-cover', 'itinerary-cover', 'business-logo', 'business-cover', 'menu-logo', 'menu-cover', 'church-logo', 'church-cover', 'book-cover', 'vcard-avatar', 'app-icon', 'file', ]; public function handle(Request $request, Closure $next): Response { if (! preg_match('#^q/[a-z0-9]#i', ltrim($request->path(), '/'))) { return $next($request); } if (LadillLink::isInternalRequest($request)) { return $next($request); } if ($this->servesStoredAsset($request)) { return $next($request); } return LadillLink::legacyRedirect($request); } private function servesStoredAsset(Request $request): bool { $shortCode = $request->route('shortCode'); if (! is_string($shortCode) || $shortCode === '') { return false; } $path = ltrim($request->path(), '/'); $prefix = 'q/'.$shortCode.'/'; if (! str_starts_with($path, $prefix)) { return false; } $suffix = substr($path, strlen($prefix)); if (in_array($suffix, self::STORAGE_ASSET_SUFFIXES, true)) { return true; } return (bool) preg_match('#^(image/\d+|item-image/\d+/\d+)$#', $suffix); } }