Files
hspguard/web/src/context/oauth/provider.tsx

55 lines
1.3 KiB
TypeScript

import { useCallback, useState, type FC, type ReactNode } from "react";
import { OAuthContext } from ".";
import { codeApi } from "@/api/code";
interface IOAuthProvider {
children: ReactNode;
}
export const OAuthProvider: FC<IOAuthProvider> = ({ children }) => {
const [active, setActive] = useState(false);
const [clientID, setClientID] = useState("");
const [redirectURI, setRedirectURI] = useState("");
const [scope, setScope] = useState<string[]>([]);
const [state, setState] = useState("");
const [nonce, setNonce] = useState("");
const selectSession = useCallback(
async (token: string) => {
if (active && redirectURI) {
const codeResponse = await codeApi(token, nonce);
const params = new URLSearchParams({
code: codeResponse.code,
state,
});
window.location.replace(`${redirectURI}?${params.toString()}`);
}
},
[active, nonce, redirectURI, state],
);
return (
<OAuthContext.Provider
value={{
active,
clientID,
redirectURI,
scope,
state,
nonce,
setActive,
setClientID,
setRedirectURI,
setScope,
setState,
setNonce,
selectSession,
}}
>
{children}
</OAuthContext.Provider>
);
};