pvern/stores/useAuthStore.ts
2023-03-20 22:37:20 +01:00

54 lines
1.4 KiB
TypeScript

import { create } from "zustand";
import produce from "immer";
import axios, { AxiosInstance } from "axios";
import { CreateTicketResp } from "../hooks/useTicket";
interface Profile {
username: string;
domain: string;
ticketData: CreateTicketResp;
}
interface AuthStoreState extends Profile {
http: AxiosInstance;
isActive: boolean;
logout: () => void;
update: (state: Profile) => void;
}
const useAuthStore = create<AuthStoreState>((set) => ({
username: "",
domain: "",
ticketData: { data: { CSRFPreventionToken: "", ticket: "" } },
http: axios.create(),
isActive: false,
logout: () =>
set(
produce((state: AuthStoreState) => {
state.domain = "";
state.username = "";
state.http = axios.create();
state.isActive = false;
state.ticketData = { data: { CSRFPreventionToken: "", ticket: "" } };
})
),
update: ({ domain, username, ticketData }: Profile) =>
set(
produce((state: AuthStoreState) => {
state.domain = domain;
state.username = username;
state.ticketData = ticketData;
state.http = axios.create({
baseURL: domain,
headers: {
CSRFPreventionToken: ticketData.data.CSRFPreventionToken,
cookie: `PVEAuthCookie=${ticketData.data.ticket}`,
},
});
state.isActive = true;
})
),
}));
export default useAuthStore;