opnform-host-nginx/client/stores/auth.js

84 lines
1.8 KiB
JavaScript
Raw Normal View History

import { defineStore } from "pinia"
2023-12-09 15:47:03 +01:00
export const useAuthStore = defineStore("auth", {
2023-12-14 16:53:05 +01:00
state: () => {
return {
token: null,
admin_token: null,
user: null,
}
},
2023-12-09 15:47:03 +01:00
getters: {
check: (state) => state.user !== null && state.user !== undefined,
isImpersonating: (state) =>
state.admin_token !== null && state.admin_token !== undefined,
2023-12-09 15:47:03 +01:00
},
actions: {
// Stores admin token temporarily for impersonation
2023-12-14 16:53:05 +01:00
startImpersonating() {
this.setAdminToken(this.token)
2023-12-09 15:47:03 +01:00
},
// Stop admin impersonation
2023-12-14 16:53:05 +01:00
stopImpersonating() {
2024-01-16 11:23:16 +01:00
this.setToken(this.admin_token)
2023-12-09 15:47:03 +01:00
this.admin_token = null
},
2023-12-14 16:53:05 +01:00
setToken(token) {
this.setCookie("token", token)
2023-12-09 15:47:03 +01:00
this.token = token
},
2023-12-14 16:53:05 +01:00
setAdminToken(token) {
this.setCookie("admin_token", token)
2023-12-14 16:53:05 +01:00
this.admin_token = token
},
2023-12-16 19:21:03 +01:00
setCookie(name, value) {
if (import.meta.client) {
2023-12-16 19:21:03 +01:00
useCookie(name).value = value
}
2023-12-14 16:53:05 +01:00
},
2023-12-16 19:21:03 +01:00
initStore(token, adminToken) {
this.token = token
this.admin_token = adminToken
2023-12-09 15:47:03 +01:00
},
2023-12-16 19:21:03 +01:00
setUser(user) {
if (!user) {
console.error("No user, logging out.")
2023-12-16 19:21:03 +01:00
this.setToken(null)
2023-12-14 16:53:05 +01:00
}
2023-12-16 19:21:03 +01:00
this.user = user
this.initServiceClients()
2023-12-14 16:53:05 +01:00
},
updateUser(payload) {
2023-12-09 15:47:03 +01:00
this.user = payload
2023-12-11 11:56:21 +01:00
this.initServiceClients()
2023-12-09 15:47:03 +01:00
},
initServiceClients() {
if (!this.user) return
useAmplitude().setUser(this.user)
useCrisp().setUser(this.user)
2023-12-14 16:53:05 +01:00
2024-02-10 14:10:14 +01:00
// todo: set sentry user
},
2023-12-09 15:47:03 +01:00
logout() {
opnFetch("logout", { method: "POST" }).catch(() => {})
2023-12-09 15:47:03 +01:00
this.user = null
2023-12-14 16:53:05 +01:00
this.setToken(null)
2023-12-09 15:47:03 +01:00
},
// async fetchOauthUrl() {
// const {data} = await axios.post(`/api/oauth/${provider}`)
// return data.url
// },
},
2023-12-09 15:47:03 +01:00
})