145 lines
4.1 KiB
TypeScript
145 lines
4.1 KiB
TypeScript
import { defineStore } from "pinia"
|
|
import router from "#app/plugins/router";
|
|
import {Preferences} from "@capacitor/preferences";
|
|
|
|
export const useAuthStore = defineStore("auth", {
|
|
state: () => ({
|
|
user: null as null | { user_id: string; email: string; tenant_id?: string; role?: string },
|
|
profile: null as null | any,
|
|
tenants: [] as { tenant_id: string; role: string; tenants: { id: string; name: string } }[],
|
|
permissions: [] as string[],
|
|
activeTenant: null as any,
|
|
activeTenantData: null as any,
|
|
loading: true as boolean,
|
|
notLoggedIn: true,
|
|
}),
|
|
|
|
actions: {
|
|
async persist(token) {
|
|
|
|
console.log("On Web")
|
|
useCookie("token").value = token // persistieren
|
|
|
|
},
|
|
|
|
async initStore() {
|
|
console.log("Auth initStore")
|
|
await this.fetchMe()
|
|
|
|
if(this.activeTenant > 0) {
|
|
this.loading = false
|
|
|
|
navigateTo("/")
|
|
}
|
|
},
|
|
|
|
async init(token=null) {
|
|
console.log("Auth init")
|
|
await this.fetchMe(token)
|
|
|
|
const tempStore = useTempStore()
|
|
|
|
if(this.profile.temp_config) tempStore.setStoredTempConfig(this.profile.temp_config)
|
|
if(this.activeTenant > 0) {
|
|
this.loading = false
|
|
|
|
navigateTo("/")
|
|
}
|
|
},
|
|
|
|
async login(email: string, password: string) {
|
|
try {
|
|
console.log("Auth login")
|
|
const { token } = await useNuxtApp().$api("/auth/login", {
|
|
method: "POST",
|
|
body: { email, password }
|
|
})
|
|
console.log("Token: " + token)
|
|
await this.fetchMe(token)
|
|
} catch (e) {
|
|
console.log("login error:" + e)
|
|
}
|
|
|
|
},
|
|
|
|
async logout() {
|
|
console.log("Auth logout")
|
|
try {
|
|
await useNuxtApp().$api("/auth/logout", { method: "POST" })
|
|
} catch (e) {
|
|
console.error("Logout fehlgeschlagen:", e)
|
|
}
|
|
this.user = null
|
|
this.permissions = []
|
|
this.profile = null
|
|
this.activeTenant = null
|
|
this.tenants = []
|
|
|
|
useCookie("token").value = null
|
|
|
|
|
|
navigateTo("/login")
|
|
},
|
|
|
|
async fetchMe(jwt= null) {
|
|
console.log("Auth fetchMe")
|
|
const tempStore = useTempStore()
|
|
|
|
try {
|
|
const me = await useNuxtApp().$api("/api/me", {
|
|
headers: { Authorization: `Bearer ${jwt}`,
|
|
context: {
|
|
jwt
|
|
}}
|
|
})
|
|
console.log(me)
|
|
this.user = me.user
|
|
this.permissions = me.permissions
|
|
this.tenants = me.tenants
|
|
|
|
this.tenants.sort(function (a, b) {
|
|
if (a.id < b.id) return -1
|
|
if (a.id > b.id) return 1
|
|
})
|
|
|
|
this.profile = me.profile
|
|
|
|
if(this.profile.temp_config) tempStore.setStoredTempConfig(this.profile.temp_config)
|
|
|
|
if(me.activeTenant > 0) {
|
|
this.activeTenant = me.activeTenant
|
|
this.activeTenantData = me.tenants.find(i => i.id === me.activeTenant)
|
|
|
|
} else {
|
|
|
|
}
|
|
|
|
|
|
} catch (err: any) {
|
|
if (err?.response?.status === 401) this.logout()
|
|
}
|
|
},
|
|
|
|
async switchTenant(tenant_id: string) {
|
|
console.log("Auth switchTenant")
|
|
this.loading = true
|
|
const res = await useNuxtApp().$api("/api/tenant/switch", {
|
|
method: "POST",
|
|
body: { tenant_id }
|
|
})
|
|
console.log(res)
|
|
|
|
const {token} = res
|
|
|
|
|
|
useCookie("token").value = token // persistieren
|
|
|
|
|
|
await this.init(token)
|
|
},
|
|
|
|
hasPermission(key: string) {
|
|
return this.permissions.includes(key)
|
|
}
|
|
}
|
|
}) |