37 lines
989 B
TypeScript
37 lines
989 B
TypeScript
import { defineStore } from "pinia";
|
|
import { api, type MeResponse } from "@/api";
|
|
|
|
export const useAuthStore = defineStore("auth", {
|
|
state: () => ({
|
|
loaded: false,
|
|
loggedIn: false,
|
|
user: null as MeResponse["user"] | null,
|
|
permissions: [] as string[],
|
|
org: { name: "IPAM", logo: "" },
|
|
version: "unknown",
|
|
}),
|
|
getters: {
|
|
can: (state) => (perm: string) => state.permissions.includes(perm),
|
|
},
|
|
actions: {
|
|
async fetchMe() {
|
|
const data = await api.me();
|
|
this.loaded = true;
|
|
this.loggedIn = data.logged_in;
|
|
this.user = data.user ?? null;
|
|
this.permissions = data.permissions ?? [];
|
|
this.org = data.org ?? this.org;
|
|
this.version = data.app_version ?? "unknown";
|
|
},
|
|
async login(email: string, password: string) {
|
|
return api.login(email, password);
|
|
},
|
|
async logout() {
|
|
await api.logout();
|
|
this.loggedIn = false;
|
|
this.user = null;
|
|
this.permissions = [];
|
|
},
|
|
},
|
|
});
|