From 24bbe9135bf8a66ffc5b1f17578f5ad8995908e1 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Wed, 30 Nov 2022 13:31:33 +0000 Subject: [PATCH] fix: early return on invalid permalinks resolves #255 --- pages/[...permalink].vue | 49 +++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/pages/[...permalink].vue b/pages/[...permalink].vue index c1c163a3..d961c240 100644 --- a/pages/[...permalink].vue +++ b/pages/[...permalink].vue @@ -3,32 +3,39 @@ import { parseURL } from 'ufo' definePageMeta({ middleware: async (to) => { - let permalink = Array.isArray(to.params.permalink) - ? to.params.permalink.join('/') - : to.params.permalink + const HANDLED_MASTO_URL = /^(https?:\/\/)?(\w+\.)+\w+\/(@[@\w\d\.]+)(\/\d+)?$/ + try { + let permalink = Array.isArray(to.params.permalink) + ? to.params.permalink.join('/') + : to.params.permalink - if (!permalink.startsWith('http')) - permalink = `https://${permalink}` + if (!HANDLED_MASTO_URL.test(permalink)) + return '/home' - if (!currentUser.value) { - const { host, pathname } = parseURL(permalink) - await loginTo({ server: host! }) - return pathname - } + if (!permalink.startsWith('http')) + permalink = `https://${permalink}` - const { value } = await useMasto().search({ q: permalink, resolve: true, limit: 1 }).next() - - const { accounts, statuses } = value - if (statuses[0]) { - return { - path: getStatusPath(statuses[0]), - state: { - status: statuses[0] as any, - }, + if (!currentUser.value) { + const { host, pathname } = parseURL(permalink) + await loginTo({ server: host! }) + return pathname } + + const { value } = await useMasto().search({ q: permalink, resolve: true, limit: 1 }).next() + + const { accounts, statuses } = value + if (statuses[0]) { + return { + path: getStatusPath(statuses[0]), + state: { + status: statuses[0] as any, + }, + } + } + if (accounts[0]) + return getAccountPath(accounts[0]) } - if (accounts[0]) - return getAccountPath(accounts[0]) + catch {} return '/home' },