diff --git a/src/api/PrivateRoute/PrivateRoute.tsx b/src/api/PrivateRoute/PrivateRoute.tsx deleted file mode 100644 index b83511d1f735bae4c735e9f49991241ac2db27fa..0000000000000000000000000000000000000000 --- a/src/api/PrivateRoute/PrivateRoute.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import React, { useState, useEffect, useContext } from 'react'; -import { Route, Redirect, RouteProps } from 'react-router-dom'; -import { NonAuthRoutes } from 'api/routes'; -import { AuthContext } from 'components/AuthUser/AuthContext'; - -/** - * A wrapper for <Route> that redirects to the login screen if you're not yet authenticated. - * Every non-public route must be wrapped with this component. - * */ -type Props = { - Component: React.FC<RouteProps>; - path: string; - requiredRoles: string[]; -}; - -/* eslint-disable react/jsx-props-no-spreading */ -export const PrivateRoute = ({ - Component, - path, - requiredRoles, -}: Props): JSX.Element => { - const { role, isAuth } = useContext(AuthContext); - - // Check if the role is contained in the roles array (passed as props). - const userHasRequiredRole = requiredRoles.includes(role); - - const message = userHasRequiredRole - ? 'Please log in to view this page' - : 'Your role is not allowed'; - - return ( - <Route - exact={false} - path={path} - render={(props: RouteProps) => - isAuth && userHasRequiredRole ? ( - <Component {...props} /> - ) : ( - <Redirect - to={{ - pathname: !userHasRequiredRole - ? `${NonAuthRoutes.auth}${NonAuthRoutes.signIn}` - : NonAuthRoutes.unauthorized, - state: { - message, - requestedPath: path, - }, - }} - /> - ) - } - /> - ); -}; diff --git a/src/api/RestrictedRoute/RestrictedRoute.tsx b/src/api/RestrictedRoute/RestrictedRoute.tsx deleted file mode 100644 index 1230e56b9ad91772a34c829e52516b29cc97b6e6..0000000000000000000000000000000000000000 --- a/src/api/RestrictedRoute/RestrictedRoute.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import React, { useState, useEffect, useContext } from 'react'; -import { Route, Redirect, RouteProps } from 'react-router-dom'; -import { AuthRoutes, NonAuthRoutes } from 'api/routes'; -import { isAuthenticated } from 'api/isAuthenticated'; - -/** - * - * */ -type Props = { - Component: React.FC<RouteProps>; - restricted: boolean; - path: string; -}; - -/** - * Wrapper for Route that basing on if the user is authenticated, - * redirects to: - * - Entry point of the private route (the homepage); - * - Login page. - */ - -/* eslint-disable react/jsx-props-no-spreading */ -export const RestrictedRoute = ({ Component, path }: Props): JSX.Element => { - const [authUser, setAuthUser] = useState<boolean>(false); - useEffect(() => { - isAuthenticated(setAuthUser); - }); - - return ( - <Route - path={path} - render={(props: RouteProps) => - authUser ? ( - // Redirect to homepage. - <Redirect - to={{ pathname: `${AuthRoutes.dashboard}${AuthRoutes.home}` }} - /> - ) : ( - // Redirect to component. - <Component {...props} /> - ) - } - /> - ); -}; diff --git a/src/api/fetchCookie.ts b/src/api/fetchCookie.ts new file mode 100644 index 0000000000000000000000000000000000000000..b2b27209425b04987e927d8e33f71f8403e17c06 --- /dev/null +++ b/src/api/fetchCookie.ts @@ -0,0 +1,16 @@ +import axios from 'axios'; + +/** + * + * Ask and set csrf cookie to server. + * @param setIsCookieFetched function to set the state isCookieFetched. + * @returns null + */ +export const fetchCookie = async ( + setIsCookieFetched: React.Dispatch<React.SetStateAction<string>>, +): Promise<unknown> => { + const response = await axios('/api/web/csrf'); + setIsCookieFetched(response.data.token); + localStorage.setItem('COOKIE', response.data.token); + return null; +}; diff --git a/src/api/getRole.ts b/src/api/getRole.ts new file mode 100644 index 0000000000000000000000000000000000000000..a20d30444cd9c69f720a6f1b72f9317268cdc046 --- /dev/null +++ b/src/api/getRole.ts @@ -0,0 +1,12 @@ +import axios from 'axios'; +import { AuthContext } from 'components/AuthUser/AuthContext'; +import { useContext } from 'react'; + +export const getRole = async ( + setRole: React.Dispatch<React.SetStateAction<string>>, +): Promise<void> => { + const response = await axios('/api/web/login/get_role').then( + (res) => res.data.role, + ); + setRole(response); +}; diff --git a/src/api/isAuthenticated.ts b/src/api/isAuthenticated.ts new file mode 100644 index 0000000000000000000000000000000000000000..656a7ccd371031f8bd79a8b8bb7458abfa4ecb12 --- /dev/null +++ b/src/api/isAuthenticated.ts @@ -0,0 +1,10 @@ +import axios from 'axios'; + +export const isAuthenticated = async ( + setIsAuth: React.Dispatch<React.SetStateAction<boolean>>, +): Promise<void> => { + const response = await axios('/api/web/login/is_authenticated').then( + (res) => res.data.is_authenticated, + ); + setIsAuth(response); +};