Files
ladill-events/app/Http/Middleware/RedirectLegacyQrToLadillLink.php
T
isaaccladandCursor d942ebaa83
Deploy Ladill Events / deploy (push) Successful in 25s
Fix event branding images broken by legacy QR redirect.
Keep logo and cover asset URLs on Events instead of redirecting them to
ladl.link, which does not serve uploaded QR storage files.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-02 08:14:17 +00:00

68 lines
1.6 KiB
PHP

<?php
namespace App\Http\Middleware;
use App\Support\LadillLink;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class RedirectLegacyQrToLadillLink
{
/** @var list<string> */
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);
}
}