37 lines
1.2 KiB
TypeScript
37 lines
1.2 KiB
TypeScript
import { useContext, createContext, ReactNode } from "react";
|
|
import useSWR from "swr";
|
|
import { get } from "../util/fetcher.ts";
|
|
import useLocalStorage from "./useLocalStorage.tsx";
|
|
|
|
export type AdminContext = { isAdmin: boolean; username: string; token: string; };
|
|
|
|
const defaultValue: AdminContext = { isAdmin: false, username: "", token: "" };
|
|
|
|
const AuthContext = createContext<AdminContext>(defaultValue);
|
|
|
|
|
|
// {"code":200,"status":true,"data":{"isAdmin":true,"username":"alekswilc","token":"test"}}
|
|
const getUserAuthData = () =>
|
|
{
|
|
const [ value, _setValue ] = useLocalStorage<string | undefined>("auth_token", undefined);
|
|
|
|
if (!value || value === "undefined")
|
|
{
|
|
return { isAdmin: false, username: "", token: "" };
|
|
}
|
|
|
|
const { data } = useSWR(`/admin/auth/?token=${ value }`, get);
|
|
|
|
return data ? { isAdmin: data.data.isAdmin, username: data.data.username, token: value } : { isAdmin: false, username: "", token: "" };
|
|
};
|
|
|
|
export const AuthProvider = ({ children }: { children: ReactNode }) =>
|
|
{
|
|
return <AuthContext.Provider value={ getUserAuthData() }>{ children }</AuthContext.Provider>;
|
|
};
|
|
|
|
export const useAuth = () =>
|
|
{
|
|
return useContext(AuthContext);
|
|
};
|