* Make project cards right-align their last element Spaces out elements in a `.project-card` using `justify-content: space-between;`. Fixes modrinth/knossos#170 * Automatically set URL for auth redirect * Make login button use base url or current origin Allows the login button to work in dev environment * Remove Axios base URL trailing slash * Update authUrl() on dashboard to match default * Remove 'code' query from URL on page load Allow non-exact paths to highlight mod & dashboard tabs Fixes modrinth/knossos#200 * Make page 5 button visible on page 4 (pagination) Fixes modrinth/knossos#184 * Color links on legal pages Fixes modrinth/knossos#166 * Set max notifications to 5 and ignore duplicates Fixes modrinth/knossos#175 * Add space above report button when no user desc Fixes modrinth/knossos#143 * Better text spacing from edge of mobile screen Fixes modrinth/knossos#179 * Fix slanted bars in modrinth/knossos#57 * Fix checkbox grid and role label Fixes modrinth/knossos#191 * Move mod 'settings' button to the far right Fixes modrinth/knossos#138 * Abbreviate minutes to min. when time is too long Not a perfect solution imo, but works for now Fixes modrinth/knossos#193 * Fix mobile header margins & add breakpoints Fixes modrinth/knossos#203 * Clean up nuxt config Silence babel warning & styleResources * Upgrade sass-loader to 10.1.1 and remove warning * Remove added horizontal footer padding https://github.com/modrinth/knossos/pull/199#discussion_r629011624 * Improve mobile header fix * Fix up minor inconsistencies in mod header * Remove hard coded date * Cleans up pagination to be more intuitive * Fixes member invite input on moble * Fix login button when searching mods * Improved mobile mod search Consistently sized pagination buttons Breakpoint for sort buttons on smaller screens * Consistent link style on text-only pages * Better 4k support * Slightly better mobile project-card support Shuffles categories under mod icon when there is room * Animate homepage typewriter effect backwards * Tiny commit to align mod icons in mod headers * Make processing status include 'Under Review' This can be later updated once the backend has a separate status * Create vercel.json * Update domain auto detection * Test vercel NODE_ENV * Remove console.log for debugging hosting services * Make mobile first + fix shrinked text circle size * Optimize SVG * Change media queries to be more mobile first * Remove `|| window.location.origin` * re-deploy vercel * Change "Processing" message to "Under review"
74 lines
2.1 KiB
JavaScript
74 lines
2.1 KiB
JavaScript
export default async function (context) {
|
|
if (!context.from) {
|
|
if (context.app.$cookies.get('auth-token-reset')) {
|
|
// Only remove the cookie related to the auth, instead of removing everything
|
|
context.app.$cookies.remove('auth-token')
|
|
context.app.$cookies.remove('auth-token-reset')
|
|
return
|
|
}
|
|
|
|
if (context.route.query.code) {
|
|
const date = new Date(Date.now() + 30 * 24 * 60 * 60 * 1000) // 30 days
|
|
context.app.$cookies.set('auth-token', context.route.query.code, {
|
|
secure: true,
|
|
sameSite: 'Strict',
|
|
httpOnly: true,
|
|
expires: date,
|
|
path: '/',
|
|
})
|
|
|
|
await context.store.dispatch('auth/fetchUser', {
|
|
token: context.route.query.code,
|
|
})
|
|
} else if (context.app.$cookies.get('auth-token')) {
|
|
const cookie = context.app.$cookies.get('auth-token')
|
|
|
|
await context.store.dispatch('auth/fetchUser', { token: cookie })
|
|
}
|
|
}
|
|
|
|
// Disable middleware if options: { auth: false } is set on the route
|
|
if (routeOption(context.route, 'auth', false)) return
|
|
|
|
// Disable middleware if no route was matched to allow 404/error page
|
|
if (!getMatchedComponents(context.route, []).length) {
|
|
return
|
|
}
|
|
|
|
if (!context.$auth.user) {
|
|
return context.redirect(
|
|
`https://api.modrinth.com/api/v1/auth/init?url=${process.env.domain}${context.route.fullPath}`
|
|
)
|
|
}
|
|
}
|
|
|
|
function routeOption(route, key, value) {
|
|
return route.matched.some((m) => {
|
|
if (process.client) {
|
|
// Client
|
|
return Object.values(m.components).some(
|
|
(component) => component.options && component.options[key] === value
|
|
)
|
|
} else {
|
|
// SSR
|
|
return Object.values(m.components).some((component) =>
|
|
Object.values(component._Ctor).some(
|
|
(ctor) => ctor.options && ctor.options[key] === value
|
|
)
|
|
)
|
|
}
|
|
})
|
|
}
|
|
|
|
function getMatchedComponents(route, matches) {
|
|
return [].concat(
|
|
...[],
|
|
...route.matched.map((m, index) => {
|
|
return Object.keys(m.components).map((key) => {
|
|
matches.push(index)
|
|
return m.components[key]
|
|
})
|
|
})
|
|
)
|
|
}
|