import { defineStore } from "pinia"; import type { User } from "@/client/auth"; import { UserService, RoleEnum } from "@/client/auth"; import { S3KeyService } from "@/client/s3proxy"; import type { S3Key } from "@/client/s3proxy"; import { OpenAPI as S3ProxyOpenAPI } from "@/client/s3proxy"; import { OpenAPI as AuthOpenAPI } from "@/client/auth"; import { OpenAPI as WorkflowOpenAPI } from "@/client/workflow"; export type RootState = { token: string | null; user: User | null; s3key: S3Key | null; }; export const useAuthStore = defineStore({ id: "auth", state: () => ({ token: null, user: null, s3key: null, } as RootState), getters: { authenticated: (state) => state.token != null, foreignUser: (state) => state.user?.roles?.includes(RoleEnum.FOREIGN_USER) ?? true, normalUser: (state) => state.user?.roles?.includes(RoleEnum.USER) ?? false, workflowReviewer: (state) => state.user?.roles?.includes(RoleEnum.REVIEWER) ?? false, workflowDev: (state) => state.user?.roles?.includes(RoleEnum.DEVELOPER) ?? false, admin: (state) => state.user?.roles?.includes(RoleEnum.ADMINISTRATOR) ?? false, }, actions: { setToken(token: string | null) { if (token != null) { S3ProxyOpenAPI.TOKEN = token; AuthOpenAPI.TOKEN = token; WorkflowOpenAPI.TOKEN = token; this.token = token; UserService.userGetLoggedInUser() .then((user) => { this.updateUser(user); }) .catch(() => { this.token = null; }); } else { this.token = null; this.user = null; } }, setS3Key(key: S3Key | null) { this.s3key = key; }, updateUser(user: User) { this.user = user; S3KeyService.s3KeyGetUserKeys(user.uid) .then((keys) => { if (keys.length > 0) { this.setS3Key(keys[0]); } else { this.setS3Key(null); } }) .catch(() => { this.setS3Key(null); }); }, logout() { this.setToken(null); }, }, });