diff --git a/src/assets/base.css b/src/assets/base.css index 3474f444941f8de331422c1d5f2561ddd56854e7..3254e7db976246c0354e7c9d688816a04beba4d9 100644 --- a/src/assets/base.css +++ b/src/assets/base.css @@ -30,12 +30,6 @@ --section-gap: 160px; } -@media (prefers-color-scheme: dark) { - :root { - /* TODO: add dark mode colors */ - } -} - *, *::before, *::after { diff --git a/src/router/index.ts b/src/router/index.ts index 4658c940e13f36ef9dea125f394a201e280f1d65..9f30616b214ad3e24875d084950a7ed858abc27b 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -1,5 +1,4 @@ import { createRouter, createWebHistory } from 'vue-router' -import authInterceptor from '@/services/authInterceptor' import { useUserStore } from '@/stores/userStore' const router = createRouter({ @@ -121,9 +120,9 @@ const router = createRouter({ component: () => import('@/views/NotFoundView.vue') }, { - path: '/addAlternativeLogin', - name: 'addAlternativeLogin', - component: () => import('@/views/AddAlternativeLogin.vue') + path: '/konfigurerBiometri', + name: 'configure-biometric', + component: () => import('@/views/ConfigBiometricView.vue') } ], scrollBehavior() { @@ -141,19 +140,20 @@ router.beforeEach(async (to, from, next) => { ] const authRequired = !publicPages.some((page) => page.name === to.name) - const loggedIn = sessionStorage.getItem('accessToken') - const loginToken = localStorage.getItem('loginToken') + const hasLoginCredentials = + sessionStorage.getItem('accessToken') !== null && + localStorage.getItem('refreshToken') !== null - if (authRequired && !loggedIn && !loginToken) { + if (authRequired && !hasLoginCredentials) { console.log('Routing to login') await router.replace({ name: 'login' }) return next({ name: 'login' }) - } else if (!authRequired && loggedIn) { - await router.replace({ name: 'home' }) - return next({ name: 'home' }) + } else if (!authRequired && !hasLoginCredentials) { + return next() } const configPages = [ + { name: 'configure-biometric' }, { name: 'configurations1' }, { name: 'configurations2' }, { name: 'configurations3' }, @@ -164,28 +164,17 @@ router.beforeEach(async (to, from, next) => { const userStore = useUserStore() - if (userStore.isUserConfigured == null) { - console.log('Checking if user is configured') - - await authInterceptor('/config') - .then((response) => { - console.log(response) - - userStore.isUserConfigured = response.data.challengeConfig != null - }) - .catch((response) => { - console.log(response) - userStore.isUserConfigured = false - }) + if (userStore.user.isConfigured == false) { + await userStore.checkIfUserConfigured() } const configRequired = !configPages.some((page) => page.name === to.name) + const isConfigured = userStore.user.isConfigured - if (configRequired && !userStore.isUserConfigured) { - console.log('Routing to configurations1') - await router.replace({ name: 'configurations1' }) - return next({ name: 'configurations1' }) - } else if (!configRequired && userStore.isUserConfigured) { + if (configRequired && !isConfigured) { + await router.replace({ name: 'configure-biometric' }) + return next({ name: 'configure-biometric' }) + } else if (!configRequired && isConfigured) { await router.replace({ name: 'home' }) return next({ name: 'home' }) } diff --git a/src/services/authInterceptor.ts b/src/services/authInterceptor.ts index d153e30e5b5def4f2e2ca30f9b894c8a8de54ce8..4fd3936b4c2466b417b812294f8ed567db87a959 100644 --- a/src/services/authInterceptor.ts +++ b/src/services/authInterceptor.ts @@ -35,18 +35,18 @@ authInterceptor.interceptors.response.use( originalRequest._retry = true sessionStorage.removeItem('accessToken') - const loginToken = localStorage.getItem('loginToken') + const refreshToken = localStorage.getItem('refreshToken') axios - .post('/auth/loginToken', null, { + .post('/auth/renewToken', null, { headers: { - Authorization: `Bearer ${loginToken}` + Authorization: `Bearer ${refreshToken}` } }) .then((response) => { router.push({ name: 'login-bio', params: { username: response.data.username } }) }) .catch(() => { - localStorage.removeItem('loginToken') + localStorage.removeItem('refreshToken') router.push({ name: 'login' }) Promise.reject(error) diff --git a/src/stores/userStore.ts b/src/stores/userStore.ts index 2d2a30e7d561deaf35e2972c3832f173597d64ee..a40bd558854b047a2e60b747563c1bad88bb6566 100644 --- a/src/stores/userStore.ts +++ b/src/stores/userStore.ts @@ -13,10 +13,10 @@ export const useUserStore = defineStore('user', () => { const defaultUser: User = { firstname: 'Firstname', lastname: 'Lastname', - username: 'Username' + username: 'Username', + isConfigured: false } - const isUserConfigured = ref<boolean | null>(null) const user = ref<User>(defaultUser) const errorMessage = ref<string>('') @@ -29,7 +29,7 @@ export const useUserStore = defineStore('user', () => { ) => { await axios .post(`http://localhost:8080/auth/register`, { - firstName: firstname, //TODO rename all instances of firstname to firstName + firstName: firstname, lastName: lastname, email: email, username: username, @@ -43,7 +43,7 @@ export const useUserStore = defineStore('user', () => { user.value.lastname = lastname user.value.username = username - router.push({ name: 'addAlternativeLogin' }) + router.push({ name: 'configure-biometric' }) }) .catch((error) => { const axiosError = error as AxiosError @@ -65,7 +65,11 @@ export const useUserStore = defineStore('user', () => { user.value.lastname = response.data.lastName user.value.username = response.data.username - router.push({ name: 'home' }) + checkIfUserConfigured() + + user.value.isConfigured + ? router.push({ name: 'home' }) + : router.push({ name: 'configure-biometric' }) }) .catch((error) => { const axiosError = error as AxiosError @@ -78,8 +82,6 @@ export const useUserStore = defineStore('user', () => { sessionStorage.removeItem('accessToken') localStorage.removeItem('refreshToken') user.value = defaultUser - isUserConfigured.value = null - router.push({ name: 'login' }) } @@ -216,13 +218,25 @@ export const useUserStore = defineStore('user', () => { } } + const checkIfUserConfigured = async () => { + await authInterceptor('/config') + .then((response) => { + user.value.isConfigured = response.data.challengeConfig != null + console.log('User configured: ' + user.value.isConfigured) + }) + .catch(() => { + user.value.isConfigured = false + }) + } + return { + user, + checkIfUserConfigured, register, login, logout, bioLogin, bioRegister, - isUserConfigured, errorMessage } }) diff --git a/src/types/user.ts b/src/types/user.ts index a420d33a4deb8de0e12fb303edf205b3be5e703f..624188688f1bec4c544ebf3b4d21d50f4a2d9be9 100644 --- a/src/types/user.ts +++ b/src/types/user.ts @@ -2,4 +2,6 @@ export interface User { firstname: string lastname: string username: string + isConfigured: boolean + isBiometric?: boolean } diff --git a/src/views/AddAlternativeLogin.vue b/src/views/ConfigBiometricView.vue similarity index 100% rename from src/views/AddAlternativeLogin.vue rename to src/views/ConfigBiometricView.vue