From 7125c5f40dcc275499c8470078b526c5944cb360 Mon Sep 17 00:00:00 2001 From: Myzel394 <50424412+Myzel394@users.noreply.github.com> Date: Sat, 3 Dec 2022 17:29:36 +0100 Subject: [PATCH] improved authentication handling; added get-me api --- src/AuthContext/AuthContextProvider.tsx | 18 +++++++++++++++--- src/apis/get-me.ts | 10 ++++++++++ src/apis/index.ts | 2 ++ src/apis/refresh-token.ts | 8 +++++++- 4 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 src/apis/get-me.ts diff --git a/src/AuthContext/AuthContextProvider.tsx b/src/AuthContext/AuthContextProvider.tsx index 9592a2d..8696490 100644 --- a/src/AuthContext/AuthContextProvider.tsx +++ b/src/AuthContext/AuthContextProvider.tsx @@ -4,10 +4,16 @@ import {AxiosError} from "axios" import {decrypt, readMessage, readPrivateKey} from "openpgp" import {useNavigate} from "react-router-dom" -import {useMutation} from "@tanstack/react-query" +import {useMutation, useQuery} from "@tanstack/react-query" -import {ServerUser, User} from "~/server-types" -import {REFRESH_TOKEN_URL, RefreshTokenResult, logout as logoutUser, refreshToken} from "~/apis" +import {AuthenticationDetails, ServerUser, User} from "~/server-types" +import { + REFRESH_TOKEN_URL, + RefreshTokenResult, + getMe, + logout as logoutUser, + refreshToken, +} from "~/apis" import {client} from "~/constants/axios-client" import {decryptString, encryptString} from "~/utils" import {ExtensionKleckEvent} from "~/extension-types" @@ -126,6 +132,12 @@ export default function AuthContextProvider({children}: AuthContextProviderProps [user?.encryptedPassword], ) + useQuery(["get_me"], getMe, { + refetchOnWindowFocus: "always", + refetchOnReconnect: "always", + retry: 2, + }) + const value = useMemo( () => ({ user: user ?? null, diff --git a/src/apis/get-me.ts b/src/apis/get-me.ts new file mode 100644 index 0000000..c211f00 --- /dev/null +++ b/src/apis/get-me.ts @@ -0,0 +1,10 @@ +import {AuthenticationDetails} from "~/server-types" +import {client} from "~/constants/axios-client" + +export default async function getMe(): Promise { + const {data} = await client.get(`${import.meta.env.VITE_SERVER_BASE_URL}/v1/account/me`, { + withCredentials: true, + }) + + return data +} diff --git a/src/apis/index.ts b/src/apis/index.ts index c6681b4..81a7522 100644 --- a/src/apis/index.ts +++ b/src/apis/index.ts @@ -36,3 +36,5 @@ export * from "./update-alias" export {default as updateAlias} from "./update-alias" export * from "./delete-report" export {default as deleteReport} from "./delete-report" +export * from "./get-me" +export {default as getMe} from "./get-me" diff --git a/src/apis/refresh-token.ts b/src/apis/refresh-token.ts index 9e6404c..8d05f55 100644 --- a/src/apis/refresh-token.ts +++ b/src/apis/refresh-token.ts @@ -9,7 +9,13 @@ export interface RefreshTokenResult { export const REFRESH_TOKEN_URL = `${import.meta.env.VITE_SERVER_BASE_URL}/v1/auth/refresh` export default async function refreshToken(): Promise { - const {data} = await client.post(REFRESH_TOKEN_URL) + const {data} = await client.post( + REFRESH_TOKEN_URL, + {}, + { + withCredentials: true, + }, + ) return data }