2FAuth/resources/js_vue3/stores/user.js

74 lines
1.9 KiB
JavaScript
Raw Normal View History

2023-09-22 15:07:47 +02:00
import { defineStore } from 'pinia'
import authService from '@/services/authService'
import router from '@/router'
import { useColorMode } from '@vueuse/core'
2023-09-22 15:07:47 +02:00
export const useUserStore = defineStore({
id: 'user',
2023-09-22 15:07:47 +02:00
state: () => {
2023-09-22 15:07:47 +02:00
return {
name: undefined,
email: undefined,
preferences: window.defaultPreferences,
2023-09-22 15:07:47 +02:00
isAdmin: false,
}
},
getters: {
isAuthenticated() {
return this.name != undefined
}
},
actions: {
logout() {
// async appLogout(evt) {
if (this.$2fauth.config.proxyAuth) {
if (this.$2fauth.config.proxyLogoutUrl) {
location.assign(this.$2fauth.config.proxyLogoutUrl)
}
else return false
}
else {
return authService.logout().then(() => {
this.reset()
})
// this.$router.push({ name: 'login', params: { forceRefresh: true } })
}
// },
},
reset() {
localStorage.clear()
this.$reset()
this.applyUserPrefs()
router.push({ name: 'login' })
},
applyTheme() {
const mode = useColorMode({
attribute: 'data-theme',
})
mode.value = this.preferences.theme == 'system' ? 'auto' : this.preferences.theme
},
applyLanguage() {
const { isSupported, language } = useNavigatorLanguage()
if (isSupported) {
loadLanguageAsync(this.preferences.lang == 'browser' ? language.value.slice(0, 2) : this.preferences.lang)
}
else loadLanguageAsync('en')
},
applyUserPrefs() {
this.applyTheme()
this.applyLanguage()
}
},
2023-09-22 15:07:47 +02:00
})