From 84a1c0d4cc4a45022ea3267591f253d544304f57 Mon Sep 17 00:00:00 2001 From: Cory Dransfeldt Date: Sat, 10 May 2025 19:14:29 -0700 Subject: [PATCH] fix(oembed.php): dry up response objects --- api/oembed.php | 70 ++++++++++++++++++++-------------------- package-lock.json | 4 +-- package.json | 2 +- src/meta/htaccess.liquid | 3 +- 4 files changed, 40 insertions(+), 39 deletions(-) diff --git a/api/oembed.php b/api/oembed.php index ef1f7b4..d33118a 100644 --- a/api/oembed.php +++ b/api/oembed.php @@ -11,58 +11,58 @@ class OembedHandler extends BaseHandler { $requestUrl = $_GET['url'] ?? null; $globals = $this->fetchGlobals(); - - if (!$requestUrl) { - $this->sendResponse([ - 'version' => '1.0', - 'type' => 'link', - 'title' => $globals['site_name'], - 'author_name' => $globals['author'], - 'provider_name' => $globals['site_name'], - 'provider_url' => $globals['url'], - 'thumbnail_url' => $globals['url'] . '/og/w800' . $globals['avatar'], - 'html' => '' . $globals['site_name'] . '', - ]); - } - - $parsed = parse_url($requestUrl); + $parsed = $requestUrl ? parse_url($requestUrl) : null; $relativePath = $parsed['path'] ?? null; + + if (!$requestUrl || $relativePath === '/') $this->sendResponse($this->buildResponse( + $globals['site_name'], + $globals['url'], + $globals['avatar'], + $globals + )); + if (!$relativePath) $this->sendErrorResponse('Invalid url', 400); if ($relativePath !== '/' && str_ends_with($relativePath, '/')) $relativePath = rtrim($relativePath, '/'); $results = $this->fetchFromApi('optimized_oembed', 'url=eq.' . urlencode($relativePath)); if (!empty($results)) { $item = $results[0]; - $this->sendResponse([ - 'version' => '1.0', - 'type' => 'link', - 'title' => $item['title'], - 'author_name' => $globals['author'], - 'provider_name' => $globals['site_name'], - 'provider_url' => $globals['url'], - 'thumbnail_url' => $globals['url'] . '/og/w800' . $item['image_url'], - 'html' => '' . htmlspecialchars($item['title']) . '', - ]); + $this->sendResponse($this->buildResponse( + $item['title'], + $item['url'], + $item['image_url'], + $globals + )); } $segments = explode('/', trim($relativePath, '/')); if (count($segments) === 1 && $segments[0] !== '') { $title = ucwords(str_replace('-', ' ', $segments[0])) . ' • ' . $globals['author']; - $this->sendResponse([ - 'version' => '1.0', - 'type' => 'link', - 'title' => $title, - 'author_name' => $globals['author'], - 'provider_name' => $globals['site_name'], - 'provider_url' => $globals['url'], - 'thumbnail_url' => $globals['url'] . '/og/w800' . $globals['avatar'], - 'html' => '' . htmlspecialchars($title) . '', - ]); + $this->sendResponse($this->buildResponse( + $title, + $relativePath, + $globals['avatar'], + $globals + )); } $this->sendErrorResponse('No match found', 404); } + private function buildResponse(string $title, string $url, string $imagePath, array $globals): array + { + return [ + 'version' => '1.0', + 'type' => 'link', + 'title' => $title, + 'author_name' => $globals['author'], + 'provider_name' => $globals['site_name'], + 'provider_url' => $globals['url'], + 'thumbnail_url' => $globals['url'] . '/og/w800' . $imagePath, + 'html' => '' . htmlspecialchars($title) . '', + ]; + } + private function fetchGlobals(): array { $globals = $this->fetchFromApi('optimized_globals', 'limit=1'); diff --git a/package-lock.json b/package-lock.json index 3b9e6ef..0d1931f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "coryd.dev", - "version": "4.0.3", + "version": "4.0.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "coryd.dev", - "version": "4.0.3", + "version": "4.0.4", "license": "MIT", "dependencies": { "html-minifier-terser": "7.2.0", diff --git a/package.json b/package.json index 62d6a1b..55fcb5c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "coryd.dev", - "version": "4.0.3", + "version": "4.0.4", "description": "The source for my personal site. Built using 11ty (and other tools).", "type": "module", "engines": { diff --git a/src/meta/htaccess.liquid b/src/meta/htaccess.liquid index dc9188b..fa928c9 100644 --- a/src/meta/htaccess.liquid +++ b/src/meta/htaccess.liquid @@ -56,7 +56,8 @@ RewriteRule ^og/([a-z0-9\-]+)/([a-f0-9\-]+)\.([a-z0-9]+)$ /api/og-image.php?id=$ RewriteRule ^og/([a-z0-9\-]+)/([\d\.]+)/([a-f0-9\-]+)\.([a-z0-9]+)$ /api/og-image.php?id=$3&class=$1&v=$2&extension=$4 [L] ## oembed -RewriteRule ^oembed/(.*)$ /api/oembed.php?url=https://www.coryd.dev/$1 [L,QSA] +RewriteRule ^oembed/?$ /api/oembed.php [L] +RewriteRule ^oembed/(.+)$ /api/oembed.php?url=https://www.coryd.dev/$1 [L,QSA] {% for redirect in redirects -%} Redirect {{ redirect.status_code | default: "301" }} {{ redirect.source_url }} {{ redirect.destination_url }}