From 2e7e718def06e5abfeb6fcc73cf5d55dde0977bc Mon Sep 17 00:00:00 2001 From: Naomi Carrigan Date: Fri, 20 Feb 2026 16:47:29 -0800 Subject: [PATCH] fix: handle base64 in music service --- api/src/app/services/music.service.ts | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/api/src/app/services/music.service.ts b/api/src/app/services/music.service.ts index 34890f6..de53cc5 100644 --- a/api/src/app/services/music.service.ts +++ b/api/src/app/services/music.service.ts @@ -10,6 +10,7 @@ import { validateUrl, validateRating, validateStringLength, + validateDataUrl, MAX_LENGTHS, } from "../utils/validation"; @@ -42,8 +43,23 @@ export class MusicService { } // Validate cover art URL - if (data.coverArt && !validateUrl(data.coverArt)) { - throw new Error("Invalid cover art URL. Only http and https URLs are allowed."); + if (data.coverImage) { + if (data.coverImage.startsWith("data:")) { + const sizeInBytes = data.coverImage.length * 0.75; + if (sizeInBytes > MAX_LENGTHS.DATA_URL) { + throw new Error("Cover image must be under 5MB."); + } + if (!validateDataUrl(data.coverImage)) { + throw new Error("Invalid image data URL."); + } + } else { + if (!validateStringLength(data.coverImage, MAX_LENGTHS.URL)) { + throw new Error(`Cover image URL must be ${MAX_LENGTHS.URL} characters or less.`); + } + if (!validateUrl(data.coverImage)) { + throw new Error("Invalid cover image URL. Only http and https URLs are allowed."); + } + } } // Validate tags