From c7d4bcff9eece7ed3ae0fcde3f2b46d533c0c85c Mon Sep 17 00:00:00 2001
From: Richard Heise <rfhf19@inf.ufpr.br>
Date: Thu, 17 Sep 2020 12:11:35 -0300
Subject: [PATCH] Issue/47: FIX BUG: Token is now deleted if it expires

Signed-off-by: Richard Heise <rfhf19@inf.ufpr.br>
---
 .../JornalFolder/FormFieldSubform.js          | 10 ++++-
 .../SummaryFolder/FormFieldSubform.js         | 10 ++++-
 .../fieldsVisualizeForm/FormFieldSubform.js   | 20 +++++++---
 src/contexts/FormContext.js                   |  2 +
 src/contexts/useForm.js                       | 37 ++++++++++++-------
 src/pages/AnswerForm.js                       |  9 +++++
 src/pages/GetForm.js                          | 16 ++++++--
 src/pages/ListForms.js                        |  2 +
 src/pages/VisualizeForm.js                    |  2 +
 9 files changed, 82 insertions(+), 26 deletions(-)

diff --git a/src/components/fieldsGetForm/JornalFolder/FormFieldSubform.js b/src/components/fieldsGetForm/JornalFolder/FormFieldSubform.js
index 980d51d..78d14e5 100644
--- a/src/components/fieldsGetForm/JornalFolder/FormFieldSubform.js
+++ b/src/components/fieldsGetForm/JornalFolder/FormFieldSubform.js
@@ -1,5 +1,5 @@
 import React, { useState, useEffect } from "react";
-import { useParams } from "react-router-dom";
+import { useParams, useHistory } from "react-router-dom";
 import { makeStyles } from "@material-ui/core/styles";
 import Grid from "@material-ui/core/Grid";
 import Button from "@material-ui/core/Button";
@@ -23,6 +23,7 @@ const useStyles = makeStyles(theme => ({
 
 function FormFieldSubform(props) {
   const classes = useStyles();
+  const history = useHistory();
 
   /** Subform id */
   const id = props.id;
@@ -38,6 +39,13 @@ function FormFieldSubform(props) {
         setFormData(res.data);
       })
       .catch(error => {
+        if (error.response.status === 401) {
+          window.sessionStorage.removeItem("token");
+          window.sessionStorage.removeItem("userId");
+          let path = `/signin`;
+          history.push(path);
+          return;
+        }
         alert(
           "Um erro inesperado ocorreu ao tentar obter o subform na tela de Jornal."
         );
diff --git a/src/components/fieldsGetForm/SummaryFolder/FormFieldSubform.js b/src/components/fieldsGetForm/SummaryFolder/FormFieldSubform.js
index 50d40f9..b784f80 100644
--- a/src/components/fieldsGetForm/SummaryFolder/FormFieldSubform.js
+++ b/src/components/fieldsGetForm/SummaryFolder/FormFieldSubform.js
@@ -1,5 +1,5 @@
 import React, { useState, useEffect } from "react";
-import { useParams } from "react-router-dom";
+import { useParams, useHistory } from "react-router-dom";
 import { makeStyles } from "@material-ui/core/styles";
 import Grid from "@material-ui/core/Grid";
 import api from "../../../api";
@@ -22,6 +22,7 @@ const useStyles = makeStyles(theme => ({
 
 function FormFieldSubform(props) {
   const classes = useStyles();
+  const history = useHistory();
 
   /** Subform id */
   const id = props.id;
@@ -37,6 +38,13 @@ function FormFieldSubform(props) {
         setFormData(res.data);
       })
       .catch(error => {
+        if (error.response.status === 401) {
+          window.sessionStorage.removeItem("token");
+          window.sessionStorage.removeItem("userId");
+          let path = `/signin`;
+          history.push(path);
+          return;
+        }
         alert(
           "Um erro inesperado ocorreu ao tentar obter o subform na tela de resumo."
         );
diff --git a/src/components/fieldsVisualizeForm/FormFieldSubform.js b/src/components/fieldsVisualizeForm/FormFieldSubform.js
index 5812a36..ce45234 100644
--- a/src/components/fieldsVisualizeForm/FormFieldSubform.js
+++ b/src/components/fieldsVisualizeForm/FormFieldSubform.js
@@ -1,5 +1,5 @@
 import React, { useState, useEffect } from "react";
-import { useParams } from "react-router-dom";
+import { useParams, useHistory } from "react-router-dom";
 import { makeStyles } from "@material-ui/core/styles";
 import Grid from "@material-ui/core/Grid";
 import Button from "@material-ui/core/Button";
@@ -10,19 +10,20 @@ import FormFieldSelect from "./FormFieldSelect";
 import FormFieldRadio from "./FormFieldRadio";
 import FormFieldCheckbox from "./FormFieldCheckbox";
 
-const useStyles = makeStyles((theme) => ({
+const useStyles = makeStyles(theme => ({
   menu: {
     width: theme.spacing(6),
     minheight: theme.spacing(15),
     position: "fixed",
     top: theme.spacing(10),
     left: "90%",
-    padding: theme.spacing(1),
-  },
+    padding: theme.spacing(1)
+  }
 }));
 
 function FormFieldSubform(props) {
   const classes = useStyles();
+  const history = useHistory();
 
   /** Subform id */
   const id = props.id;
@@ -34,10 +35,17 @@ function FormFieldSubform(props) {
   async function getForm(id) {
     const res = await api
       .get(`/form/${id}`)
-      .then(function (res) {
+      .then(function(res) {
         setFormData(res.data);
       })
-      .catch((error) => {
+      .catch(error => {
+        if (error.response.status === 401) {
+          window.sessionStorage.removeItem("token");
+          window.sessionStorage.removeItem("userId");
+          let path = `/signin`;
+          history.push(path);
+          return;
+        }
         alert("Um erro inesperado ocorreu ao tentar obter o subform.");
       });
   }
diff --git a/src/contexts/FormContext.js b/src/contexts/FormContext.js
index 015c9e9..e49b2a1 100644
--- a/src/contexts/FormContext.js
+++ b/src/contexts/FormContext.js
@@ -39,6 +39,8 @@ const FormProvider = props => {
         })
         .catch(error => {
           if (error.response.status === 401) {
+            window.sessionStorage.removeItem("token");
+            window.sessionStorage.removeItem("userId");
             let path = `/signin`;
             history.push(path);
             return;
diff --git a/src/contexts/useForm.js b/src/contexts/useForm.js
index 54e8174..f9ad274 100644
--- a/src/contexts/useForm.js
+++ b/src/contexts/useForm.js
@@ -8,7 +8,7 @@ import {
   selectOptionsTesting,
   testSubformSchema,
   selectOptionTextTesting,
-  testTextValidation,
+  testTextValidation
 } from "../components/fieldsDisplayForm/utils/schemas";
 import {
   pushTitle,
@@ -16,7 +16,7 @@ import {
   pushSelect,
   pushRadio,
   pushCheckbox,
-  pushSubform,
+  pushSubform
 } from "../components/fieldsDisplayForm/utils/FormComposition";
 
 import api from "../api";
@@ -237,7 +237,7 @@ const useForm = () => {
    */
   async function setId() {
     const fetchData = async () => {
-      await api.get(`/form/${routeId}`).then(async function (res) {
+      await api.get(`/form/${routeId}`).then(async function(res) {
         let backForm = createFrontendForm(res.data);
         for (let i = 1; i < backForm.length; i++) {
           for (let j = 1; j < form.length; j++) {
@@ -247,13 +247,13 @@ const useForm = () => {
                   "question",
                   "description",
                   "options",
-                  "subformId",
+                  "subformId"
                 ]) !==
                   JSON.stringify(form[j], [
                     "question",
                     "description",
                     "options",
-                    "subformId",
+                    "subformId"
                   ]) ||
                 differentValidation(backForm[i], form[j])
               ) {
@@ -278,18 +278,20 @@ const useForm = () => {
       const post_response = await api
         .put(`/form/${routeId}`, data, {
           headers: {
-            authorization: `bearer ${window.sessionStorage.getItem("token")}`,
-          },
+            authorization: `bearer ${window.sessionStorage.getItem("token")}`
+          }
         })
-        .then(function (error) {
+        .then(function(error) {
           if (!error.response) {
             alert("Seu formulário foi atualizado com sucesso.");
             let path = `/signin`;
             history.push(path);
           }
         })
-        .catch(function (error) {
+        .catch(function(error) {
           if (error.response.status === 401) {
+            window.sessionStorage.removeItem("token");
+            window.sessionStorage.removeItem("userId");
             let path = `/signin`;
             history.push(path);
             return;
@@ -306,17 +308,24 @@ const useForm = () => {
       const post_response = await api
         .post(`/form`, await createBackendForm(form), {
           headers: {
-            authorization: `bearer ${window.sessionStorage.getItem("token")}`,
-          },
+            authorization: `bearer ${window.sessionStorage.getItem("token")}`
+          }
         })
-        .then(function (error) {
+        .then(function(error) {
           if (!error.response) {
             alert("Seu formulário foi criado com sucesso.");
             let path = `/signin`;
             history.push(path);
           }
         })
-        .catch(function (error) {
+        .catch(function(error) {
+          if (error.response.status === 401) {
+            window.sessionStorage.removeItem("token");
+            window.sessionStorage.removeItem("userId");
+            let path = `/signin`;
+            history.push(path);
+            return;
+          }
           alert("Um erro ocorreu.");
         });
     }
@@ -342,7 +351,7 @@ const useForm = () => {
     setValidationValue,
     removeValidation,
     onDragEnd,
-    submit,
+    submit
   };
 };
 
diff --git a/src/pages/AnswerForm.js b/src/pages/AnswerForm.js
index e4b535e..f86d909 100644
--- a/src/pages/AnswerForm.js
+++ b/src/pages/AnswerForm.js
@@ -153,6 +153,13 @@ function AnwserForm() {
         alert("Formulário respondido!");
       })
       .catch(error => {
+        if (error.response.status === 401) {
+          window.sessionStorage.removeItem("token");
+          window.sessionStorage.removeItem("userId");
+          let path = `/signin`;
+          history.push(path);
+          return;
+        }
         alert("Ocorreu um erro ao responder seu formulário.");
         return;
       });
@@ -199,6 +206,8 @@ function AnwserForm() {
       })
       .catch(error => {
         if (error.response.status === 401) {
+          window.sessionStorage.removeItem("token");
+          window.sessionStorage.removeItem("userId");
           let path = `/signin`;
           history.push(path);
           return;
diff --git a/src/pages/GetForm.js b/src/pages/GetForm.js
index fb24c5f..b9eabe1 100644
--- a/src/pages/GetForm.js
+++ b/src/pages/GetForm.js
@@ -1,5 +1,5 @@
 import React, { useState, useEffect } from "react";
-import { useParams, Route, Redirect } from "react-router-dom";
+import { useParams, Route, Redirect, useHistory } from "react-router-dom";
 import { makeStyles } from "@material-ui/core/styles";
 import Grid from "@material-ui/core/Grid";
 import api from "../api";
@@ -95,6 +95,7 @@ const theme = createMuiTheme({
 
 function GetForm() {
   const classes = useStyles();
+  const history = useHistory();
 
   /** Form id got from the browser's URL */
   const { id } = useParams();
@@ -140,6 +141,8 @@ function GetForm() {
       })
       .catch(error => {
         if (error.response.status === 401) {
+          window.sessionStorage.removeItem("token");
+          window.sessionStorage.removeItem("userId");
           setToLogin(true);
           return;
         }
@@ -166,9 +169,14 @@ function GetForm() {
         setAnswerNum(res.data.answerNumber);
       })
       .catch(error => {
-        alert(
-          "Um erro inesperado ocorreu. Contate os desenvolvedores (código 500-2)"
-        );
+        if (error.response.status === 401) {
+          window.sessionStorage.removeItem("token");
+          window.sessionStorage.removeItem("userId");
+          let path = `/signin`;
+          history.push(path);
+          return;
+        }
+        alert("Um erro inesperado ocorreu. Contate os desenvolvedores");
       });
     setIsReady(true);
   }
diff --git a/src/pages/ListForms.js b/src/pages/ListForms.js
index d609b39..0f71c7a 100644
--- a/src/pages/ListForms.js
+++ b/src/pages/ListForms.js
@@ -93,6 +93,8 @@ export default function ListForms() {
       })
       .catch(error => {
         if (error.response.status === 401) {
+          window.sessionStorage.removeItem("token");
+          window.sessionStorage.removeItem("userId");
           let path = `/signin`;
           history.push(path);
           return;
diff --git a/src/pages/VisualizeForm.js b/src/pages/VisualizeForm.js
index 1408c85..81c2279 100644
--- a/src/pages/VisualizeForm.js
+++ b/src/pages/VisualizeForm.js
@@ -79,6 +79,8 @@ function VisualizeForm() {
       })
       .catch((error) => {
         if (error.response.status === 401) {
+          window.sessionStorage.removeItem("token");
+          window.sessionStorage.removeItem("userId");
           let path = `/signin`;
           history.push(path);
           return;
-- 
GitLab