From 33d0bd50cb663d1201d50d1c6a8ec5d8fd2a9807 Mon Sep 17 00:00:00 2001 From: Carson Fleming Date: Fri, 24 Jan 2025 19:47:58 -0500 Subject: relax slug validation pattern --- routes.js | 4 ++-- utils.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/routes.js b/routes.js index ec333ec..8e7a21a 100644 --- a/routes.js +++ b/routes.js @@ -8,8 +8,8 @@ async function createRoute(res, url, slug) { try { if (!utils.isUrlFormatted(url)) return utils.sendBadRequestError(res, 'URL "'+url+'" is malformatted. Must be a valid URL.', 'Malformed URL'); - if (!utils.isAlphaNumeric(slug)) - return utils.sendBadRequestError(res, 'Slug "'+slug+'" is malformatted. Must be alphanumeric.', 'Malformed Short URL'); + if (!utils.isSlugFormatted(slug)) + return utils.sendBadRequestError(res, 'Slug "'+slug+'" is malformatted. Must be 2+ letters or numbers with optional dashes in the middle.', 'Malformed Short URL'); slug = slug.toLowerCase(); if (await Url.exists({slug: slug})) diff --git a/utils.js b/utils.js index 1fc17c6..379c65e 100644 --- a/utils.js +++ b/utils.js @@ -34,8 +34,8 @@ const helperFunctions = { sendSuccessfulSlugCreation : function (res, slug) { res.status(201).json({status: "SUCCESS", statusCode: 201, data: {shortUrl: config.BASE+slug}}); }, - isAlphaNumeric : function (str) { - return str.match(/^[a-zA-Z0-9]+$/) !== null; + isSlugFormatted : function (str) { + return str.match(/^[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9]$/) !== null; }, isUrlFormatted : function (str) { try { -- cgit v1.2.3