52 lines
1.2 KiB
TypeScript
52 lines
1.2 KiB
TypeScript
|
export default defineNuxtRouteMiddleware(async (to, from) => {
|
||
|
// Skip running middleware before masto has been initialised
|
||
|
if (!useNuxtApp().$masto)
|
||
|
return
|
||
|
|
||
|
if (!('server' in to.params))
|
||
|
return
|
||
|
|
||
|
if (!currentUser.value) {
|
||
|
if (from.params.server !== to.params.server) {
|
||
|
await loginTo({
|
||
|
server: to.params.server as string,
|
||
|
})
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// No need to additionally resolve an id if we're already logged in
|
||
|
if (currentUser.value.server === to.params.server)
|
||
|
return
|
||
|
|
||
|
// Tags don't need to be redirected to a local id
|
||
|
if (to.params.tag)
|
||
|
return
|
||
|
|
||
|
// Handle redirecting to new permalink structure for users with old links
|
||
|
if (!to.params.server) {
|
||
|
return {
|
||
|
...to,
|
||
|
params: {
|
||
|
...to.params,
|
||
|
server: currentUser.value.server,
|
||
|
},
|
||
|
}
|
||
|
}
|
||
|
|
||
|
try {
|
||
|
// If we're logged in, search for the local id the account or status corresponds to
|
||
|
const { value } = await useMasto().search({ q: `https:/${to.fullPath}`, resolve: true, limit: 1 }).next()
|
||
|
|
||
|
const { accounts, statuses } = value
|
||
|
if (statuses[0])
|
||
|
return getStatusRoute(statuses[0])
|
||
|
|
||
|
if (accounts[0])
|
||
|
return getAccountRoute(accounts[0])
|
||
|
}
|
||
|
catch {}
|
||
|
|
||
|
return '/home'
|
||
|
})
|