diff --git a/.env.exemple b/.env.exemple index 72fb57a3..38e387cd 100644 --- a/.env.exemple +++ b/.env.exemple @@ -1 +1,7 @@ -NEXT_PUBLIC_BACKEND_URL=http://127.0.0.1:8000 \ No newline at end of file +NEXT_PUBLIC_BACKEND_URL=http://127.0.0.1:8000 +# https://hyperion-3.dev.eclair.ec-lyon.fr +NEXT_PUBLIC_FRONTEND_URL=http://localhost:3000 +# https://raid-registering.myecl.fr +NEXT_PUBLIC_REDIRECT_URL=http://localhost:3000/login + +NEXT_PUBLIC_CLIENT_ID="RaidRegistering" \ No newline at end of file diff --git a/next.config.mjs b/next.config.mjs index 90620340..3026cde5 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -3,7 +3,7 @@ import { withPlausibleProxy } from "next-plausible"; const nextConfig = { - output: 'export', + output: "export", webpack: (config, { isServer }) => { config.resolve.alias.canvas = false; return config; diff --git a/package.json b/package.json index 1bcd9328..2bb30118 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "next": "14.2.3", "next-plausible": "^3.12.0", "next-themes": "^0.3.0", + "oauth4webapi": "^2.10.4", "react": "^18", "react-circular-progressbar": "^2.1.0", "react-currency-input-field": "^3.8.0", diff --git a/src/api/hyperionContext.ts b/src/api/hyperionContext.ts index 9def6af7..4c40775c 100644 --- a/src/api/hyperionContext.ts +++ b/src/api/hyperionContext.ts @@ -1,5 +1,6 @@ import type { QueryKey, UseQueryOptions } from "@tanstack/react-query"; import { QueryOperation } from "./hyperionComponents"; +import { useToken } from "../hooks/useToken"; export type HyperionContext = { fetcherOptions: { @@ -11,6 +12,7 @@ export type HyperionContext = { * Query params to inject in the fetcher */ queryParams?: {}; + getToken?: () => Promise; }; queryOptions: { /** @@ -41,8 +43,13 @@ export function useHyperionContext< "queryKey" | "queryFn" >, ): HyperionContext { + + const { getToken } = useToken(); + return { - fetcherOptions: {}, + fetcherOptions: { + getToken + }, queryOptions: {}, queryKeyFn, }; diff --git a/src/api/hyperionFetcher.ts b/src/api/hyperionFetcher.ts index 9c1a70e3..84a1214a 100644 --- a/src/api/hyperionFetcher.ts +++ b/src/api/hyperionFetcher.ts @@ -33,6 +33,7 @@ export async function hyperionFetch< pathParams, queryParams, signal, + getToken, }: HyperionFetcherOptions< TBody, THeaders, @@ -59,6 +60,13 @@ export async function hyperionFetch< delete requestHeaders["Content-Type"]; } + if (getToken) { + const token = await getToken(); + if (token) { + requestHeaders["Authorization"]= `Bearer ${token}`; + } + } + const response = await window.fetch( `${baseUrl}${resolveUrl(url, queryParams, pathParams)}`, { diff --git a/src/app/login/page.tsx b/src/app/login/page.tsx index c239306b..a3fb53e5 100644 --- a/src/app/login/page.tsx +++ b/src/app/login/page.tsx @@ -14,14 +14,15 @@ import { import MyECLButton from "../../components/login/MyECLButton"; import Link from "next/link"; -const Login = () => { +function Login() { return (
Se connecter - Si vous possédez déjà un compte MyECL, vous pouvez vous connecter avec. + Si vous possédez déjà un compte MyECL, vous pouvez vous connecter + avec. @@ -42,6 +43,6 @@ const Login = () => {
); -}; +} export default Login; diff --git a/src/app/page.tsx b/src/app/page.tsx index f3c39263..c3b3b072 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -4,7 +4,6 @@ import { EmptyParticipantCard } from "../components/home/participantView/EmptyPa import { ParticipantCard } from "../components/home/participantView/ParicipantCard"; import { TeamCard } from "../components/home/teamCard/TeamCard"; import { TopBar } from "../components/home/TopBar"; -import { useAuth } from "../hooks/useAuth"; import { useRouter, useSearchParams } from "next/navigation"; import { useTeam } from "../hooks/useTeam"; import { CreateParticipant } from "../components/home/CreateParticipant"; @@ -20,12 +19,13 @@ import { toast } from "../components/ui/use-toast"; import { StatusDialog } from "../components/custom/StatusDialog"; import { Button } from "../components/ui/button"; import { RegisteringCompleteDialog } from "../components/home/RegisteringCompleteDialog"; +import { useTokenStore } from "../stores/token"; const Home = () => { - const { isTokenQueried, token } = useAuth(); const { me, isFetched, refetch } = useParticipant(); const { me: user, isAdmin } = useUser(); const { team, createTeam, refetchTeam, isLoading: isTeamLoading } = useTeam(); + const { token } = useTokenStore(); const [isOpened, setIsOpened] = useState(false); const [isEndDialogOpened, setIsEndDialogOpened] = useState(true); const searchParams = useSearchParams(); @@ -47,7 +47,7 @@ const Home = () => { router.replace("/"); } - if (isTokenQueried && token === null) { + if (token === null) { router.replace("/login"); } diff --git a/src/app/recover/page.tsx b/src/app/recover/page.tsx index 8fca9aa1..86aeea9a 100644 --- a/src/app/recover/page.tsx +++ b/src/app/recover/page.tsx @@ -9,9 +9,7 @@ const RecoverPage = () => { return showRecover ? ( setShowRecover(false)} /> ) : ( - setShowRecover(true) - }/> + setShowRecover(true)} /> ); }; diff --git a/src/components/custom/PdfViewer.tsx b/src/components/custom/PdfViewer.tsx index e495c609..dd73bfe8 100644 --- a/src/components/custom/PdfViewer.tsx +++ b/src/components/custom/PdfViewer.tsx @@ -30,21 +30,21 @@ export const PdfViewer = ({ file, width }: PdfViewerProps) => { // get the width of the parent element const maxWidth = self?.innerWidth ?? width ?? 550; return ( - } - > - {Array.from(new Array(numPages), (el, index) => ( - - ))} - + } + > + {Array.from(new Array(numPages), (el, index) => ( + + ))} + ); }; diff --git a/src/components/home/RegisteringCompleteDialog.tsx b/src/components/home/RegisteringCompleteDialog.tsx index ed98d050..de70821d 100644 --- a/src/components/home/RegisteringCompleteDialog.tsx +++ b/src/components/home/RegisteringCompleteDialog.tsx @@ -29,7 +29,7 @@ export const RegisteringCompleteDialog = ({ toast({ title: "Erreur", description: "Impossible de télécharger le fichier", - variant: "destructive" + variant: "destructive", }); setIsFileLoading(false); return; diff --git a/src/components/home/userSheet/logoutButton.tsx b/src/components/home/userSheet/logoutButton.tsx index d3ada9f2..092515db 100644 --- a/src/components/home/userSheet/logoutButton.tsx +++ b/src/components/home/userSheet/logoutButton.tsx @@ -1,9 +1,17 @@ -import { useAuth } from "@/src/hooks/useAuth"; import { HiLogout } from "react-icons/hi"; import { Button } from "../../ui/button"; +import { useRouter } from "next/navigation"; +import { useTokenStore } from "@/src/stores/token"; export const LogoutButton = () => { - const { logout } = useAuth(); + const { setToken, setRefreshToken } = useTokenStore(); + const router = useRouter(); + + function logout() { + setToken(null); + setRefreshToken(null); + router.push("/"); + } return (