diff options
Diffstat (limited to 'front-end/src/views/Login/index.vue')
-rw-r--r-- | front-end/src/views/Login/index.vue | 120 |
1 files changed, 17 insertions, 103 deletions
diff --git a/front-end/src/views/Login/index.vue b/front-end/src/views/Login/index.vue index fea02d4..5d8f298 100644 --- a/front-end/src/views/Login/index.vue +++ b/front-end/src/views/Login/index.vue @@ -2,12 +2,8 @@ <div id="login-template" class="app-component-entry"> <div class="login-container"> - <div v-if="showTotp"> - <Totp @submit="totpSubmit" /> - </div> - - <div v-else-if="!loggedIn"> - <UserPass @login="submitLogin" /> + <div v-if="!loggedIn"> + <UserPass/> </div> <div v-else> @@ -24,12 +20,12 @@ </div> </div> - <div v-if="!(loggedIn || showTotp)" class="w-full mt-6"> - + <div v-if="!loggedIn" class="w-full mt-6"> + <Social /> <!-- pki button, forward to the pki route --> - <div v-if="pkiEnabled" class="mt-4"> + <div v-if="pkiEnabled" class="mt-3"> <router-link to="/login/pki"> <button type="submit" class="btn red social-button" :disabled="waiting"> <fa-icon :icon="['fa','certificate']" size="xl" /> @@ -44,50 +40,29 @@ </template> <script setup lang="ts"> -import { computed, ref } from 'vue' -import Totp from './components/Totp.vue' +import { } from 'vue' +import { apiCall, useWait } from '@vnuge/vnlib.browser' +import { isNil } from 'lodash-es' +import { useStore } from '../../store' +import { storeToRefs } from 'pinia' import UserPass from './components/UserPass.vue' import Social from './components/Social.vue' -import { - useMfaLogin, totpMfaProcessor, IMfaFlowContinuiation, MfaMethod, apiCall, - useMessage, useWait, useUser, useSession, useLastPage, useTitle, debugLog -} from '@vnuge/vnlib.browser' -import { useTimeoutFn } from '@vueuse/core' -import { isNil } from 'lodash-es' - -useTitle('Login') //pki enabled flag from env -const pkiEnabled = !isNil(import.meta.env.VITE_PKI_ENDPOINT); +const pkiEnabled = !isNil(import.meta.env.VITE_PKI_ENABLED); -const { waiting } = useWait() -const { setMessage } = useMessage() -const { logout } = useUser(); -const { loggedIn } = useSession() - -//Setup mfa login -const { login } = useMfaLogin([ totpMfaProcessor() ]) - -//If logged in re-route to the last page the user -//was on but delayed to the session has time to be set -const { gotoLastPage } = useLastPage() -useTimeoutFn(() => loggedIn.value ? gotoLastPage() : null, 500) +const store = useStore(); +const { loggedIn } = storeToRefs(store) -const mfaUpgrade = ref<IMfaFlowContinuiation>(); -const mfaTimeout = ref<number>(600 * 1000); -const { start, stop } = useTimeoutFn(() => { - //Clear upgrade message - mfaUpgrade.value = undefined; - setMessage('Your TOTP request has expired') -}, mfaTimeout, { immediate: false }) +store.setPageTitle('Login') -const showTotp = computed(() => mfaUpgrade.value?.type === MfaMethod.TOTP) +const { waiting } = useWait() const submitLogout = async () => { //Submit logout request await apiCall(async ({ toaster }) => { - // Attempt to login - await logout() + // Attempt to logout + await store.socialOauth.logout() // Push a new toast message toaster.general.success({ id: 'logout-success', @@ -98,67 +73,6 @@ const submitLogout = async () => { }) } -const submitLogin = async ({username, password} : { username: string, password:string }) => { - // Run login in an apicall wrapper - await apiCall(async ({ toaster }) => { - // Attempt to login - const response = await login(username, password); - - debugLog('Mfa-login', response) - - if(response.success == false){ - setMessage(response.result) - return; - } - - //Try to get response as a flow continuation - const mfa = response as IMfaFlowContinuiation - - // Response is a totp upgrade request - if (mfa.type === MfaMethod.TOTP) { - - //Store the upgrade message - mfaUpgrade.value = mfa; - //Setup timeout timer - mfaTimeout.value = mfa.expires! * 1000; - start(); - } - //If login without mfa was successful - else if (response.success) { - // Push a new toast message - toaster.general.success({ - title: 'Success', - text: 'You have been logged in', - }) - } - }) -} - -const totpSubmit = ({ code } : {code:number}) =>{ - apiCall(async ({ toaster }) =>{ - - if (!mfaUpgrade.value){ - return; - } - - //Submit totp code - const res = await mfaUpgrade.value.submit({ code }) - res.getResultOrThrow() - - //Clear timer - stop(); - - //Clear upgrade message - mfaUpgrade.value = undefined; - - // Push a new toast message - toaster.general.success({ - title: 'Success', - text: 'You have been logged in', - }) - }) -} - </script> <style lang="scss"> |