feat: init routes protection

This commit is contained in:
swve 2023-04-10 19:59:50 +02:00
parent 49b6d1dfe7
commit 1ad8ee12b1
25 changed files with 82 additions and 64 deletions

View file

@ -0,0 +1,14 @@
import { AppRouterInstance } from "next/dist/shared/lib/app-router-context";
import { NextRouter } from "next/router";
export const denyAccessToUser = (error : any, router: AppRouterInstance) => {
if (error.status === 401) {
router.push("/login");
}
if (error.status === 403) {
router.push("/login");
// TODO : add a message to the user to tell him he is not allowed to access this page, route to /error
}
}

View file

@ -1,3 +1,6 @@
import { AppRouterInstance } from "next/dist/shared/lib/app-router-context";
import { denyAccessToUser } from "../react/middlewares/views";
export const RequestBody = (method: string, data: any) => {
let HeadersConfig = new Headers({ "Content-Type": "application/json" });
let options: any = {
@ -24,7 +27,7 @@ export const RequestBodyForm = (method: string, data: any) => {
return options;
};
export const swrFetcher = async (url: string, body: any) => {
export const swrFetcher = async (url: string, body: any, router?: AppRouterInstance) => {
// Create the request options
let HeadersConfig = new Headers({ "Content-Type": "application/json" });
let options: any = {
@ -39,15 +42,25 @@ export const swrFetcher = async (url: string, body: any) => {
options.body = JSON.stringify(body);
}
// Fetch the data
const res = await fetch(url, options);
try {
// Fetch the data
const request = await fetch(url, options);
let res = errorHandling(request);
// If the response is not in the 200 range, throw an error
// Return the data
return res;
} catch (error: any) {
if (router) {
denyAccessToUser(error, router);
}
}
};
export const errorHandling = (res: any) => {
if (!res.ok) {
const error = new Error("An error occurred while fetching the data.");
const error: any = new Error(`Error ${res.status}: ${res.statusText}`, {});
error.status = res.status;
throw error;
}
// Return the data
return res.json();
};