From 0767bf6ffad2a3be8a14b7dea3aebacef27323f1 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <p.gawron@atcomp.pl>
Date: Thu, 23 May 2024 15:18:10 +0200
Subject: [PATCH] 403 should be reported as "Access denied."

---
 src/redux/middlewares/error.middleware.ts        | 16 ++++++++++------
 src/utils/error-report/errorReporting.ts         |  4 +++-
 src/utils/error-report/getErrorCode.ts           |  3 +++
 .../getErrorMessage/getErrorMessage.constants.ts |  1 +
 4 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/src/redux/middlewares/error.middleware.ts b/src/redux/middlewares/error.middleware.ts
index e9f21c3b..8c6bd816 100644
--- a/src/redux/middlewares/error.middleware.ts
+++ b/src/redux/middlewares/error.middleware.ts
@@ -2,6 +2,7 @@ import type { AppListenerEffectAPI, AppStartListening } from '@/redux/store';
 import { Action, createListenerMiddleware, isRejected } from '@reduxjs/toolkit';
 import { createErrorData } from '@/utils/error-report/errorReporting';
 import { openErrorReportModal } from '@/redux/modal/modal.slice';
+import { showToast } from '@/utils/showToast';
 
 export const errorListenerMiddleware = createListenerMiddleware();
 
@@ -12,12 +13,15 @@ export const errorMiddlewareListener = async (
   { getState, dispatch }: AppListenerEffectAPI,
 ): Promise<void> => {
   if (isRejected(action) && action.type !== 'user/getSessionValid/rejected') {
-    // eslint-disable-next-line no-console
-    console.log(action);
-    const errorData = await createErrorData(action.error, getState());
-    // eslint-disable-next-line no-console
-    console.log(errorData);
-    dispatch(openErrorReportModal(errorData));
+    if (action.error.code === '403') {
+      showToast({
+        type: 'error',
+        message: 'Access denied.',
+      });
+    } else {
+      const errorData = await createErrorData(action.error, getState());
+      dispatch(openErrorReportModal(errorData));
+    }
   }
 };
 
diff --git a/src/utils/error-report/errorReporting.ts b/src/utils/error-report/errorReporting.ts
index da42c8e5..4bc65253 100644
--- a/src/utils/error-report/errorReporting.ts
+++ b/src/utils/error-report/errorReporting.ts
@@ -3,6 +3,7 @@ import { SerializedError } from '@reduxjs/toolkit';
 import { ONE_THOUSAND } from '@/constants/common';
 import {
   GENERIC_AXIOS_ERROR_CODE,
+  NOT_FOUND_AXIOS_ERROR_CODE,
   UNKNOWN_AXIOS_ERROR_CODE,
   UNKNOWN_ERROR,
 } from '@/utils/getErrorMessage/getErrorMessage.constants';
@@ -48,7 +49,8 @@ export const createErrorData = async (
       code &&
       code !== UNKNOWN_ERROR &&
       code !== UNKNOWN_AXIOS_ERROR_CODE &&
-      code !== GENERIC_AXIOS_ERROR_CODE
+      code !== GENERIC_AXIOS_ERROR_CODE &&
+      code !== NOT_FOUND_AXIOS_ERROR_CODE
     ) {
       try {
         javaStacktrace = (await axiosInstance.get<JavaStacktrace>(apiPath.getStacktrace(code))).data
diff --git a/src/utils/error-report/getErrorCode.ts b/src/utils/error-report/getErrorCode.ts
index 8a453688..df25ac8e 100644
--- a/src/utils/error-report/getErrorCode.ts
+++ b/src/utils/error-report/getErrorCode.ts
@@ -14,6 +14,9 @@ export const getErrorCode = (error: unknown): string => {
         } else if (typeof error.response.data === 'string') {
           code = JSON.parse(error.response.data)['error-id'];
         }
+        if (code === undefined || code === null) {
+          code = `${error.response.status}`;
+        }
       }
     } catch (e) {
       code = UNKNOWN_AXIOS_ERROR_CODE;
diff --git a/src/utils/getErrorMessage/getErrorMessage.constants.ts b/src/utils/getErrorMessage/getErrorMessage.constants.ts
index 406df75f..e6d05b27 100644
--- a/src/utils/getErrorMessage/getErrorMessage.constants.ts
+++ b/src/utils/getErrorMessage/getErrorMessage.constants.ts
@@ -1,5 +1,6 @@
 export const UNKNOWN_ERROR = 'An unknown error occurred. Please try again later.';
 export const UNKNOWN_AXIOS_ERROR_CODE = 'UNKNOWN_AXIOS_ERROR';
+export const NOT_FOUND_AXIOS_ERROR_CODE = '404';
 export const GENERIC_AXIOS_ERROR_CODE = 'ERR_BAD_REQUEST';
 
 export const HTTP_ERROR_MESSAGES = {
-- 
GitLab