fix: improve permalink handling somewhat

This commit is contained in:
Daniel Roe 2022-12-01 22:59:08 +00:00
parent 131d1af827
commit 6dfc94e2a5
No known key found for this signature in database
GPG key ID: 22D5008E4F5D9B55
3 changed files with 31 additions and 2 deletions

View file

@ -12,3 +12,5 @@ export const STORAGE_KEY_FIRST_VISIT = 'elk-first-visit'
export const STORAGE_KEY_ZEN_MODE = 'elk-zenmode' export const STORAGE_KEY_ZEN_MODE = 'elk-zenmode'
export const STORAGE_KEY_LANG = 'elk-lang' export const STORAGE_KEY_LANG = 'elk-lang'
export const STORAGE_KEY_FEATURE_FLAGS = 'elk-feature-flags' export const STORAGE_KEY_FEATURE_FLAGS = 'elk-feature-flags'
export const HANDLED_MASTO_URLS = /^(https?:\/\/)?([\w\d-]+\.)+\w+\/(@[@\w\d-\.]+)(\/objects)?(\/\d+)?$/

View file

@ -1,16 +1,16 @@
<script setup lang="ts"> <script setup lang="ts">
import { parseURL } from 'ufo' import { parseURL } from 'ufo'
import { HANDLED_MASTO_URLS } from '~/constants'
definePageMeta({ definePageMeta({
name: 'permalink', name: 'permalink',
middleware: async (to) => { middleware: async (to) => {
const HANDLED_MASTO_URL = /^(https?:\/\/)?(\w+\.)+\w+\/(@[@\w\d\.]+)(\/\d+)?$/
try { try {
let permalink = Array.isArray(to.params.permalink) let permalink = Array.isArray(to.params.permalink)
? to.params.permalink.join('/') ? to.params.permalink.join('/')
: to.params.permalink : to.params.permalink
if (!HANDLED_MASTO_URL.test(permalink)) if (!HANDLED_MASTO_URLS.test(permalink))
return '/home' return '/home'
if (!permalink.startsWith('http')) if (!permalink.startsWith('http'))
@ -19,6 +19,10 @@ definePageMeta({
if (!currentUser.value) { if (!currentUser.value) {
const { host, pathname } = parseURL(permalink) const { host, pathname } = parseURL(permalink)
await loginTo({ server: host! }) await loginTo({ server: host! })
if (pathname.match(/^\/@[^/]+$/))
return `${pathname}@${host}`
return pathname return pathname
} }

23
tests/permalinks.test.ts Normal file
View file

@ -0,0 +1,23 @@
import { describe, expect, it } from 'vitest'
import { HANDLED_MASTO_URLS } from '../constants'
const validPermalinks = [
'https://m1as-social34.to.social/@elk',
'https://m1as-social34.to.social/@elk22/123',
'https://m1as-social34.to.social/@elk22/objects/123',
'mas.to/@elk',
]
const invalidPermalinks = [
'https://mas.to',
'https://mas.to/elk/123',
]
describe('permalinks', () => {
it.each(validPermalinks)('should recognise %s', (url) => {
expect(HANDLED_MASTO_URLS.test(url)).toBe(true)
})
it.each(invalidPermalinks)('should not recognise %s', (url) => {
expect(HANDLED_MASTO_URLS.test(url)).toBe(false)
})
})